annotate dwtx/jface/preference/StringFieldEditor.d @ 34:b3c8e32d406f

preference
author Frank Benoit <benoit@tionex.de>
date Sat, 05 Apr 2008 01:45:47 +0200
parents
children ea8ff534f622
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwtx.jface.preference.StringFieldEditor;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwtx.jface.preference.FieldEditor;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.DWT;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.events.DisposeEvent;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.events.DisposeListener;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.events.FocusAdapter;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.FocusEvent;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.events.KeyAdapter;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.events.KeyEvent;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.GC;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.graphics.Point;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.layout.GridData;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Composite;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Text;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwtx.core.runtime.Assert;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwtx.jface.resource.JFaceResources;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.dwthelper.utils;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * A field editor for a string type preference.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * This class may be used as is, or subclassed as required.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 public class StringFieldEditor : FieldEditor {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 alias FieldEditor.showErrorMessage showErrorMessage;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * Validation strategy constant (value <code>0</code>) indicating that
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * the editor should perform validation after every key stroke.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * @see #setValidateStrategy
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 public static const int VALIDATE_ON_KEY_STROKE = 0;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * Validation strategy constant (value <code>1</code>) indicating that
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * the editor should perform validation only when the text widget
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * loses focus.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * @see #setValidateStrategy
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 public static const int VALIDATE_ON_FOCUS_LOST = 1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * Text limit constant (value <code>-1</code>) indicating unlimited
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 * text limit and width.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 public static int UNLIMITED = -1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 * Cached valid state.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 private bool isValid_;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 * Old text value.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 private String oldValue;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * The text field, or <code>null</code> if none.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 Text textField;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 * Width of text field in characters; initially unlimited.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 private int widthInChars;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * Text limit of text field in characters; initially unlimited.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 private int textLimit;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 * The error message, or <code>null</code> if none.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 private String errorMessage;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * Indicates whether the empty string is legal;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 * <code>true</code> by default.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 private bool emptyStringAllowed = true;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 * The validation strategy;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 * <code>VALIDATE_ON_KEY_STROKE</code> by default.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 private int validateStrategy;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 * Creates a new string field editor
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 protected this() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 widthInChars = UNLIMITED;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 textLimit = UNLIMITED;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 validateStrategy = VALIDATE_ON_KEY_STROKE;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * Creates a string field editor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 * Use the method <code>setTextLimit</code> to limit the text.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 * @param name the name of the preference this field editor works on
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 * @param labelText the label text of the field editor
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * @param width the width of the text input field in characters,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 * or <code>UNLIMITED</code> for no limit
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 * @param strategy either <code>VALIDATE_ON_KEY_STROKE</code> to perform
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 * on the fly checking (the default), or <code>VALIDATE_ON_FOCUS_LOST</code> to
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 * perform validation only after the text has been typed in
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 * @param parent the parent of the field editor's control
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 * @since 2.0
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 public this(String name, String labelText, int width,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 int strategy, Composite parent) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 this();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 init(name, labelText);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 widthInChars = width;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 setValidateStrategy(strategy);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 isValid_ = false;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 errorMessage = JFaceResources
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 .getString("StringFieldEditor.errorMessage");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 createControl(parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 * Creates a string field editor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 * Use the method <code>setTextLimit</code> to limit the text.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 * @param name the name of the preference this field editor works on
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 * @param labelText the label text of the field editor
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 * @param width the width of the text input field in characters,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 * or <code>UNLIMITED</code> for no limit
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 * @param parent the parent of the field editor's control
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 public this(String name, String labelText, int width,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 Composite parent) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 this(name, labelText, width, VALIDATE_ON_KEY_STROKE, parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 * Creates a string field editor of unlimited width.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 * Use the method <code>setTextLimit</code> to limit the text.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 * @param name the name of the preference this field editor works on
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 * @param labelText the label text of the field editor
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 * @param parent the parent of the field editor's control
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 public this(String name, String labelText, Composite parent) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 this(name, labelText, UNLIMITED, parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 protected void adjustForNumColumns(int numColumns) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 GridData gd = cast(GridData) textField.getLayoutData();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 gd.horizontalSpan = numColumns - 1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 // We only grab excess space if we have to
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 // If another field editor has more columns then
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 // we assume it is setting the width.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 gd.grabExcessHorizontalSpace = gd.horizontalSpan is 1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 * Checks whether the text input field contains a valid value or not.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 * @return <code>true</code> if the field value is valid,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 * and <code>false</code> if invalid
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 protected bool checkState() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 bool result = false;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 if (emptyStringAllowed) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 result = true;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 if (textField is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 result = false;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198 String txt = textField.getText();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 result = (txt.trim().length > 0) || emptyStringAllowed;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 // call hook for subclasses
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 result = result && doCheckState();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 if (result) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 clearErrorMessage();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 } else {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 showErrorMessage(errorMessage);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 return result;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Hook for subclasses to do specific state checks.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * The default implementation of this framework method does
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 * nothing and returns <code>true</code>. Subclasses should
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 * override this method to specific state checks.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 * @return <code>true</code> if the field value is valid,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 * and <code>false</code> if invalid
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 protected bool doCheckState() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 return true;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 * Fills this field editor's basic controls into the given parent.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 * The string field implementation of this <code>FieldEditor</code>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * framework method contributes the text field. Subclasses may override
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 * but must call <code>super.doFillIntoGrid</code>.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 protected void doFillIntoGrid(Composite parent, int numColumns) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 getLabelControl(parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 textField = getTextControl(parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241 GridData gd = new GridData();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 gd.horizontalSpan = numColumns - 1;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 if (widthInChars !is UNLIMITED) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 GC gc = new GC(textField);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 try {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 Point extent = gc.textExtent("X");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 gd.widthHint = widthInChars * extent.x;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 } finally {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 gc.dispose();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 } else {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 gd.horizontalAlignment = GridData.FILL;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 gd.grabExcessHorizontalSpace = true;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 textField.setLayoutData(gd);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 protected void doLoad() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 String value = getPreferenceStore().getString(getPreferenceName());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 textField.setText(value);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 oldValue = value;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 protected void doLoadDefault() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 String value = getPreferenceStore().getDefaultString(
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 getPreferenceName());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 textField.setText(value);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 valueChanged();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 protected void doStore() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 getPreferenceStore().setValue(getPreferenceName(), textField.getText());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 * Returns the error message that will be displayed when and if
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 * an error occurs.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 * @return the error message, or <code>null</code> if none
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 public String getErrorMessage() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 return errorMessage;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 public int getNumberOfControls() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 return 2;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 * Returns the field editor's value.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 * @return the current value
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 public String getStringValue() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 return textField.getText();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 return getPreferenceStore().getString(getPreferenceName());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 * Returns this field editor's text control.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * @return the text control, or <code>null</code> if no
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 * text field is created yet
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 protected Text getTextControl() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 return textField;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 * Returns this field editor's text control.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 * The control is created if it does not yet exist
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334 * @param parent the parent
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 * @return the text control
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 public Text getTextControl(Composite parent) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 if (textField is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 textField = new Text(parent, DWT.SINGLE | DWT.BORDER);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 textField.setFont(parent.getFont());
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 switch (validateStrategy) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 case VALIDATE_ON_KEY_STROKE:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 textField.addKeyListener(new class KeyAdapter {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 * @see dwt.events.KeyAdapter#keyReleased(dwt.events.KeyEvent)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 public void keyReleased(KeyEvent e) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 valueChanged();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 });
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 break;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 case VALIDATE_ON_FOCUS_LOST:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 textField.addKeyListener(new class KeyAdapter {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 public void keyPressed(KeyEvent e) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 clearErrorMessage();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 });
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 textField.addFocusListener(new class FocusAdapter {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 public void focusGained(FocusEvent e) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 refreshValidState();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 public void focusLost(FocusEvent e) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 valueChanged();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 clearErrorMessage();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 });
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 break;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 default:
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372 Assert.isTrue(false, "Unknown validate strategy");//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 textField.addDisposeListener(new class DisposeListener {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 public void widgetDisposed(DisposeEvent event) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 textField = null;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 });
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 if (textLimit > 0) {//Only set limits above 0 - see DWT spec
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 textField.setTextLimit(textLimit);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 } else {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 checkParent(textField, parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385 return textField;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 * Returns whether an empty string is a valid value.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 * @return <code>true</code> if an empty string is a valid value, and
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 * <code>false</code> if an empty string is invalid
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 * @see #setEmptyStringAllowed
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 public bool isEmptyStringAllowed() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 return emptyStringAllowed;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 public bool isValid() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 return isValid_;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 protected void refreshValidState() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 isValid_ = checkState();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 * Sets whether the empty string is a valid value or not.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 * @param b <code>true</code> if the empty string is allowed,
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * and <code>false</code> if it is considered invalid
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 public void setEmptyStringAllowed(bool b) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 emptyStringAllowed = b;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 * Sets the error message that will be displayed when and if
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425 * an error occurs.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 * @param message the error message
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 public void setErrorMessage(String message) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 errorMessage = message;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 /* (non-Javadoc)
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 * Method declared on FieldEditor.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 public void setFocus() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438 textField.setFocus();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 * Sets this field editor's value.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 * @param value the new value, or <code>null</code> meaning the empty string
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 public void setStringValue(String value) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
449 if (value is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
450 value = "";//$NON-NLS-1$
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
451 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
452 oldValue = textField.getText();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
453 if (!oldValue.equals(value)) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
454 textField.setText(value);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
455 valueChanged();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
456 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
457 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
458 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
459
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
460 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
461 * Sets this text field's text limit.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
462 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
463 * @param limit the limit on the number of character in the text
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
464 * input field, or <code>UNLIMITED</code> for no limit
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
465
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
466 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
467 public void setTextLimit(int limit) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
468 textLimit = limit;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
469 if (textField !is null) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
470 textField.setTextLimit(limit);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
471 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
472 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
473
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
474 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
475 * Sets the strategy for validating the text.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
476 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
477 * Calling this method has no effect after <code>createPartControl</code>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
478 * is called. Thus this method is really only useful for subclasses to call
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
479 * in their constructor. However, it has public visibility for backward
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
480 * compatibility.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
481 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
482 *
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
483 * @param value either <code>VALIDATE_ON_KEY_STROKE</code> to perform
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
484 * on the fly checking (the default), or <code>VALIDATE_ON_FOCUS_LOST</code> to
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
485 * perform validation only after the text has been typed in
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
486 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
487 public void setValidateStrategy(int value) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
488 Assert.isTrue(value is VALIDATE_ON_FOCUS_LOST
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
489 || value is VALIDATE_ON_KEY_STROKE);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
490 validateStrategy = value;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
491 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
492
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
493 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
494 * Shows the error message set via <code>setErrorMessage</code>.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
495 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
496 public void showErrorMessage() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
497 showErrorMessage(errorMessage);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
498 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
499
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
500 /**
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
501 * Informs this field editor's listener, if it has one, about a change
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
502 * to the value (<code>VALUE</code> property) provided that the old and
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
503 * new values are different.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
504 * <p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
505 * This hook is <em>not</em> called when the text is initialized
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
506 * (or reset to the default value) from the preference store.
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
507 * </p>
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
508 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
509 protected void valueChanged() {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
510 setPresentsDefaultValue(false);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
511 bool oldState = isValid_;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
512 refreshValidState();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
513
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
514 if (isValid_ !is oldState) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
515 fireStateChanged(IS_VALID, oldState, isValid_);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
516 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
517
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
518 String newValue = textField.getText();
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
519 if (!newValue.equals(oldValue)) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
520 fireValueChanged(VALUE, stringcast(oldValue), stringcast(newValue));
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
521 oldValue = newValue;
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
522 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
523 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
524
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
525 /*
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
526 * @see FieldEditor.setEnabled(bool,Composite).
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
527 */
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
528 public void setEnabled(bool enabled, Composite parent) {
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
529 super.setEnabled(enabled, parent);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
530 getTextControl(parent).setEnabled(enabled);
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
531 }
b3c8e32d406f preference
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
532 }