including changes from cdmlib-print
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / forms / TextWithLabelElement.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.forms;
5
6 import org.eclipse.swt.SWT;
7 import org.eclipse.swt.events.KeyAdapter;
8 import org.eclipse.swt.events.KeyEvent;
9 import org.eclipse.swt.events.ModifyEvent;
10 import org.eclipse.swt.events.ModifyListener;
11 import org.eclipse.swt.graphics.Color;
12 import org.eclipse.swt.widgets.Control;
13 import org.eclipse.swt.widgets.Label;
14 import org.eclipse.swt.widgets.Listener;
15 import org.eclipse.swt.widgets.Text;
16 import org.eclipse.ui.forms.widgets.TableWrapData;
17
18 import eu.etaxonomy.cdm.common.CdmUtils;
19 import eu.etaxonomy.taxeditor.editor.EditorUtil;
20 import eu.etaxonomy.taxeditor.preference.Resources;
21
22 /**
23 * <p>TextWithLabelElement class.</p>
24 *
25 * @author n.hoffmann
26 * @version $Id: $
27 */
28 public class TextWithLabelElement extends AbstractCdmFormElement implements ModifyListener, IEnableableFormElement{
29
30 protected Text text;
31 private Label label;
32
33 /** Constant <code>MAX_HEIGHT=0</code> */
34 public static final int MAX_HEIGHT = 0;
35 /** Constant <code>SINGLE=-1</code> */
36 public static final int SINGLE = -1;
37
38 /**
39 * <p>Constructor for TextWithLabelElement.</p>
40 *
41 * @param formFactory a {@link eu.etaxonomy.taxeditor.forms.CdmFormFactory} object.
42 * @param parentElement a {@link eu.etaxonomy.taxeditor.forms.ICdmFormElement} object.
43 * @param labelString a {@link java.lang.String} object.
44 * @param initialText a {@link java.lang.String} object.
45 * @param textHeight a {@link java.lang.Integer} object.
46 * @param style a int.
47 */
48 protected TextWithLabelElement(CdmFormFactory formFactory, ICdmFormElement parentElement, String labelString, String initialText, Integer textHeight, int style)
49 {
50 super(formFactory, parentElement);
51
52 if(labelString != null && ! labelString.equals("")){
53 label = formFactory.createLabel(getLayoutComposite(), CdmUtils.Nz(labelString), SWT.NULL);
54 addControl(label);
55 label.setLayoutData(CdmFormFactory.LEFT());
56 }
57
58 int scrollStyle = textHeight == null ? SWT.NULL : (SWT.V_SCROLL | SWT.MULTI);
59 text = formFactory.createText(getLayoutComposite(), "", SWT.BORDER | SWT.WRAP | scrollStyle);
60
61 addControl(text);
62
63 // text.setWO
64
65 if(textHeight == null){
66 text.addKeyListener( new KeyAdapter(){
67 @Override
68 public void keyPressed(KeyEvent e) {
69 if(e.character == SWT.CR){
70 // Don't accept carriage returns as input when in single line mode
71 e.doit = false;
72 }else if(e.character == SWT.TAB){
73 // traverse is not working for wrapped text widgets so
74 // we reintroduce it here
75 e.doit = false;
76 TextWithLabelElement.this.text.traverse(SWT.TRAVERSE_TAB_NEXT);
77 }
78 }
79 });
80 }
81
82 TableWrapData layoutData = CdmFormFactory.FILL();
83 if (textHeight != null && textHeight > 0){
84 ((TableWrapData) layoutData).heightHint = textHeight;
85 }
86
87 text.setLayoutData(layoutData);
88
89 text.addModifyListener(this);
90
91 setText(initialText);
92 }
93
94 /**
95 * Get the text of this composites text composite
96 *
97 * @return a {@link java.lang.String} object.
98 */
99 public String getText() {
100 return text.getText();
101 }
102
103 /**
104 * Set the text of this composites text composite
105 *
106 * @param string a {@link java.lang.String} object.
107 */
108 public void setText(String string) {
109 Listener[] listeners = text.getListeners(SWT.Modify);
110
111 for(Listener listener : listeners){
112 text.removeListener(SWT.Modify, listener);
113 }
114
115 text.setText(CdmUtils.Nz(string));
116
117 for(Listener listener : listeners){
118 text.addListener(SWT.Modify, listener);
119 }
120 }
121
122 /* (non-Javadoc)
123 * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
124 */
125 /** {@inheritDoc} */
126 public void modifyText(ModifyEvent e) {
127 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
128 }
129
130 /** {@inheritDoc} */
131 public void setSelected(boolean selected) {
132 setBackground(getColor(selected));
133 }
134
135 /** {@inheritDoc} */
136 public void setEnabled(boolean enabled) {
137 text.setEnabled(enabled);
138 String symbolicName = enabled ? Resources.COLOR_FONT_DEFAULT : Resources.COLOR_TEXT_DISABLED;
139 text.setForeground(EditorUtil.getColor(symbolicName));
140 }
141
142 /** {@inheritDoc} */
143 public void setIrrelevant(boolean irrelevant) {
144 String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT : Resources.COLOR_COMPOSITE_BACKGROUND;
145
146 Color color = EditorUtil.getColor(colorId);
147 text.setBackground(color);
148 }
149
150 /** {@inheritDoc} */
151 @Override
152 public void setBackground(Color color) {
153 if(label != null)
154 label.setBackground(color);
155 }
156
157 /* (non-Javadoc)
158 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#setFocus()
159 */
160 /** {@inheritDoc} */
161 @Override
162 public void setFocus() {
163 text.setFocus();
164 }
165
166 /**
167 * <p>getMainControl</p>
168 *
169 * @return a {@link org.eclipse.swt.widgets.Control} object.
170 */
171 public Control getMainControl() {
172 return text;
173 }
174
175 /**
176 * <p>setTextLimit</p>
177 *
178 * @param limit a int.
179 */
180 public void setTextLimit(int limit) {
181 text.setTextLimit(limit);
182 }
183 }