### Eclipse Workspace Patch 1.0 #P org.eclipse.jface Index: src/org/eclipse/jface/dialogs/IInputStatusValidator.java =================================================================== RCS file: src/org/eclipse/jface/dialogs/IInputStatusValidator.java diff -N src/org/eclipse/jface/dialogs/IInputStatusValidator.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/dialogs/IInputStatusValidator.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2009, 2009 Andrew Gvozdev 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: + * Andrew Gvozdev - initial API and implementation + *******************************************************************************/ +package org.eclipse.jface.dialogs; + + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +/** + * The IInputStatusValidator is the interface for IStatus validators. + */ +public interface IInputStatusValidator { + /** + * Validates the given string. Returns the status with an error/warning/info message to display if the new + * text fails validation. + * + * @param newText + * the text to check for validity + * + * @return {@link IStatus} object. For the purpose of validation severity and message are considered. + *
{@link Status#OK_STATUS} or any {@link IStatus#OK} to indicate no error. + * {@link IStatus#ERROR} indicates an error. + * {@link IStatus#WARNING} indicates a warning. + * {@link IStatus#INFO} indicates an informational message. + */ + public IStatus isValid(String newText); +} Index: src/org/eclipse/jface/dialogs/InputStatusDialog.java =================================================================== RCS file: src/org/eclipse/jface/dialogs/InputStatusDialog.java diff -N src/org/eclipse/jface/dialogs/InputStatusDialog.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/jface/dialogs/InputStatusDialog.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,209 @@ +/******************************************************************************* + * Copyright (c) 2009, 2009 Andrew Gvozdev 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: + * Andrew Gvozdev - initial API and implementation combining StatusDialog and InputDialog + *******************************************************************************/ +package org.eclipse.jface.dialogs; + + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +/** + * An input dialog for soliciting an input string from the user. + * The string can be validated. In case of problem error/warning/info message + * is shown in status line and decorated with appropriate status icon. + *+ * This concrete dialog class can be instantiated as is, or further subclassed as required. + *
+ */ +public class InputStatusDialog extends StatusDialog { + /** + * The title of the dialog. + */ + private String title; + + /** + * The message to display, ornull
if none.
+ */
+ private String message;
+
+ /**
+ * The input value; the empty string by default.
+ */
+ private String value = "";//$NON-NLS-1$
+
+ /**
+ * The input validator, or null
if none.
+ */
+ private IInputStatusValidator validator;
+
+ /**
+ * Input text widget.
+ */
+ private Text text;
+
+ /**
+ * Creates an input dialog with OK and Cancel buttons. Note that the dialog
+ * will have no visual representation (no widgets) until it is told to open.
+ *
+ * Note that the open
method blocks for input dialogs.
+ *
null
to create a top-level
+ * shell
+ * @param dialogTitle
+ * the dialog title, or null
if none
+ * @param dialogMessage
+ * the dialog message, or null
if none
+ * @param initialValue
+ * the initial input value, or null
if none
+ * (equivalent to the empty string)
+ * @param validator
+ * an input validator, or null
if none
+ * For a validator, following return statuses are recognized:
+ * {@link Status#OK_STATUS} or any {@link IStatus#OK} to indicate no error.
+ * {@link IStatus#ERROR} indicates an error.
+ * {@link IStatus#WARNING} indicates a warning.
+ * {@link IStatus#INFO} indicates an informational message
+ */
+ public InputStatusDialog(Shell parentShell, String dialogTitle, String dialogMessage,
+ String initialValue, IInputStatusValidator validator) {
+ super(parentShell);
+ this.title = dialogTitle;
+ if (dialogMessage == null) {
+ this.message = ""; //$NON-NLS-1$
+ } else {
+ this.message = dialogMessage;
+ }
+ if (initialValue == null) {
+ this.value = ""; //$NON-NLS-1$
+ } else {
+ this.value = initialValue;
+ }
+ this.validator = validator;
+ }
+
+ /*
+ * (non-Javadoc) Method declared on Dialog.
+ */
+ protected void buttonPressed(int buttonId) {
+ if (buttonId == IDialogConstants.OK_ID) {
+ value = text.getText();
+ } else {
+ value = null;
+ }
+ super.buttonPressed(buttonId);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ if (title != null) {
+ shell.setText(title);
+ }
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite) super.createDialogArea(parent);
+
+ Label label = new Label(composite, SWT.WRAP);
+ label.setText(message);
+ GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL
+ | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
+ data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
+ label.setLayoutData(data);
+ label.setFont(parent.getFont());
+
+ text = new Text(composite, getInputTextStyle());
+ text.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+ text.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validateInput();
+ }
+ });
+ text.setFocus();
+ if (value != null) {
+ text.setText(value);
+ text.selectAll();
+ }
+
+ applyDialogFont(composite);
+
+ return composite;
+ }
+
+ /**
+ * Returns the text area.
+ *
+ * @return the text area
+ */
+ protected Text getText() {
+ return text;
+ }
+
+ /**
+ * Returns the validator.
+ *
+ * @return the validator
+ */
+ protected IInputStatusValidator getValidator() {
+ return validator;
+ }
+
+ /**
+ * Returns the string typed into this input dialog.
+ *
+ * @return the input string
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * Validates the input.
+ * + * The default implementation of this framework method delegates the request to the supplied input + * validator object; if it finds the input invalid, the error message is displayed in the dialog's message + * line. This hook method is called whenever the text changes in the input field. + *
+ */ + protected void validateInput() { + IStatus status = Status.OK_STATUS; + if (validator != null) { + status = validator.isValid(text.getText()); + } + updateStatus(status); + } + + /** + * Returns the style bits that should be used for the input text field. Defaults to a single line entry. + * Subclasses may override. + * + * @return the integer style bits that should be used when creating the input text + * + */ + protected int getInputTextStyle() { + return SWT.SINGLE | SWT.BORDER; + } + +}