/******************************************************************************* * 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 ); } }