/* * $Id: SomeItemInputDialog.java,v 1.1 2004-10-05 20:51:57 jsurfer Exp $ * Copyright Narushima Hironori. All rights reserved. */ package net.sourceforge.phpeclipse.wizards.html; import org.eclipse.jface.dialogs.*; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /** * */ 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(); } }