/*
* Copyright (c) 2016 Fraunhofer IGD
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Fraunhofer IGD <http://www.igd.fraunhofer.de/>
*/
package de.fhg.igd.swingrcp;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
/*+-------------+----------------------------------------------------------*
*| | |_|_|_|_| Fraunhofer-Institut fuer Graphische Datenverarbeitung *
*|__|__|_|_|_|_| (Fraunhofer Institute for Computer Graphics) *
*| | |_|_|_|_| *
*|__|__|_|_|_|_| *
*| __ | ___| *
*| /_ /_ / _ | Fraunhoferstrasse 5 *
*|/ / / /__/ | D-64283 Darmstadt, Germany *
*+-------------+----------------------------------------------------------*/
/**
* Message dialog that contains an AWT/Swing component
*
* @author Simon Templer
*/
@SuppressWarnings("all")
public class ComponentMessageDialog extends MessageDialog {
private final Component component;
/**
* {@inheritDoc}
*
* @param component the component
*/
public ComponentMessageDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage,
String dialogMessage, int dialogImageType, String[] dialogButtonLabels,
int defaultIndex, Component component) {
super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType,
dialogButtonLabels, defaultIndex);
this.component = component;
}
/**
* @see MessageDialog#createCustomArea(Composite)
*/
@Override
protected Control createCustomArea(Composite parent) {
SwingComposite page = new SwingComposite(parent);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
page.setLayoutData(data);
Container container = page.getContentPane();
container.setLayout(new BorderLayout());
container.add(component);
Dimension dim = container.getPreferredSize();
data.widthHint = dim.width;
data.heightHint = dim.height;
return page;
}
/**
* @see MessageDialog#openQuestion(Shell, String, String)
*
* @param component the component
*/
public static boolean openQuestion(Shell parent, String title, String message,
Component component) {
return open(QUESTION, parent, title, message, SWT.NONE, component);
}
/**
* @see MessageDialog#open(int, Shell, String, String, int)
*
* @param component the component
*/
private static boolean open(int kind, Shell parent, String title, String message, int style,
Component component) {
ComponentMessageDialog dialog = new ComponentMessageDialog(parent, title, null, message,
kind, getButtonLabels(kind), 0, component);
style &= SWT.SHEET;
dialog.setShellStyle(dialog.getShellStyle() | style);
return dialog.open() == 0;
}
/**
* @see MessageDialog#getButtonLabels(int)
*/
static String[] getButtonLabels(int kind) {
String[] dialogButtonLabels;
switch (kind) {
case ERROR:
case INFORMATION:
case WARNING: {
dialogButtonLabels = new String[] { IDialogConstants.OK_LABEL };
break;
}
case CONFIRM: {
dialogButtonLabels = new String[] { IDialogConstants.OK_LABEL,
IDialogConstants.CANCEL_LABEL };
break;
}
case QUESTION: {
dialogButtonLabels = new String[] { IDialogConstants.YES_LABEL,
IDialogConstants.NO_LABEL };
break;
}
case QUESTION_WITH_CANCEL: {
dialogButtonLabels = new String[] { IDialogConstants.YES_LABEL,
IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL };
break;
}
default: {
throw new IllegalArgumentException("Illegal value for kind in MessageDialog.open()"); //$NON-NLS-1$
}
}
return dialogButtonLabels;
}
}