blob: 2064acb81f9ce6c39616abd0c9492a21a48146ab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.demo.controls;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
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.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ColorDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
public class DialogsTab extends ExampleTab {
private Label inputDlgResLabel;
private Label loginDlgResLabel;
private Label messageDlgResLabel;
private Label errorDlgResLabel;
private Label messageBoxDlgResLabel;
private Button okButton;
private Button cancelButton;
private Button yesButton;
private Button noButton;
private Button retryButton;
private Button abortButton;
private Button ignoreButton;
private Button iconErrorButton;
private Button iconInformationButton;
private Button iconQuestionButton;
private Button iconWarningButton;
private Button iconWorkingButton;
private Button noIconButton;
private Button showMessageBoxDlgButton;
private Button showColorDialogButton;
private Button showFontDialogButton;
protected boolean useDialogCallback;
public DialogsTab() {
super( "Dialogs" );
}
@Override
protected void createStyleControls( final Composite parent ) {
parent.setLayout( new GridLayout( 1, true ) );
createMessageBoxStyleControls( parent );
}
@Override
protected void createExampleControls( final Composite parent ) {
parent.setLayout( new GridLayout() );
Group group1 = new Group( parent, SWT.NONE );
group1.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
group1.setText( "JFace Dialogs" );
group1.setLayout( new GridLayout( 3, true ) );
// JFace input dialog
Button showInputDlgButton = new Button( group1, SWT.PUSH );
showInputDlgButton.setText( "Input Dialog" );
showInputDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showInputDialog();
}
} );
showInputDlgButton.setLayoutData( createGridDataFillBoth() );
Button showProgressDlgButton = new Button( group1, SWT.PUSH );
showProgressDlgButton.setText( "ProgressDialog" );
showProgressDlgButton.setLayoutData( createGridDataFillBoth() );
showProgressDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
showProgressDialog();
}
} );
insertSpaceLabels( group1, 1 );
inputDlgResLabel = new Label( group1, SWT.WRAP );
inputDlgResLabel.setText( "Result:" );
GridData gdInputDlgResLabel = new GridData();
gdInputDlgResLabel.horizontalSpan = 3;
inputDlgResLabel.setLayoutData( gdInputDlgResLabel );
Button showMessageInfoDlgButton = new Button( group1, SWT.PUSH );
showMessageInfoDlgButton.setLayoutData( createGridDataFillBoth() );
showMessageInfoDlgButton.setText( "Info Message" );
showMessageInfoDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageDialogInfo();
}
} );
Button showMessageWarningDlgButton = new Button( group1, SWT.PUSH );
showMessageWarningDlgButton.setLayoutData( createGridDataFillBoth() );
showMessageWarningDlgButton.setText( "Warning Dialog" );
showMessageWarningDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageDialogWarning();
}
} );
Button showMessageErrorDlgButton = new Button( group1, SWT.PUSH );
showMessageErrorDlgButton.setLayoutData( createGridDataFillBoth() );
showMessageErrorDlgButton.setText( "Error Message" );
showMessageErrorDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageDialogError();
}
} );
Button showMessageQuestionDlgButton = new Button( group1, SWT.PUSH );
showMessageQuestionDlgButton.setLayoutData( createGridDataFillBoth() );
showMessageQuestionDlgButton.setText( "Question Dialog" );
showMessageQuestionDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageDialogQuestion();
}
} );
Button showMessageConfirmDlgButton = new Button( group1, SWT.PUSH );
showMessageConfirmDlgButton.setLayoutData( createGridDataFillBoth() );
showMessageConfirmDlgButton.setText( "Confirm Message" );
showMessageConfirmDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageDialogConfirm();
}
} );
insertSpaceLabels( group1, 1 );
messageDlgResLabel = new Label( group1, SWT.WRAP );
messageDlgResLabel.setText( "Result:" );
insertSpaceLabels( group1, 2 );
Button showErrorDlgButton = new Button( group1, SWT.PUSH );
showErrorDlgButton.setLayoutData( createGridDataFillBoth() );
showErrorDlgButton.setText( "Error Dialog" );
showErrorDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showErrorDialog();
}
} );
insertSpaceLabels( group1, 2 );
errorDlgResLabel = new Label( group1, SWT.WRAP );
errorDlgResLabel.setText( "Result:" );
insertSpaceLabels( group1, 2 );
Group group2 = new Group( parent, SWT.NONE );
group2.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
group2.setText( "Custom Dialogs" );
group2.setLayout( new GridLayout( 3, true ) );
Button showLoginDlgButton = new Button( group2, SWT.PUSH );
showLoginDlgButton.setText( "Login Dialog" );
showLoginDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showLoginDialog();
}
} );
showLoginDlgButton.setLayoutData( createGridDataFillBoth() );
insertSpaceLabels( group2, 2 );
loginDlgResLabel = new Label( group2, SWT.WRAP );
loginDlgResLabel.setText( "Result:" );
Group swtDialogsGroup = new Group( parent, SWT.NONE );
swtDialogsGroup.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
swtDialogsGroup.setText( "SWT Dialogs" );
swtDialogsGroup.setLayout( new GridLayout( 3, true ) );
final Button cbUseDialogCallback = new Button( swtDialogsGroup, SWT.CHECK );
cbUseDialogCallback.setText( "Use DialogCallback" );
cbUseDialogCallback.setSelection( useDialogCallback );
cbUseDialogCallback.setLayoutData( new GridData( SWT.LEFT, SWT.CENTER, false, false, 3, 1 ) );
cbUseDialogCallback.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent event ) {
useDialogCallback = cbUseDialogCallback.getSelection();
}
} );
showMessageBoxDlgButton = new Button( swtDialogsGroup, SWT.PUSH );
showMessageBoxDlgButton.setText( "MessageBox Dialog" );
showMessageBoxDlgButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
showMessageBoxDialog();
}
} );
showMessageBoxDlgButton.setLayoutData( createGridDataFillBoth() );
showColorDialogButton = new Button( swtDialogsGroup, SWT.PUSH );
showColorDialogButton.setText( "ColorDialog" );
showColorDialogButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
showColorDialog();
}
});
showColorDialogButton.setLayoutData( createGridDataFillBoth() );
showFontDialogButton = new Button( swtDialogsGroup, SWT.PUSH );
showFontDialogButton.setText( "FontDialog" );
showFontDialogButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
showFontDialog();
}
});
showFontDialogButton.setLayoutData( createGridDataFillBoth() );
messageBoxDlgResLabel = new Label( swtDialogsGroup, SWT.WRAP );
messageBoxDlgResLabel.setText( "Result:" );
GridData gdMessageBoxDlgResLabel = new GridData();
gdMessageBoxDlgResLabel.horizontalSpan = 3;
messageBoxDlgResLabel.setLayoutData( gdMessageBoxDlgResLabel );
}
private GridData createGridDataFillBoth() {
return new GridData( GridData.FILL_BOTH );
}
private void insertSpaceLabels( final Group group, final int count ) {
for( int i = 0; i < count; i++ ) {
new Label( group, SWT.NONE );
}
}
private void showInputDialog() {
final IInputValidator val = new IInputValidator() {
public String isValid( final 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 dlg;
dlg = new InputDialog( getShell(), title, mesg, def, val );
int returnCode = dlg.open();
String resultText = "Result: " + getReturnCodeText( returnCode );
if( returnCode == Window.OK ) {
resultText += ", value: " + dlg.getValue();
}
inputDlgResLabel.setText( resultText );
inputDlgResLabel.pack();
}
private void showProgressDialog() {
ProgressMonitorDialog dialog = new ProgressMonitorDialog( getShell() );
try {
dialog.run( true, true, new IRunnableWithProgress() {
public void run( final IProgressMonitor monitor )
throws InvocationTargetException, InterruptedException
{
monitor.beginTask( "Counting from one to 20...", 20 );
for( int i = 1; !monitor.isCanceled() && i <= 20; i++ ) {
monitor.worked( 1 );
Thread.sleep( 1000 );
}
monitor.done();
}
} );
} catch( Exception e ) {
MessageDialog.openError( getShell(), "Error", e.getMessage() );
}
}
private void showMessageDialogInfo() {
String title = "Information";
String mesg = "RAP rocks!";
MessageDialog.openInformation( getShell(), title, mesg );
messageDlgResLabel.setText( "Result: none" );
messageDlgResLabel.pack();
}
private void showMessageDialogError() {
String title = "Error";
String mesg = "An everyday error occured.\n " + "Nothing to get worried.";
MessageDialog.openError( getShell(), title, mesg );
messageDlgResLabel.setText( "Result: none" );
messageDlgResLabel.pack();
}
private void showMessageDialogQuestion() {
String title = "Question";
String mesg = "Do you like the RAP technology?\n\n"
+ "Note that you can also press <Return> here. "
+ "The correct answer is automatically selected.";
boolean result = MessageDialog.openQuestion( getShell(), title, mesg );
messageDlgResLabel.setText( "Result: " + result );
messageDlgResLabel.pack();
}
private void showMessageDialogConfirm() {
String title = "Confirmation";
String mesg = "Nothing will be done. Ok?";
boolean result = MessageDialog.openConfirm( getShell(), title, mesg );
messageDlgResLabel.setText( "Result: " + result );
messageDlgResLabel.pack();
}
private void showMessageDialogWarning() {
String title = "Warning";
String mesg = "You have been warned.";
MessageDialog.openWarning( getShell(), title, mesg );
messageDlgResLabel.setText( "Result: none" );
messageDlgResLabel.pack();
}
private void showErrorDialog() {
String title = "Error";
int code = 23;
String mesg = "An absolutetly weird error occured";
String reason = "Don't know, it just happened ...";
Exception exception = new IndexOutOfBoundsException( "negative index: -1" );
exception = new RuntimeException( exception );
IStatus status = new Status( IStatus.ERROR,
"org.eclipse.rap.demo",
code,
reason,
exception );
int returnCode = ErrorDialog.openError( getShell(), title, mesg, status );
errorDlgResLabel.setText( "Result: " + getReturnCodeText( returnCode ) );
errorDlgResLabel.pack();
}
private void showLoginDialog() {
String message = "Please sign in with your username and password:";
final LoginDialog loginDialog
= new LoginDialog( getShell(), "Login", message );
loginDialog.setUsername( "john" );
int returnCode = loginDialog.open();
String resultText = "Result: " + getReturnCodeText( returnCode );
if( returnCode == Window.OK ) {
String username = loginDialog.getUsername();
String password = loginDialog.getPassword();
String pwInfo = password == null ? "n/a" : password.length() + " chars";
resultText += ", user: " + username + ", password: " + pwInfo;
}
loginDlgResLabel.setText( resultText );
loginDlgResLabel.pack();
}
private String getReturnCodeText( final 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 showMessageBoxDialog() {
int style = getStyle();
if( okButton.getEnabled() && okButton.getSelection() ) {
style |= SWT.OK;
}
if( cancelButton.getEnabled() && cancelButton.getSelection() ) {
style |= SWT.CANCEL;
}
if( yesButton.getEnabled() && yesButton.getSelection() ) {
style |= SWT.YES;
}
if( noButton.getEnabled() && noButton.getSelection() ) {
style |= SWT.NO;
}
if( retryButton.getEnabled() && retryButton.getSelection() ) {
style |= SWT.RETRY;
}
if( abortButton.getEnabled() && abortButton.getSelection() ) {
style |= SWT.ABORT;
}
if( ignoreButton.getEnabled() && ignoreButton.getSelection() ) {
style |= SWT.IGNORE;
}
if( iconErrorButton.getEnabled() && iconErrorButton.getSelection() ) {
style |= SWT.ICON_ERROR;
}
if( iconInformationButton.getEnabled()
&& iconInformationButton.getSelection() ) {
style |= SWT.ICON_INFORMATION;
}
if( iconQuestionButton.getEnabled() && iconQuestionButton.getSelection() ) {
style |= SWT.ICON_QUESTION;
}
if( iconWarningButton.getEnabled() && iconWarningButton.getSelection() ) {
style |= SWT.ICON_WARNING;
}
if( iconWorkingButton.getEnabled() && iconWorkingButton.getSelection() ) {
style |= SWT.ICON_WORKING;
}
String title = "MessageBox Title";
String mesg = "Lorem ipsum dolor sit amet consectetuer adipiscing elit.";
MessageBox mb = new MessageBox( getShell(), style );
mb.setText( title );
mb.setMessage( mesg );
if( useDialogCallback ) {
DialogUtil.open( mb, new DialogCallback() {
public void dialogClosed( int returnCode ) {
String returnCodeText = returnCodeText( returnCode );
messageBoxDlgResLabel.setText( "Result: " + returnCodeText );
messageBoxDlgResLabel.pack();
}
} );
} else {
int result = mb.open();
String returnCodeText = returnCodeText( result );
messageBoxDlgResLabel.setText( "Result: " + returnCodeText );
messageBoxDlgResLabel.pack();
}
}
private void showColorDialog() {
final ColorDialog dialog = new ColorDialog( getShell() );
if( useDialogCallback ) {
DialogUtil.open( dialog, new DialogCallback() {
public void dialogClosed( int returnCode ) {
RGB result = dialog.getRGB();
messageBoxDlgResLabel.setText( "Result: " + result );
messageBoxDlgResLabel.pack();
}
} );
} else {
RGB result = dialog.open();
messageBoxDlgResLabel.setText( "Result: " + result );
messageBoxDlgResLabel.pack();
}
}
protected void showFontDialog() {
final FontDialog dialog = new FontDialog( getShell(), SWT.SHELL_TRIM );
if( useDialogCallback ) {
DialogUtil.open( dialog, new DialogCallback() {
public void dialogClosed( int returnCode ) {
FontData fontData = returnCode == SWT.OK ? dialog.getFontList()[ 0 ] : null;
RGB rgb = dialog.getRGB();
messageBoxDlgResLabel.setText( "Result: " + fontData+ " / " + rgb );
messageBoxDlgResLabel.pack();
}
} );
} else {
FontData result = dialog.open();
messageBoxDlgResLabel.setText( "Result: " + result + " / " + dialog.getRGB() );
messageBoxDlgResLabel.pack();
}
}
private void createMessageBoxStyleControls( final Composite parent ) {
createButtonStyleGroup( parent );
createIconStyleGroup( parent );
}
private void createButtonStyleGroup( final Composite parent ) {
Group group = new Group( parent, SWT.NONE );
group.setLayout( new GridLayout() );
GridData layoutData = new GridData( SWT.FILL, SWT.FILL, false, false );
group.setLayoutData( layoutData );
group.setText( "SWT MessageBox Styles" );
okButton = new Button( group, SWT.CHECK );
okButton.setText( "SWT.OK" );
cancelButton = new Button( group, SWT.CHECK );
cancelButton.setText( "SWT.CANCEL" );
yesButton = new Button( group, SWT.CHECK );
yesButton.setText( "SWT.YES" );
noButton = new Button( group, SWT.CHECK );
noButton.setText( "SWT.NO" );
retryButton = new Button( group, SWT.CHECK );
retryButton.setText( "SWT.RETRY" );
abortButton = new Button( group, SWT.CHECK );
abortButton.setText( "SWT.ABORT" );
ignoreButton = new Button( group, SWT.CHECK );
ignoreButton.setText( "SWT.IGNORE" );
}
private void createIconStyleGroup( final Composite parent ) {
Group group = new Group( parent, SWT.NONE );
group.setLayout( new GridLayout() );
GridData iconGroupData = new GridData( SWT.FILL, SWT.FILL, false, false );
group.setLayoutData( iconGroupData );
group.setText( "SWT MessageBox Icon Styles" );
iconErrorButton = new Button( group, SWT.RADIO );
iconErrorButton.setText( "SWT.ICON_ERROR" );
iconInformationButton = new Button( group, SWT.RADIO );
iconInformationButton.setText( "SWT.ICON_INFORMATION" );
iconQuestionButton = new Button( group, SWT.RADIO );
iconQuestionButton.setText( "SWT.ICON_QUESTION" );
iconWarningButton = new Button( group, SWT.RADIO );
iconWarningButton.setText( "SWT.ICON_WARNING" );
iconWorkingButton = new Button( group, SWT.RADIO );
iconWorkingButton.setText( "SWT.ICON_WORKING" );
noIconButton = new Button( group, SWT.RADIO );
noIconButton.setText( "No Icon" );
noIconButton.setSelection( true );
}
private static String returnCodeText( int result ) {
String strResult = "";
switch( result ) {
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 = "" + result;
break;
}
return strResult;
}
}