| /* |
| * Copyright (c) 2013, 2015 Eike Stepper (Berlin, Germany) and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christian W. Damus (CEA LIST) - initial API and implementation |
| */ |
| package org.eclipse.net4j.util.ui.confirmation; |
| |
| import org.eclipse.net4j.util.confirmation.Confirmation; |
| |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Shell; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Set; |
| |
| /** |
| * @author Christian W. Damus (CEA LIST) |
| * |
| * @since 3.4 |
| */ |
| public class ConfirmationDialog extends MessageDialog |
| { |
| public ConfirmationDialog(Shell shell, String title, String message, Set<Confirmation> acceptableResponses, |
| Confirmation suggestedResponse) |
| { |
| this(shell, title, message, getButtonLabels(inOrder(acceptableResponses)), |
| inOrder(acceptableResponses).indexOf(suggestedResponse)); |
| } |
| |
| private ConfirmationDialog(Shell shell, String title, String message, String[] buttonLabels, int defaultIndex) |
| { |
| super(shell, title, null, message, MessageDialog.CONFIRM, buttonLabels, defaultIndex); |
| } |
| |
| public static Confirmation openConfirm(Shell shell, String title, String message, |
| Set<Confirmation> acceptableResponses, Confirmation suggestedResponse) |
| { |
| List<Confirmation> inOrder = inOrder(acceptableResponses); |
| String[] buttonLabels = getButtonLabels(inOrder); |
| int defaultIndex = inOrder.indexOf(suggestedResponse); |
| |
| ConfirmationDialog dialog = new ConfirmationDialog(shell, title, message, buttonLabels, defaultIndex); |
| int index = dialog.open(); |
| return index == SWT.DEFAULT ? suggestedResponse : inOrder.get(index); |
| } |
| |
| private static String[] getButtonLabels(List<Confirmation> acceptableResponses) |
| { |
| List<String> result = new ArrayList<String>(acceptableResponses.size()); |
| |
| for (Confirmation confirmation : acceptableResponses) |
| { |
| result.add(getLabel(confirmation)); |
| } |
| |
| return result.toArray(new String[result.size()]); |
| } |
| |
| private static List<Confirmation> inOrder(Collection<Confirmation> confirmations) |
| { |
| List<Confirmation> result = new ArrayList<Confirmation>(confirmations); |
| Collections.sort(result); |
| return result; |
| } |
| |
| private static String getLabel(Confirmation confirmation) |
| { |
| switch (confirmation) |
| { |
| case OK: |
| return IDialogConstants.OK_LABEL; |
| case CANCEL: |
| return IDialogConstants.CANCEL_LABEL; |
| case YES: |
| return IDialogConstants.YES_LABEL; |
| case NO: |
| return IDialogConstants.NO_LABEL; |
| } |
| |
| throw new IllegalArgumentException(confirmation.name()); |
| } |
| } |