/*******************************************************************************
* Copyright (c) 2012 EclipseSource 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:
* EclipseSource - initial API and implementation
* Gunnar Wagenknecht - copyed from RAP examples and adapted for Gyrex
******************************************************************************/
package org.eclipse.gyrex.admin.ui.internal.widgets;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
public class NonBlockingMessageDialogs {
// Copy of MessageDialog#getButtonLabels( int )
private static String[] getButtonLabels(final int kind) {
String[] dialogButtonLabels;
switch (kind) {
case MessageDialog.ERROR:
case MessageDialog.INFORMATION:
case MessageDialog.WARNING: {
dialogButtonLabels = new String[] { IDialogConstants.get().OK_LABEL };
break;
}
case MessageDialog.CONFIRM: {
dialogButtonLabels = new String[] { IDialogConstants.get().OK_LABEL, IDialogConstants.get().CANCEL_LABEL };
break;
}
case MessageDialog.QUESTION: {
dialogButtonLabels = new String[] { IDialogConstants.get().YES_LABEL, IDialogConstants.get().NO_LABEL };
break;
}
case MessageDialog.QUESTION_WITH_CANCEL: {
dialogButtonLabels = new String[] { IDialogConstants.get().YES_LABEL, IDialogConstants.get().NO_LABEL, IDialogConstants.get().CANCEL_LABEL };
break;
}
default: {
throw new IllegalArgumentException("Illegal value for kind in MessageDialog.open()");
}
}
return dialogButtonLabels;
}
private static void open(final int kind, final Shell parent, final String title, final String message, final DialogCallback callback) {
final String[] buttonLabels = getButtonLabels(kind);
final MessageDialog dialog = new MessageDialog(parent, title, null, message, kind, buttonLabels, 0) {
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Override
public boolean close() {
final boolean result = super.close();
if (callback != null) {
callback.dialogClosed(getReturnCode());
}
return result;
}
@Override
protected int getShellStyle() {
return super.getShellStyle() | SWT.SHEET;
}
};
dialog.setBlockOnOpen(false);
dialog.open();
}
public static void openConfirm(final Shell parent, final String title, final String message, final DialogCallback callback) {
open(MessageDialog.CONFIRM, parent, title, message, callback);
}
public static void openError(final Shell parent, final String title, final String message, final DialogCallback callback) {
open(MessageDialog.ERROR, parent, title, message, callback);
}
public static void openInformation(final Shell parent, final String title, final String message, final DialogCallback callback) {
open(MessageDialog.INFORMATION, parent, title, message, callback);
}
public static void openQuestion(final Shell parent, final String title, final String message, final DialogCallback callback) {
open(MessageDialog.QUESTION, parent, title, message, callback);
}
public static void openWarning(final Shell parent, final String title, final String message, final DialogCallback callback) {
open(MessageDialog.WARNING, parent, title, message, callback);
}
}