X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/dialogfields/ComboDialogField.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/dialogfields/ComboDialogField.java new file mode 100644 index 0000000..6803557 --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/wizards/dialogfields/ComboDialogField.java @@ -0,0 +1,225 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.internal.ui.wizards.dialogfields; + +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; + +/** + * Dialog field containing a label and a combo control. + */ +public class ComboDialogField extends DialogField { + + private String fText; + private int fSelectionIndex; + private String[] fItems; + private Combo fComboControl; + private ModifyListener fModifyListener; + private int fFlags; + + public ComboDialogField(int flags) { + super(); + fText= ""; //$NON-NLS-1$ + fItems= new String[0]; + fFlags= flags; + fSelectionIndex= -1; + } + + // ------- layout helpers + + /* + * @see DialogField#doFillIntoGrid + */ + public Control[] doFillIntoGrid(Composite parent, int nColumns) { + assertEnoughColumns(nColumns); + + Label label= getLabelControl(parent); + label.setLayoutData(gridDataForLabel(1)); + Combo combo= getComboControl(parent); + combo.setLayoutData(gridDataForCombo(nColumns - 1)); + + return new Control[] { label, combo }; + } + + /* + * @see DialogField#getNumberOfControls + */ + public int getNumberOfControls() { + return 2; + } + + protected static GridData gridDataForCombo(int span) { + GridData gd= new GridData(); + gd.horizontalAlignment= GridData.FILL; + gd.grabExcessHorizontalSpace= false; + gd.horizontalSpan= span; + return gd; + } + + // ------- focus methods + + /* + * @see DialogField#setFocus + */ + public boolean setFocus() { + if (isOkToUse(fComboControl)) { + fComboControl.setFocus(); + } + return true; + } + + // ------- ui creation + + /** + * Creates or returns the created combo control. + * @param parent The parent composite or null when the widget has + * already been created. + */ + public Combo getComboControl(Composite parent) { + if (fComboControl == null) { + assertCompositeNotNull(parent); + fModifyListener= new ModifyListener() { + public void modifyText(ModifyEvent e) { + doModifyText(e); + } + }; + SelectionListener selectionListener= new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + doSelectionChanged(e); + } + + public void widgetDefaultSelected(SelectionEvent e) { }; + }; + + fComboControl= new Combo(parent, fFlags); + // moved up due to 1GEUNW2 + fComboControl.setItems(fItems); + if (fSelectionIndex != -1) { + fComboControl.select(fSelectionIndex); + } else { + fComboControl.setText(fText); + } + fComboControl.setFont(parent.getFont()); + fComboControl.addModifyListener(fModifyListener); + fComboControl.addSelectionListener(selectionListener); + fComboControl.setEnabled(isEnabled()); + } + return fComboControl; + } + + private void doModifyText(ModifyEvent e) { + if (isOkToUse(fComboControl)) { + fText= fComboControl.getText(); + fSelectionIndex= fComboControl.getSelectionIndex(); + } + dialogFieldChanged(); + } + + private void doSelectionChanged(SelectionEvent e) { + if (isOkToUse(fComboControl)) { + fItems= fComboControl.getItems(); + fText= fComboControl.getText(); + fSelectionIndex= fComboControl.getSelectionIndex(); + } + dialogFieldChanged(); + } + + // ------ enable / disable management + + /* + * @see DialogField#updateEnableState + */ + protected void updateEnableState() { + super.updateEnableState(); + if (isOkToUse(fComboControl)) { + fComboControl.setEnabled(isEnabled()); + } + } + + // ------ text access + + /** + * Gets the combo items. + */ + public String[] getItems() { + return fItems; + } + + /** + * Sets the combo items. Triggers a dialog-changed event. + */ + public void setItems(String[] items) { + fItems= items; + if (isOkToUse(fComboControl)) { + fComboControl.setItems(items); + } + dialogFieldChanged(); + } + + /** + * Gets the text. + */ + public String getText() { + return fText; + } + + /** + * Sets the text. Triggers a dialog-changed event. + */ + public void setText(String text) { + fText= text; + if (isOkToUse(fComboControl)) { + fComboControl.setText(text); + } else { + dialogFieldChanged(); + } + } + + /** + * Selects an item. + */ + public void selectItem(int index) { + if (isOkToUse(fComboControl)) { + fComboControl.select(index); + } else { + if (index >= 0 && index < fItems.length) { + fText= fItems[index]; + fSelectionIndex= index; + } + } + dialogFieldChanged(); + } + + public int getSelectionIndex() { + return fSelectionIndex; + } + + + /** + * Sets the text without triggering a dialog-changed event. + */ + public void setTextWithoutUpdate(String text) { + fText= text; + if (isOkToUse(fComboControl)) { + fComboControl.removeModifyListener(fModifyListener); + fComboControl.setText(text); + fComboControl.addModifyListener(fModifyListener); + } + } + +}