001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.ui.templates;
011:
012: import org.eclipse.swt.SWT;
013: import org.eclipse.swt.events.ModifyEvent;
014: import org.eclipse.swt.events.ModifyListener;
015: import org.eclipse.swt.layout.GridData;
016: import org.eclipse.swt.widgets.Composite;
017: import org.eclipse.swt.widgets.Label;
018: import org.eclipse.swt.widgets.Text;
019:
020: /**
021: * This template option can be used to collect string option from the user in
022: * the template section wizard page.
023: *
024: * @since 2.0
025: */
026: public class StringOption extends TemplateOption {
027: private Text text;
028: private Label labelControl;
029: private boolean ignoreListener;
030: private int fStyle;
031:
032: private final static int F_DEFAULT_STYLE = SWT.SINGLE | SWT.BORDER;
033:
034: /**
035: * The constructor.
036: *
037: * @param section
038: * the parent section
039: * @param name
040: * the unique option name
041: * @param label
042: * the translatable label of the option
043: */
044: public StringOption(BaseOptionTemplateSection section, String name,
045: String label) {
046: super (section, name, label);
047: fStyle = F_DEFAULT_STYLE;
048: setRequired(true);
049: }
050:
051: /**
052: * Update the text widget style to be read only
053: * Added to default style (does not override)
054: * @param readOnly
055: */
056: public void setReadOnly(boolean readOnly) {
057: if (readOnly) {
058: fStyle = F_DEFAULT_STYLE | SWT.READ_ONLY;
059: } else {
060: fStyle = F_DEFAULT_STYLE;
061: }
062: }
063:
064: /**
065: * A utility version of the <samp>getValue() </samp> method that converts
066: * the current value into the String object.
067: *
068: * @return the string version of the current value.
069: */
070: public String getText() {
071: if (getValue() != null)
072: return getValue().toString();
073: return null;
074: }
075:
076: /**
077: * A utility version of the <samp>setValue </samp> method that accepts
078: * String objects.
079: *
080: * @param newText
081: * the new text value of the option
082: * @see #setValue(Object)
083: */
084: public void setText(String newText) {
085: setValue(newText);
086: }
087:
088: /**
089: * Implements the superclass method by passing the string value of the new
090: * value to the widget
091: *
092: * @param value
093: * the new option value
094: */
095: public void setValue(Object value) {
096: super .setValue(value);
097: if (text != null) {
098: ignoreListener = true;
099: String textValue = getText();
100: text.setText(textValue != null ? textValue : ""); //$NON-NLS-1$
101: ignoreListener = false;
102: }
103: }
104:
105: /**
106: * Creates the string option control.
107: *
108: * @param parent
109: * parent composite of the string option widget
110: * @param span
111: * the number of columns that the widget should span
112: */
113: public void createControl(Composite parent, int span) {
114: labelControl = createLabel(parent, 1);
115: labelControl.setEnabled(isEnabled());
116: text = new Text(parent, fStyle);
117: if (getValue() != null)
118: text.setText(getValue().toString());
119: GridData gd = new GridData(GridData.FILL_HORIZONTAL);
120: gd.horizontalSpan = span - 1;
121: text.setLayoutData(gd);
122: text.setEnabled(isEnabled());
123: text.addModifyListener(new ModifyListener() {
124: public void modifyText(ModifyEvent e) {
125: if (ignoreListener)
126: return;
127: StringOption.super .setValue(text.getText());
128: getSection().validateOptions(StringOption.this );
129: }
130: });
131: }
132:
133: /**
134: * A string option is empty if its text field contains no text.
135: *
136: * @return true if there is no text in the text field.
137: */
138: public boolean isEmpty() {
139: return getValue() == null
140: || getValue().toString().length() == 0;
141: }
142:
143: /**
144: * Implements the superclass method by passing the enabled state to the
145: * option's widget.
146: *
147: * @param enabled
148: */
149: public void setEnabled(boolean enabled) {
150: super.setEnabled(enabled);
151: if (labelControl != null) {
152: labelControl.setEnabled(enabled);
153: text.setEnabled(enabled);
154: }
155: }
156: }
|