Java tutorial
/****************************************************************************** * Copyright (c) 2006 g-Eclipse consortium * 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 * * Initial development of the original code was made for * project g-Eclipse founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributor(s): * PSNC - Katarzyna Bylec * *****************************************************************************/ package eu.geclipse.jsdl.ui.internal.dialogs; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.Path; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; 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; import eu.geclipse.jsdl.ui.internal.Activator; import eu.geclipse.ui.dialogs.GridFileDialog; import eu.geclipse.ui.widgets.StoredCombo; /** * This class is in fact adaptation of Eclipse's class * org.eclipse.debug.internal.ui.MultipleInputDialog for gEclipse. * Re-implementation was needed to avoid internal dependencies warnings. Some * methods were changed and some other added to suit gEclipse needs. */ public class MultipleInputDialog extends Dialog { protected static final String FIELD_NAME = "FIELD_NAME"; //$NON-NLS-1$ protected Composite panel; protected List<FieldSummary> fieldList = new ArrayList<FieldSummary>(); protected List<StoredCombo> storedComboList = new ArrayList<StoredCombo>(); protected List<Text> controlList = new ArrayList<Text>(); protected List<Validator> validators = new ArrayList<Validator>(); protected List<Combo> combosList = new ArrayList<Combo>(); protected Map<Object, String> valueMap = new HashMap<Object, String>(); protected Map<String, ArrayList<String>> combosData = new HashMap<String, ArrayList<String>>(); private String title; private Map<String, String> connectedFields = new HashMap<String, String>(); /** * Method to create new MultipleInputDialog * * @param shell shell for the dialog * @param title title of the dialog */ public MultipleInputDialog(final Shell shell, final String title) { super(shell); this.title = title; setShellStyle(getShellStyle() | SWT.RESIZE); } /* * (non-Javadoc) * * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ @Override protected void configureShell(final Shell shell) { super.configureShell(shell); if (this.title != null) { shell.setText(this.title); } } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#createButtonBar(org.eclipse.swt.widgets.Composite) */ @Override protected Control createButtonBar(final Composite parent) { Control bar = super.createButtonBar(parent); validateFields(); return bar; } /** * Method for adding new text field to dialog. This field is connected with * {@link GridFileDialog} * * @param labelText label for the filed * @param initialValue initial value to set field to * @param allowsEmpty parameter allowing this field to be empty or not * @param allowLocal true for field which will accept both - local and remote * location, false - only for remote */ public void addBrowseField(final String labelText, final String initialValue, final boolean allowsEmpty, final boolean allowLocal) { this.fieldList.add(new FieldSummary(FieldType.BROWSE, labelText, initialValue, allowsEmpty, allowLocal)); } // public void setConnectionFromBrowserToText( final String sourceFieldName, // final String targetFieldName ){ // source = null; // target = null; // for (Control control: this.controlList){ // if (control.getData(FIELD_NAME).equals( sourceFieldName )){ // source = ( Text )control; // } else { // if (control.getData(FIELD_NAME).equals( sourceFieldName )){ // target = ( Text )control; // } // } // } // if (target != null && source != null){ // // source.addFocusListener( new FocusListener(){ // // public void focusGained( FocusEvent e ) { // // do nothing // } // // public void focusLost( FocusEvent e ) { // if (source.getText() != null && source.getText().length() > 0){ // target.setText( source.getText() ); // } // } // // }); // } // } /** * Method for adding new combo field to this dialog * * @param labelText label to describe combo field * @param values values to put on the list of the combo field * @param initialValue one of the values from values list. Combo field will be * set to this value. If <code>null</code> - combo field is set * to point on the first value from the values set */ public void addComboField(final String labelText, final ArrayList<String> values, final String initialValue) { this.combosData.put(labelText, values); this.fieldList.add(new FieldSummary(FieldType.COMBO, labelText, initialValue, false)); } private boolean checkReadyToConnect(final String name, final int positionInDialog) { boolean result = false; if (this.connectedFields.containsKey(name)) { String connectionName = this.connectedFields.get(name); int connectionPosition = this.fieldList.size(); for (int i = 0; i < positionInDialog; i++) { if (this.fieldList.get(i).name.equals(connectionName)) { connectionPosition = i; } } if (connectionPosition < positionInDialog) { result = true; } } else { if (this.connectedFields.containsValue(name)) { String connectionName = ""; //$NON-NLS-1$ for (String connName : this.connectedFields.keySet()) { if (this.connectedFields.get(connName).equals(name)) { connectionName = connName; } } int connectionPosition = this.fieldList.size(); for (int i = 0; i < positionInDialog; i++) { if (this.fieldList.get(i).name.equals(connectionName)) { connectionPosition = i; } } if (connectionPosition < positionInDialog) { result = true; } } else { // do nothing } } return result; } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(final Composite parent) { Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new GridLayout(2, false)); container.setLayoutData(new GridData(GridData.FILL_BOTH)); this.panel = new Composite(container, SWT.NONE); GridLayout layout = new GridLayout(2, false); this.panel.setLayout(layout); this.panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); for (Iterator<FieldSummary> i = this.fieldList.iterator(); i.hasNext();) { FieldSummary field = i.next(); boolean connected = checkReadyToConnect(field.name, this.fieldList.indexOf(field)); switch (field.type) { case TEXT: createTextField(field.name, field.initialValue, field.allowsEmpty, connected); break; case STORED_COMBO: createStoredComboField(field.name, field.initialValue, field.allowsEmpty, connected, field.prefID); break; case BROWSE: createBrowseField(field.name, field.initialValue, field.allowsEmpty, connected, field.allowLocal); break; // case VARIABLE: // createVariablesField( field.name, // field.initialValue, // field.allowsEmpty ); // break; case COMBO: createComboField(field.name, field.initialValue, field.allowsEmpty); break; } } this.fieldList = null; // allow it to be gc'd Dialog.applyDialogFont(container); return container; } /** * Validates all dialog fields and makes OK button disabled or enabled */ public void validateFields() { for (Iterator<Validator> i = this.validators.iterator(); i.hasNext();) { Validator validator = i.next(); if (!validator.validate()) { getButton(IDialogConstants.OK_ID).setEnabled(false); return; } } getButton(IDialogConstants.OK_ID).setEnabled(true); } protected void createTextField(final String labelText, final String initialValue, final boolean allowEmpty, final boolean connected) { Label label = new Label(this.panel, SWT.NONE); label.setText(labelText); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); final Text text = new Text(this.panel, SWT.SINGLE | SWT.BORDER); text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); text.setData(FIELD_NAME, labelText); // make sure rows are the same height on both panels. label.setSize(label.getSize().x, text.getSize().y); if (initialValue != null) { text.setText(initialValue); } if (!allowEmpty) { this.validators.add(new Validator() { @Override public boolean validate() { return !text.getText().equals(""); //$NON-NLS-1$ } }); text.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { validateFields(); } }); } this.controlList.add(text); if (connected) { // mamy target, trzeba dodac listenera do source if (this.connectedFields.containsKey(labelText)) { String sourceName = this.connectedFields.get(labelText); Text sourceControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.controlList) { if (control.getData(FIELD_NAME).equals(sourceName)) { sourceControl = (Text) control; sourceIndex = this.controlList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { targetIndex = this.controlList.indexOf(control); } } } final int targetPosition = targetIndex; final int sourcePosition = sourceIndex; if (sourceControl != null) { sourceControl.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent event) { // String value = ""; // Path p = new Path(controlList.get( sourcePosition ).getText()); // value = p.lastSegment(); // if (controlList.get( targetPosition ).getText() != null && // controlList.get( targetPosition ).getText().length() == 0 ){ // controlList.get( targetPosition ).setText( value ); // } } }); sourceControl.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent event) { // do nothing } public void focusLost(final FocusEvent event) { String value = ""; //$NON-NLS-1$ Path p = new Path(MultipleInputDialog.this.controlList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.controlList.get(targetPosition).getText() != null && MultipleInputDialog.this.controlList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.controlList.get(targetPosition).setText(value); } } }); } } else { // mamy source, do niego dodac listenera, znalezc target // szukanie targetu String targetName = null; for (String name : this.connectedFields.keySet()) { if (this.connectedFields.get(name).equals(labelText)) { targetName = name; } } Text targetControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.controlList) { if (control.getData(FIELD_NAME).equals(targetName)) { targetControl = (Text) control; targetIndex = this.controlList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { sourceIndex = this.controlList.indexOf(control); } } } final int sourcePosition = sourceIndex; final int targetPosition = targetIndex; text.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent event) { // controlList.get( targetPosition ).setText( controlList.get( // sourcePosition ).getText() ); } }); text.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent event) { // do nothing } public void focusLost(final FocusEvent event) { String value = ""; //$NON-NLS-1$ Path p = new Path(MultipleInputDialog.this.controlList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.controlList.get(targetPosition).getText() != null && MultipleInputDialog.this.controlList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.controlList.get(targetPosition).setText(value); } } }); } } } protected void createStoredComboField(final String labelText, final String initialValue, final boolean allowEmpty, final boolean connected, final String prefID) { IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); Label label = new Label(this.panel, SWT.NONE); label.setText(labelText); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); final StoredCombo storedCombo = new StoredCombo(this.panel, SWT.SINGLE | SWT.BORDER); storedCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); storedCombo.setPreferences(prefs, prefID); storedCombo.setData(FIELD_NAME, labelText); // make sure rows are the same height on both panels. label.setSize(label.getSize().x, storedCombo.getSize().y); if (initialValue != null) { storedCombo.setText(initialValue); } if (!allowEmpty) { this.validators.add(new Validator() { @Override public boolean validate() { return !storedCombo.getText().equals(""); //$NON-NLS-1$ } }); storedCombo.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { validateFields(); } }); } this.storedComboList.add(storedCombo); if (connected) { if (this.connectedFields.containsKey(labelText)) { String sourceName = this.connectedFields.get(labelText); Text sourceControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.storedComboList) { if (control.getData(FIELD_NAME).equals(sourceName)) { sourceControl = (Text) control; sourceIndex = this.storedComboList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { targetIndex = this.storedComboList.indexOf(control); } } } final int targetPosition = targetIndex; final int sourcePosition = sourceIndex; sourceControl.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent event) { // String value = ""; // Path p = new Path(controlList.get( sourcePosition ).getText()); // value = p.lastSegment(); // if (controlList.get( targetPosition ).getText() != null && // controlList.get( targetPosition ).getText().length() == 0 ){ // controlList.get( targetPosition ).setText( value ); // } } }); sourceControl.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent event) { // do nothing } public void focusLost(final FocusEvent event) { String value = ""; //$NON-NLS-1$ Path p = new Path(MultipleInputDialog.this.storedComboList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.storedComboList.get(targetPosition).getText() != null && MultipleInputDialog.this.storedComboList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.storedComboList.get(targetPosition).setText(value); } } }); } else { String targetName = null; for (String name : this.connectedFields.keySet()) { if (this.connectedFields.get(name).equals(labelText)) { targetName = name; } } Text targetControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.storedComboList) { if (control.getData(FIELD_NAME).equals(targetName)) { targetControl = (Text) control; targetIndex = this.storedComboList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { sourceIndex = this.storedComboList.indexOf(control); } } } final int sourcePosition = sourceIndex; final int targetPosition = targetIndex; storedCombo.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent event) { // controlList.get( targetPosition ).setText( controlList.get( // sourcePosition ).getText() ); } }); storedCombo.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent event) { // do nothing } public void focusLost(final FocusEvent event) { String value = ""; //$NON-NLS-1$ Path p = new Path(MultipleInputDialog.this.storedComboList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.storedComboList.get(targetPosition).getText() != null && MultipleInputDialog.this.storedComboList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.storedComboList.get(targetPosition).setText(value); } } }); } } } public void setConnectedFields(final String sourceFieldName, final String targetFieldName) { this.connectedFields.put(targetFieldName, sourceFieldName); } protected void createBrowseField(final String labelText, final String initialValue, final boolean allowEmpty, final boolean connected, final boolean allowLocal) { Label label = new Label(this.panel, SWT.NONE); label.setText(labelText); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Composite comp = new Composite(this.panel, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; comp.setLayout(layout); comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final Text text = new Text(comp, SWT.SINGLE | SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 200; text.setLayoutData(data); text.setData(FIELD_NAME, labelText); // make sure rows are the same height on both panels. label.setSize(label.getSize().x, text.getSize().y); if (initialValue != null) { text.setText(initialValue); } if (!allowEmpty) { this.validators.add(new Validator() { @Override public boolean validate() { return !text.getText().equals(""); //$NON-NLS-1$ } }); text.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { validateFields(); } }); } Button button = createButton(comp, IDialogConstants.IGNORE_ID, Messages.getString("MultilpeInputDialog.browse_button"), //$NON-NLS-1$ false); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { { GridFileDialog dialog = new GridFileDialog(getShell(), GridFileDialog.STYLE_NONE); if (dialog.open() == Window.OK) { URI[] uris = dialog.getSelectedURIs(); if ((uris != null) && (uris.length > 0)) { text.setText(uris[0].toString()); } else { text.setText(""); //$NON-NLS-1$ } } // // IGridConnectionElement connection = GridFileDialog.openFileDialog( // getShell(), // "Choose a file", // null, // allowLocal ); // if( connection != null ) { // try { // String filename = connection.getConnectionFileStore().toString(); // if( connection.getConnectionFileStore() // .getFileSystem() // .getScheme() // .equalsIgnoreCase( "file" ) ) // { // filename = "file://" + filename; // } // if( filename != null ) { // text.setText( filename ); // } // } catch( CoreException cExc ) { // ProblemException exception = new ProblemException( // ICoreProblems.NET_CONNECTION_FAILED, // cExc, // Activator.PLUGIN_ID ); // ProblemDialog.openProblem( getShell(), // "error", // "error", // exception ); // } // } } } }); this.controlList.add(text); if (connected) { // mamy target, trzeba dodac listenera do source if (this.connectedFields.containsKey(labelText)) { String sourceName = this.connectedFields.get(labelText); Text sourceControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.controlList) { if (control.getData(FIELD_NAME).equals(sourceName)) { sourceControl = (Text) control; sourceIndex = this.controlList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { targetIndex = this.controlList.indexOf(control); } } } final int targetPosition = targetIndex; final int sourcePosition = sourceIndex; if (sourceControl != null) { sourceControl.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { // controlList.get( targetPosition ).setText( controlList.get( // sourcePosition ).getText() ); } }); sourceControl.addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) { // do nothing } public void focusLost(FocusEvent e) { String value = ""; Path p = new Path(MultipleInputDialog.this.controlList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.controlList.get(targetPosition).getText() != null && MultipleInputDialog.this.controlList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.controlList.get(targetPosition).setText(value); } } }); } } else { // mamy source, do niego dodac listenera, znalezc target // szukanie targetu String targetName = null; for (String name : this.connectedFields.keySet()) { if (this.connectedFields.get(name).equals(labelText)) { targetName = name; } } // Text targetControl = null; int sourceIndex = -1; int targetIndex = -1; for (Control control : this.controlList) { if (control.getData(FIELD_NAME).equals(targetName)) { // targetControl = ( Text )control; targetIndex = this.controlList.indexOf(control); } else { if (control.getData(FIELD_NAME).equals(labelText)) { sourceIndex = this.controlList.indexOf(control); } } } final int sourcePosition = sourceIndex; final int targetPosition = targetIndex; text.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { // controlList.get( targetPosition ).setText( controlList.get( // sourcePosition ).getText() ); } }); text.addFocusListener(new FocusListener() { public void focusGained(final FocusEvent e) { // do nothing } public void focusLost(final FocusEvent e) { String value = ""; Path p = new Path(MultipleInputDialog.this.controlList.get(sourcePosition).getText()); value = p.lastSegment(); if (MultipleInputDialog.this.controlList.get(targetPosition).getText() != null && MultipleInputDialog.this.controlList.get(targetPosition).getText() .length() == 0) { MultipleInputDialog.this.controlList.get(targetPosition).setText(value); } } }); } } } // TODO katis - is this method used?? /** * @param labelText * @param initialValue * @param allowEmpty */ public void createVariablesField(final String labelText, final String initialValue, final boolean allowEmpty) { Label label = new Label(this.panel, SWT.NONE); label.setText(labelText); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Composite comp = new Composite(this.panel, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; comp.setLayout(layout); comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final Text text = new Text(comp, SWT.SINGLE | SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 200; text.setLayoutData(data); text.setData(FIELD_NAME, labelText); // make sure rows are the same height on both panels. label.setSize(label.getSize().x, text.getSize().y); if (initialValue != null) { text.setText(initialValue); } if (!allowEmpty) { this.validators.add(new Validator() { @Override public boolean validate() { return !text.getText().equals(""); //$NON-NLS-1$ } }); text.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { validateFields(); } }); } this.controlList.add(text); } protected void createComboField(final String labelText, final String initialValue, final boolean allowEmpty) { Label label = new Label(this.panel, SWT.NONE); label.setText(labelText); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Composite comp = new Composite(this.panel, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; comp.setLayout(layout); comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); final Combo combo = new StoredCombo(comp, SWT.SINGLE | SWT.BORDER); for (String comboText : this.combosData.get(labelText)) { combo.add(comboText); } if (initialValue != null) { for (int i = 0; i < combo.getItemCount(); i++) { if (combo.getItem(i).equals(initialValue)) { combo.select(i); } } } else { combo.select(0); } GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 200; combo.setLayoutData(data); combo.setData(FIELD_NAME, labelText); // make sure rows are the same height on both panels. label.setSize(label.getSize().x, combo.getSize().y); if (initialValue != null) { combo.setText(initialValue); } if (!allowEmpty) { this.validators.add(new Validator() { @Override public boolean validate() { return !combo.getText().equals(""); //$NON-NLS-1$ } }); combo.addModifyListener(new ModifyListener() { public void modifyText(final ModifyEvent e) { validateFields(); } }); } this.combosList.add(combo); } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { for (Iterator<Text> i = this.controlList.iterator(); i.hasNext();) { Control control = i.next(); if (control instanceof Text) { this.valueMap.put(control.getData(FIELD_NAME), ((Text) control).getText()); } } for (Iterator<StoredCombo> i = this.storedComboList.iterator(); i.hasNext();) { Control control = i.next(); if (control instanceof StoredCombo) { this.valueMap.put(control.getData(FIELD_NAME), ((StoredCombo) control).getText()); } } for (Iterator<Combo> i = this.combosList.iterator(); i.hasNext();) { Control control = i.next(); if (control instanceof Combo) { this.valueMap.put(control.getData(FIELD_NAME), ((Combo) control).getText()); } } this.controlList = null; this.combosList = null; super.okPressed(); } /* * (non-Javadoc) * * @see org.eclipse.jface.window.Window#open() */ @Override public int open() { applyDialogFont(this.panel); return super.open(); } /** * Method to access value held by field with given name (key) * * @param key name of the field * @return value held by field of a given key */ public Object getValue(final String key) { return this.valueMap.get(key); } /** * Method to access String value held by field with given name (key) * * @param key name of the field * @return String value held by field of a given key */ public String getStringValue(final String key) { return (String) getValue(key); } private String getDialogSettingsSectionName() { return IDebugUIConstants.PLUGIN_ID + ".MULTIPLE_INPUT_DIALOG_2"; //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings() */ @Override protected IDialogSettings getDialogBoundsSettings() { IDialogSettings settings = Activator.getDefault().getDialogSettings(); IDialogSettings section = settings.getSection(getDialogSettingsSectionName()); if (section == null) { section = settings.addNewSection(getDialogSettingsSectionName()); } return section; } /** * Method to add text field ({@link Text}) to {@link MultipleInputDialog} * * @param labelText label to describe this field * @param initialValue initial value of this field * @param allowsEmpty indicates whether this field can be empty (if * <code>false</code> dialog cannot be closed until this field * holds some value) */ public void addTextField(final String labelText, final String initialValue, final boolean allowsEmpty) { this.fieldList.add(new FieldSummary(FieldType.TEXT, labelText, initialValue, allowsEmpty)); } /** * Method to add stored combo field ({@link StoredCombo}) to * {@link MultipleInputDialog} * * @param labelText label to describe this field * @param initialValue initial value of this field * @param allowsEmpty indicates whether this field can be empty (if * <code>false</code> dialog cannot be closed until this field * holds some value) */ public void addStoredComboField(final String labelText, final String initialValue, final boolean allowsEmpty, final String prefID) { this.fieldList.add(new FieldSummary(FieldType.STORED_COMBO, labelText, initialValue, allowsEmpty, prefID)); } // TODO katis - is this method used // public void addVariablesField( final String labelText, // final String initialValue, // final boolean allowsEmpty ) // { // this.fieldList.add( new FieldSummary( VARIABLE, // labelText, // initialValue, // allowsEmpty ) ); // } protected class FieldSummary { FieldType type; String name; String initialValue; boolean allowsEmpty; boolean allowLocal; final String prefID; /** * Creates new instance of {@link FieldSummary}. By default this field will * allow local filesystem values. This constructor should be used by all * field types except form {@link MultipleInputDialog#BROWSE}. * * @param type type of the field (see {@link MultipleInputDialog#BROWSE}, * {@link MultipleInputDialog#COMBO}, * {@link MultipleInputDialog#FIELD_NAME}, * {@link MultipleInputDialog#STORED_COMBO}, * {@link MultipleInputDialog#TEXT} and * {@link MultipleInputDialog#VARIABLE}) * @param name name of the field (used to access this field's value by * method {@link MultipleInputDialog#getValue(String)} or * {@link MultipleInputDialog#getStringValue(String)} * @param initialValue initial value to set this field to * @param allowsEmpty indicates whether this field can be empty (if * <code>false</code> dialog cannot be closed until this field * holds some value) */ public FieldSummary(final FieldType type, final String name, final String initialValue, final boolean allowsEmpty) { this(type, name, initialValue, allowsEmpty, true); } /** * Creates new instance of {@link FieldSummary} * * @param type type of the field (see {@link MultipleInputDialog#BROWSE}, * {@link MultipleInputDialog#COMBO}, * {@link MultipleInputDialog#FIELD_NAME}, * {@link MultipleInputDialog#STORED_COMBO}, * {@link MultipleInputDialog#TEXT} and * {@link MultipleInputDialog#VARIABLE}) * @param name name of the field (used to access this field's value by * method {@link MultipleInputDialog#getValue(String)} or * {@link MultipleInputDialog#getStringValue(String)} * @param initialValue initial value to set this field to * @param allowsEmpty indicates whether this field can be empty (if * <code>false</code> dialog cannot be closed until this field * holds some value) * @param allowLocal if <code>false</code> this field will accept only * remote filesystems values, all values otherwise. For now this * setting works only for {@link MultipleInputDialog#BROWSE} * field. */ public FieldSummary(final FieldType type, final String name, final String initialValue, final boolean allowsEmpty, final boolean allowLocal) { this.type = type; this.name = name; this.initialValue = initialValue; this.allowsEmpty = allowsEmpty; this.allowLocal = allowLocal; this.prefID = ""; //$NON-NLS-1$ } /** * @param type * @param name * @param initialValue * @param allowsEmpty * @param prefID */ public FieldSummary(final FieldType type, final String name, final String initialValue, final boolean allowsEmpty, final String prefID) { this.type = type; this.name = name; this.initialValue = initialValue; this.allowsEmpty = allowsEmpty; this.prefID = prefID; } } protected class Validator { boolean validate() { return true; } } enum FieldType { TEXT, BROWSE, COMBO, STORED_COMBO } }