| |
| package $packageName$; |
| |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.FillLayout; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.splash.AbstractSplashHandler; |
| |
| /** |
| * @since 3.3 |
| * |
| */ |
| public class InteractiveSplashHandler extends AbstractSplashHandler { |
| |
| private final static int F_LABEL_HORIZONTAL_INDENT = 175; |
| |
| private final static int F_BUTTON_WIDTH_HINT = 80; |
| |
| private final static int F_TEXT_WIDTH_HINT = 175; |
| |
| private final static int F_COLUMN_COUNT = 3; |
| |
| private Composite fCompositeLogin; |
| |
| private Text fTextUsername; |
| |
| private Text fTextPassword; |
| |
| private Button fButtonOK; |
| |
| private Button fButtonCancel; |
| |
| private boolean fAuthenticated; |
| |
| /** |
| * |
| */ |
| public InteractiveSplashHandler() { |
| fCompositeLogin = null; |
| fTextUsername = null; |
| fTextPassword = null; |
| fButtonOK = null; |
| fButtonCancel = null; |
| fAuthenticated = false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.splash.AbstractSplashHandler#init(org.eclipse.swt.widgets.Shell) |
| */ |
| public void init(final Shell splash) { |
| // Store the shell |
| super.init(splash); |
| // Configure the shell layout |
| configureUISplash(); |
| // Create UI |
| createUI(); |
| // Create UI listeners |
| createUIListeners(); |
| // Force the splash screen to layout |
| splash.layout(true); |
| // Keep the splash screen visible and prevent the RCP application from |
| // loading until the close button is clicked. |
| doEventLoop(); |
| } |
| |
| /** |
| * |
| */ |
| private void doEventLoop() { |
| Shell splash = getSplash(); |
| while (fAuthenticated == false) { |
| if (splash.getDisplay().readAndDispatch() == false) { |
| splash.getDisplay().sleep(); |
| } |
| } |
| } |
| |
| /** |
| * |
| */ |
| private void createUIListeners() { |
| // Create the OK button listeners |
| createUIListenersButtonOK(); |
| // Create the cancel button listeners |
| createUIListenersButtonCancel(); |
| } |
| |
| /** |
| * |
| */ |
| private void createUIListenersButtonCancel() { |
| fButtonCancel.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| handleButtonCancelWidgetSelected(); |
| } |
| }); |
| } |
| |
| /** |
| * |
| */ |
| private void handleButtonCancelWidgetSelected() { |
| // Abort the loading of the RCP application |
| getSplash().getDisplay().close(); |
| System.exit(0); |
| } |
| |
| /** |
| * |
| */ |
| private void createUIListenersButtonOK() { |
| fButtonOK.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| handleButtonOKWidgetSelected(); |
| } |
| }); |
| } |
| |
| /** |
| * |
| */ |
| private void handleButtonOKWidgetSelected() { |
| String username = fTextUsername.getText(); |
| String password = fTextPassword.getText(); |
| // Aunthentication is successful if a user provides any username and |
| // any password |
| if ((username.length() > 0) && |
| (password.length() > 0)) { |
| fAuthenticated = true; |
| } else { |
| MessageDialog.openError( |
| getSplash(), |
| "Authentication Failed", //$NON-NLS-1$ |
| "A username and password must be specified to login."); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * |
| */ |
| private void createUI() { |
| // Create the login panel |
| createUICompositeLogin(); |
| // Create the blank spanner |
| createUICompositeBlank(); |
| // Create the user name label |
| createUILabelUserName(); |
| // Create the user name text widget |
| createUITextUserName(); |
| // Create the password label |
| createUILabelPassword(); |
| // Create the password text widget |
| createUITextPassword(); |
| // Create the blank label |
| createUILabelBlank(); |
| // Create the OK button |
| createUIButtonOK(); |
| // Create the cancel button |
| createUIButtonCancel(); |
| } |
| |
| /** |
| * |
| */ |
| private void createUIButtonCancel() { |
| // Create the button |
| fButtonCancel = new Button(fCompositeLogin, SWT.PUSH); |
| fButtonCancel.setText("Cancel"); //$NON-NLS-1$ |
| // Configure layout data |
| GridData data = new GridData(SWT.NONE, SWT.NONE, false, false); |
| data.widthHint = F_BUTTON_WIDTH_HINT; |
| data.verticalIndent = 10; |
| fButtonCancel.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUIButtonOK() { |
| // Create the button |
| fButtonOK = new Button(fCompositeLogin, SWT.PUSH); |
| fButtonOK.setText("OK"); //$NON-NLS-1$ |
| // Configure layout data |
| GridData data = new GridData(SWT.NONE, SWT.NONE, false, false); |
| data.widthHint = F_BUTTON_WIDTH_HINT; |
| data.verticalIndent = 10; |
| fButtonOK.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUILabelBlank() { |
| Label label = new Label(fCompositeLogin, SWT.NONE); |
| label.setVisible(false); |
| } |
| |
| /** |
| * |
| */ |
| private void createUITextPassword() { |
| // Create the text widget |
| int style = SWT.PASSWORD | SWT.BORDER; |
| fTextPassword = new Text(fCompositeLogin, style); |
| // Configure layout data |
| GridData data = new GridData(SWT.NONE, SWT.NONE, false, false); |
| data.widthHint = F_TEXT_WIDTH_HINT; |
| data.horizontalSpan = 2; |
| fTextPassword.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUILabelPassword() { |
| // Create the label |
| Label label = new Label(fCompositeLogin, SWT.NONE); |
| label.setText("&Password:"); //$NON-NLS-1$ |
| // Configure layout data |
| GridData data = new GridData(); |
| data.horizontalIndent = F_LABEL_HORIZONTAL_INDENT; |
| label.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUITextUserName() { |
| // Create the text widget |
| fTextUsername = new Text(fCompositeLogin, SWT.BORDER); |
| // Configure layout data |
| GridData data = new GridData(SWT.NONE, SWT.NONE, false, false); |
| data.widthHint = F_TEXT_WIDTH_HINT; |
| data.horizontalSpan = 2; |
| fTextUsername.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUILabelUserName() { |
| // Create the label |
| Label label = new Label(fCompositeLogin, SWT.NONE); |
| label.setText("&User Name:"); //$NON-NLS-1$ |
| // Configure layout data |
| GridData data = new GridData(); |
| data.horizontalIndent = F_LABEL_HORIZONTAL_INDENT; |
| label.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUICompositeBlank() { |
| Composite spanner = new Composite(fCompositeLogin, SWT.NONE); |
| GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); |
| data.horizontalSpan = F_COLUMN_COUNT; |
| spanner.setLayoutData(data); |
| } |
| |
| /** |
| * |
| */ |
| private void createUICompositeLogin() { |
| // Create the composite |
| fCompositeLogin = new Composite(getSplash(), SWT.BORDER); |
| GridLayout layout = new GridLayout(F_COLUMN_COUNT, false); |
| fCompositeLogin.setLayout(layout); |
| } |
| |
| /** |
| * |
| */ |
| private void configureUISplash() { |
| // Configure layout |
| FillLayout layout = new FillLayout(); |
| getSplash().setLayout(layout); |
| // Force shell to inherit the splash background |
| getSplash().setBackgroundMode(SWT.INHERIT_DEFAULT); |
| } |
| |
| } |