blob: bf36b17555b6a20870b6520af9349cd00d6d9be6 [file] [log] [blame]
/*
* 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());
}
}