/*******************************************************************************
* Copyright (c) 2009, 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
******************************************************************************/
package org.eclipse.rap.examples.pages;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.rap.rwt.widgets.DialogUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
public class DialogExamplePage implements IExamplePage {
private Label resultsLabel;
public void createControl( Composite parent ) {
parent.setLayout( ExampleUtil.createMainLayout( 1 ) );
createSwtArea( parent );
createJfaceArea( parent );
createCustomArea( parent );
createResultsComposite( parent );
}
private void createSwtArea( Composite parent ) {
Composite swtComp = new Composite( parent, SWT.NONE );
swtComp.setLayoutData( ExampleUtil.createHorzFillData() );
swtComp.setLayout( ExampleUtil.createGridLayout( 3, false, true, true ) );
ExampleUtil.createHeading( swtComp, "SWT Dialogs", 3 );
createSwtDialogButtons( swtComp );
}
private void createJfaceArea( Composite parent ) {
Composite jFaceComp = new Composite( parent, SWT.NONE );
jFaceComp.setLayoutData( ExampleUtil.createHorzFillData() );
jFaceComp.setLayout( ExampleUtil.createGridLayout( 3, false, true, true ) );
ExampleUtil.createHeading( jFaceComp, "JFace Dialogs", 3 );
createJfaceDialogButtons( jFaceComp );
}
private void createCustomArea( Composite parent ) {
Composite customComp = new Composite( parent, SWT.NONE );
customComp.setLayoutData( ExampleUtil.createHorzFillData() );
customComp.setLayout( ExampleUtil.createGridLayout( 3, false, true, true ) );
ExampleUtil.createHeading( customComp, "Custom Dialogs", 3 );
createCustomDialogs( customComp );
}
private void createResultsComposite( Composite parent ) {
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( ExampleUtil.createGridLayout( 3, false, true, true ) );
composite.setLayoutData( ExampleUtil.createHorzFillData() );
resultsLabel = new Label( composite, SWT.WRAP );
resultsLabel.setLayoutData( ExampleUtil.createFillData() );
}
//////
// SWT
private void createSwtDialogButtons( Composite swtComp ) {
createMessageDialogButton( swtComp );
createColorDialogButton( swtComp );
createFontDialogButton( swtComp );
}
private void createMessageDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "MessageBox" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageBox();
}
} );
button.setLayoutData( createButtonGridData() );
}
private void createColorDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "ColorDialog" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
showColorDialog();
}
});
button.setLayoutData( createButtonGridData() );
}
private void createFontDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "FontDialog" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
showFontDialog();
}
});
button.setLayoutData( createButtonGridData() );
}
////////
// JFace
private void createJfaceDialogButtons( Composite parent ) {
createInputDialogButton( parent );
createProgressDialogButton( parent );
createErrorDialogButton( parent );
createInfoMessageDialogButton( parent );
createWarningMessageDialogButton( parent );
createErrorMessageDialogButton( parent );
createQuestionMessageDialogButton( parent );
createConfirmMessageDialogButton( parent );
}
private void createInputDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Input Dialog" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showInputDialog();
}
} );
button.setLayoutData( createButtonGridData() );
}
private void createProgressDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "ProgressDialog" );
button.setLayoutData( createButtonGridData() );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
showProgressDialog();
}
} );
}
private void createErrorDialogButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setLayoutData( createButtonGridData() );
button.setText( "Error Dialog" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showErrorDialog();
}
} );
}
private void createInfoMessageDialogButton( Composite parent ) {
Button showMessageInfoDlgButton = new Button( parent, SWT.PUSH );
showMessageInfoDlgButton.setLayoutData( createButtonGridData() );
showMessageInfoDlgButton.setText( "Info Message" );
showMessageInfoDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageDialogInfo();
}
} );
}
private void createWarningMessageDialogButton( Composite parent ) {
Button showMessageWarningDlgButton = new Button( parent, SWT.PUSH );
showMessageWarningDlgButton.setLayoutData( createButtonGridData() );
showMessageWarningDlgButton.setText( "Warning Dialog" );
showMessageWarningDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageDialogWarning();
}
} );
}
private void createErrorMessageDialogButton( Composite parent ) {
Button showMessageErrorDlgButton = new Button( parent, SWT.PUSH );
showMessageErrorDlgButton.setLayoutData( createButtonGridData() );
showMessageErrorDlgButton.setText( "Error Message" );
showMessageErrorDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageDialogError();
}
} );
}
private void createQuestionMessageDialogButton( Composite parent ) {
Button showMessageQuestionDlgButton = new Button( parent, SWT.PUSH );
showMessageQuestionDlgButton.setLayoutData( createButtonGridData() );
showMessageQuestionDlgButton.setText( "Question Dialog" );
showMessageQuestionDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageDialogQuestion();
}
} );
}
private void createConfirmMessageDialogButton( Composite parent ) {
Button showMessageConfirmDlgButton = new Button( parent, SWT.PUSH );
showMessageConfirmDlgButton.setLayoutData( createButtonGridData() );
showMessageConfirmDlgButton.setText( "Confirm Message" );
showMessageConfirmDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showMessageDialogConfirm();
}
} );
}
/////////
// Custom
private void createCustomDialogs( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setText( "Login Dialog" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
showLoginDialog();
}
} );
button.setLayoutData( createButtonGridData() );
}
private void showInputDialog() {
final IInputValidator val = new IInputValidator() {
public String isValid( String newText ) {
String result = null;
if( newText.length() < 5 ) {
result = "Input text too short!";
}
return result;
}
};
String title = "Input Dialog";
String mesg = "Enter at least five characters";
String def = "default text";
final InputDialog dialog = new InputDialog( getShell(), title, mesg, def, val ) {
@Override
public boolean close() {
boolean result = super.close();
int returnCode = getReturnCode();
String resultText = "Result: " + getReturnCodeText( returnCode );
if( returnCode == Window.OK ) {
resultText += ", value: " + getValue();
}
showResult( resultText );
return result;
}
};
dialog.setBlockOnOpen( false );
dialog.open();
}
private void showProgressDialog() {
ProgressMonitorDialog dialog = new ProgressMonitorDialog( getShell() ) {
@Override
public boolean close() {
return super.close();
}
};
dialog.setBlockOnOpen( false );
try {
dialog.run( true, true, new IRunnableWithProgress() {
public void run( IProgressMonitor monitor )
throws InvocationTargetException, InterruptedException
{
monitor.beginTask( "Counting to 12...", 12 );
for( int i = 1; !monitor.isCanceled() && i <= 12; i++ ) {
monitor.worked( 1 );
Thread.sleep( 300 );
}
monitor.done();
}
} );
} catch( Exception e ) {
MessageDialogUtil.openError( getShell(), "Error", e.getMessage(), null );
}
}
private void showMessageDialogInfo() {
String title = "Information";
String message = "This is a RAP MessageDialog.";
DialogCallback callback = new DialogCallback() {
public void dialogClosed( int returnCode ) {
showResult( "Result: none" );
}
};
MessageDialogUtil.openInformation( getShell(), title, message, callback );
}
private void showMessageDialogError() {
String title = "Error";
String message = "A weird error occured.\n " + "Please reboot.";
DialogCallback callback = new DialogCallback() {
public void dialogClosed( int returnCode ) {
showResult( "Result: none" );
}
};
MessageDialogUtil.openError( getShell(), title, message, callback );
}
private void showMessageDialogQuestion() {
String title = "Question";
String message = "Would you like to see the demo?\n\n"
+ "You can have multiple lines of text here. "
+ "Note that pressing <Return> here selects the default button.";
DialogCallback callback = new DialogCallback() {
public void dialogClosed( int returnCode ) {
showResult( "Result: " + returnCode );
}
};
MessageDialogUtil.openQuestion( getShell(), title, message, callback );
}
private void showMessageDialogConfirm() {
String title = "Confirmation";
String message = "Nothing will be done. Ok?";
DialogCallback callback = new DialogCallback() {
public void dialogClosed( int returnCode ) {
showResult( "Result: " + returnCode );
}
};
MessageDialogUtil.openConfirm( getShell(), title, message, callback );
}
private void showMessageDialogWarning() {
String title = "Warning";
String message = "You have been warned.";
DialogCallback callback = new DialogCallback() {
public void dialogClosed( int returnCode ) {
showResult( "Result: " + returnCode );
}
};
MessageDialogUtil.openWarning( getShell(), title, message, callback );
}
private void showErrorDialog() {
MultiStatus status = createStatus();
String title = "Error";
String message = "An error occured while processing this command";
int displayMask = IStatus.OK | IStatus.INFO | IStatus.WARNING | IStatus.ERROR;
ErrorDialog errorDialog = new ErrorDialog( getShell(), title, message, status, displayMask ) {
@Override
public boolean close() {
boolean result = super.close();
int returnCode = getReturnCode();
showResult( "Result: " + getReturnCodeText( returnCode ) );
return result;
}
};
errorDialog.setBlockOnOpen( false );
errorDialog.open();
}
private static MultiStatus createStatus() {
String pluginId = "org.eclipse.rap.demo";
int code = 23;
String message = "Illegal array offset";
MultiStatus multiStatus = new MultiStatus( pluginId, code, message, new RuntimeException() );
Exception exception = new IndexOutOfBoundsException( "negative index: -1" );
multiStatus.add( new Status( IStatus.ERROR, pluginId, code, message, exception ) );
return multiStatus;
}
private void showLoginDialog() {
String message = "Please sign in with your username and password:";
final LoginDialog loginDialog = new LoginDialog( getShell(), "Login", message ) {
@Override
public boolean close() {
boolean result = super.close();
int returnCode = getReturnCode();
String resultText = "Result: " + getReturnCodeText( returnCode );
if( returnCode == Window.OK ) {
String pwInfo = getPassword() == null ? "n/a" : getPassword().length() + " chars";
resultText += ", user: " + getUsername() + ", password: " + pwInfo;
}
showResult( resultText );
return result;
}
};
loginDialog.setUsername( "john" );
loginDialog.setBlockOnOpen( false );
loginDialog.open();
}
private Shell getShell() {
return Display.getCurrent().getActiveShell();
}
private String getReturnCodeText( int code ) {
String result;
if( code == Window.OK ) {
result = "OK";
} else if( code == Window.CANCEL ) {
result = "CANCEL";
} else {
result = String.valueOf( code );
}
return result ;
}
private void showMessageBox() {
String title = "MessageBox Title";
String mesg = "Lorem ipsum dolor sit amet consectetuer adipiscing elit.";
MessageBox messageBox = new MessageBox( getShell(), SWT.YES | SWT.NO );
messageBox.setText( title );
messageBox.setMessage( mesg );
DialogUtil.open( messageBox, new DialogCallback() {
public void dialogClosed( int returnCode ) {
String strResult = "";
switch( returnCode ) {
case SWT.OK:
strResult = "SWT.OK";
break;
case SWT.YES:
strResult = "SWT.YES";
break;
case SWT.NO:
strResult = "SWT.NO";
break;
case SWT.CANCEL:
strResult = "SWT.CANCEL";
break;
case SWT.ABORT:
strResult = "SWT.ABORT";
break;
case SWT.RETRY:
strResult = "SWT.RETRY";
break;
case SWT.IGNORE:
strResult = "SWT.IGNORE";
break;
default:
strResult = "" + returnCode;
break;
}
showResult( "Result: " + strResult );
}
} );
}
private void showColorDialog() {
final ColorDialog dialog = new ColorDialog( getShell() );
DialogUtil.open( dialog, new DialogCallback() {
public void dialogClosed( int returnCode ) {
RGB result = dialog.getRGB();
showResult( "Result: " + result );
}
} );
}
protected void showFontDialog() {
final FontDialog dialog = new FontDialog( getShell(), SWT.SHELL_TRIM );
DialogUtil.open( dialog, new DialogCallback() {
public void dialogClosed( int returnCode ) {
FontData[] fontList = dialog.getFontList();
FontData fontData = null;
if( fontList != null ) {
fontData = fontList[ 0 ];
}
showResult( "Result: " + fontData + " / " + dialog.getRGB() );
}
} );
}
private void showResult( String resultText ) {
resultsLabel.setText( resultText );
resultsLabel.getParent().pack();
}
private static GridData createButtonGridData() {
return new GridData( 200, 28 );
}
}