RSE Dialog Sample
This is an example of a sample
dialog written on top of the RSE base dialog class, and with
typical full error checking.
package org.eclipse.rse.samples.ui.frameworks.dialogs;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.rse.samples.*;
import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.rse.ui.*;
import org.eclipse.rse.ui.widgets.*;
import org.eclipse.rse.ui.messages.*;
import org.eclipse.rse.ui.validators.*;
/**
* A simple example of using the SystemPromptDialog class as the basis for a new dialog.
*/
public class SampleDialog extends SystemPromptDialog
{
// gui widgets
private SystemHistoryCombo namePrompt;
private Text yearPrompt, monthPrompt, dayPrompt;
// input
private SampleCustomer inpCust;
// validators
private ISystemValidator nameValidator, yearValidator, monthValidator, dayValidator;
// message
private SystemMessage errorMessage;
/**
* Constructor for SampleDialog.
*/
public SampleDialog(Shell shell)
{
super(shell, SamplesPlugin.getString("org.eclipse.rse.samples.ui.dialogs.dialog1.title"));
setHelp(SamplesPlugin.HELPPREFIX + "dlg11000");
nameValidator = new
SampleNameValidator();
yearValidator = new
SampleBirthYearValidator();
monthValidator = new
SampleBirthMonthValidator();
dayValidator = new
SampleBirthDayValidator();
}
/**
* Required parent override.
* This is where we populate the client area
*/
protected Control createInner(Composite parent)
{
int nbrColumns = 2;
Composite parentComposite = SystemWidgetHelpers.createComposite(parent, nbrColumns);
// add gui widgets...
SystemWidgetHelpers.createLabel(parentComposite, SamplesPlugin.getResourceBundle(), "org.eclipse.rse.samples.ui.dialogs.dialog1.name.");
boolean readonly = false;
namePrompt = SystemWidgetHelpers.createHistoryCombo(parentComposite, null, "name.history.key", readonly,
SamplesPlugin.getResourceBundle(), "org.eclipse.rse.samples.ui.dialogs.dialog1.name.tooltip");
addSeparatorLine(parentComposite, nbrColumns);
boolean wantBorder = false;
SystemWidgetHelpers.createLabel(parentComposite, SamplesPlugin.getResourceBundle(),
"org.eclipse.rse.samples.ui.dialogs.dialog1.birthday.verbiage.", nbrColumns, wantBorder);
yearPrompt = SystemWidgetHelpers.createLabeledTextField(parentComposite, null,
SamplesPlugin.getResourceBundle(), "org.eclipse.rse.samples.ui.dialogs.dialog1.birthday.year.");
monthPrompt = SystemWidgetHelpers.createLabeledTextField(parentComposite, null,
SamplesPlugin.getResourceBundle(), "org.eclipse.rse.samples.ui.dialogs.dialog1.birthday.month.");
dayPrompt = SystemWidgetHelpers.createLabeledTextField(parentComposite, null,
SamplesPlugin.getResourceBundle(), "org.eclipse.rse.samples.ui.dialogs.dialog1.birthday.day.");
// if given an existing object, prefill it...
inpCust = (SampleCustomer)getInputObject();
if (inpCust != null)
{
namePrompt.setText(inpCust.getName());
yearPrompt.setText(inpCust.getYear());
monthPrompt.setText(inpCust.getMonth());
dayPrompt.setText(inpCust.getDay());
}
// add modify listeners...
namePrompt.addModifyListener( new ModifyListener()
{
public void modifyText(ModifyEvent event)
{
if (validateName())
validate(namePrompt.getCombo());
}
} );
yearPrompt.addModifyListener( new ModifyListener()
{
public void modifyText(ModifyEvent event)
{
if (validateYear())
validate(yearPrompt);
}
} );
monthPrompt.addModifyListener( new ModifyListener()
{
public void modifyText(ModifyEvent event)
{
if (validateMonth())
validate(monthPrompt);
}
} );
dayPrompt.addModifyListener( new ModifyListener()
{
public void modifyText(ModifyEvent event)
{
if (validateDay())
validate(monthPrompt);
}
} );
// initialize enabled state...
setPageComplete(isPageComplete());
return parentComposite;
}
/**
* Required parent override.
* This is where we return the first input control, to give it focus when the dialog appears.
*/
protected Control getInitialFocusControl()
{
return namePrompt.getCombo();
}
/**
* Typical parent override.
* This is where we get control when the user presses OK.
*/
protected boolean processOK()
{
errorMessage = null;
Control controlInError = validate(null);
if (controlInError != null)
controlInError.setFocus();
else
{
SampleCustomer newCust = inpCust;
if (newCust == null)
newCust = new SampleCustomer();
newCust.setName(namePrompt.getText().trim());
newCust.setYear(yearPrompt.getText().trim());
newCust.setMonth(monthPrompt.getText().trim());
newCust.setDay(dayPrompt.getText().trim());
setOutputObject(newCust);
SystemMessage completionMsg = null;
if (inpCust == null)
completionMsg = SamplesPlugin.getPluginMessage("SPPD1010");
else
completionMsg = SamplesPlugin.getPluginMessage("SPPD1011");
completionMsg.makeSubstitution(newCust.getName());
SystemMessageDialog msgDlg = new SystemMessageDialog(getShell(), completionMsg);
msgDlg.open();
}
return isPageComplete();
}
// ---------------------
// Validation methods...
// ---------------------
/**
* Do full validation of all entry fields, optionally skipping a given one.
* @return first control that is found to contain errors. Can be used to set focus.
*/
protected Control validate(Control controlToSkip)
{
Control controlInError = null;
if ((controlToSkip != namePrompt.getCombo()) && !validateName())
controlInError = namePrompt.getCombo();
if ((controlInError==null) && (controlToSkip != yearPrompt) && !validateYear())
controlInError = yearPrompt;
if ((controlInError==null) && (controlToSkip != monthPrompt) && !validateMonth())
controlInError = monthPrompt;
if ((controlInError==null) && (controlToSkip != dayPrompt) && !validateDay())
controlInError = dayPrompt;
return controlInError;
}
/**
* Validate the customer name prompt. We only ensure it is not-empty.
*/
protected boolean validateName()
{
String input = namePrompt.getText().trim();
setErrorMessageAndPageCompletionStatus(nameValidator.validate(input));
return (errorMessage==null);
}
/**
* Validate the customer birth year prompt.
*/
protected boolean validateYear()
{
String input = yearPrompt.getText().trim();
setErrorMessageAndPageCompletionStatus(yearValidator.validate(input));
return (errorMessage==null);
}
/**
* Validate the customer birth month prompt.
*/
protected boolean validateMonth()
{
String input = monthPrompt.getText().trim();
setErrorMessageAndPageCompletionStatus(monthValidator.validate(input));
return (errorMessage==null);
}
/**
* Validate the customer birth day prompt.
*/
protected boolean validateDay()
{
String input = dayPrompt.getText().trim();
setErrorMessageAndPageCompletionStatus(dayValidator.validate(input));
return (errorMessage==null);
}
/**
* A convenience method that issues or clears the error message on the message line,
* and sets the page completion status
*/
protected void setErrorMessageAndPageCompletionStatus(SystemMessage errorMessage)
{
this.errorMessage = errorMessage;
if (errorMessage == null)
clearErrorMessage();
else
setErrorMessage(errorMessage);
setPageComplete(isPageComplete());
}
/**
* Return true if the OK button can be enabled.
*/
protected boolean isPageComplete()
{
return ((errorMessage == null) &&
(namePrompt.getText().trim().length()>0) &&
(yearPrompt.getText().trim().length()>0) &&
(monthPrompt.getText().trim().length()>0) &&
(dayPrompt.getText().trim().length()>0));
}
}