--- /dev/null
+/*
+ * $Id: SomeItemInputDialog.java,v 1.3 2006-10-21 23:18:43 pombredanne Exp $
+ * Copyright Narushima Hironori. All rights reserved.
+ */
+package net.sourceforge.phpeclipse.wizards.html;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Point;
+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.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ *
+ */
+public class SomeItemInputDialog extends Dialog {
+
+ String dialogTitle;
+
+ String[] inputMessages;
+
+ IInputValidator[] validators;
+
+ Text[] texts;
+
+ Text error;
+
+ String[] errorMsgs;
+
+ String[] resultValues;
+
+ public SomeItemInputDialog(Shell parentShell, String dialogTitle,
+ String[] inputMessages, IInputValidator[] validators) {
+ super(parentShell);
+ if (inputMessages.length != validators.length) {
+ throw new IllegalArgumentException(
+ "Specify validator counts and input message count is not same.");
+ }
+
+ this.dialogTitle = dialogTitle;
+ this.inputMessages = (String[]) inputMessages.clone();
+ this.validators = (IInputValidator[]) validators.clone();
+ this.errorMsgs = new String[validators.length];
+
+ setShellStyle(SWT.RESIZE | getShellStyle());
+ }
+
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText(dialogTitle);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite base = (Composite) super.createDialogArea(parent);
+ GridLayout gl = new GridLayout(2, false);
+ gl.marginWidth = 4;
+ gl.marginHeight = 6;
+ base.setLayout(gl);
+
+ texts = new Text[inputMessages.length];
+ for (int i = 0; i < inputMessages.length; i++) {
+ new Label(base, SWT.NONE).setText(inputMessages[i] + ":");
+
+ final int index = i;
+ Text t = new Text(base, SWT.BORDER);
+ t.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ t.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ refreshValidator(index);
+ }
+ });
+ texts[i] = t;
+ }
+
+ error = new Text(base, SWT.READ_ONLY);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = 2;
+ error.setLayoutData(gd);
+
+ return base;
+ }
+
+ void refreshValidator(int index) {
+ String data = texts[index].getText();
+ IInputValidator validator = validators[index];
+ if (validator != null) {
+ errorMsgs[index] = validator.isValid(data);
+ }
+
+ Button okButton = getButton(IDialogConstants.OK_ID);
+ for (int i = 0; i < errorMsgs.length; i++) {
+ String msg = errorMsgs[i];
+ if (msg != null) {
+ error.setText(msg);
+ okButton.setEnabled(false);
+ return;
+ }
+ }
+ error.setText("");
+ okButton.setEnabled(true);
+ }
+
+ public String[] getValues() {
+ return (String[]) resultValues.clone();
+ }
+
+ protected Point getInitialSize() {
+ Point p = super.getInitialSize();
+ return new Point(p.x * 2, (int) (p.y * 1.25));
+ }
+
+ protected void okPressed() {
+ resultValues = new String[texts.length];
+ for (int i = 0; i < texts.length; i++) {
+ resultValues[i] = texts[i].getText();
+ }
+ super.okPressed();
+ }
+
+}