3 * Copyright (C) 2013 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.ui
.element
;
12 import org
.eclipse
.swt
.SWT
;
13 import org
.eclipse
.swt
.events
.KeyAdapter
;
14 import org
.eclipse
.swt
.events
.KeyEvent
;
15 import org
.eclipse
.swt
.events
.ModifyEvent
;
16 import org
.eclipse
.swt
.events
.ModifyListener
;
17 import org
.eclipse
.swt
.graphics
.Color
;
18 import org
.eclipse
.swt
.widgets
.Composite
;
19 import org
.eclipse
.swt
.widgets
.Control
;
20 import org
.eclipse
.swt
.widgets
.Label
;
21 import org
.eclipse
.swt
.widgets
.Listener
;
22 import org
.eclipse
.swt
.widgets
.Text
;
23 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
24 import org
.eclipse
.ui
.forms
.widgets
.TableWrapData
;
25 import org
.eclipse
.wb
.swt
.SWTResourceManager
;
27 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
28 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
35 public class TextWithLabelComposite
extends AbstractCdmFormElementComposite
implements ModifyListener
, IEnableableFormElement
, ISelectable
{
38 private final Label label
;
40 /** Constant <code>MAX_HEIGHT=0</code> */
41 public static final int MAX_HEIGHT
= 0;
42 /** Constant <code>SINGLE=-1</code> */
43 public static final int SINGLE
= -1;
49 public TextWithLabelComposite(Composite parent
, FormToolkit formFactory
, ICdmFormElement parentFormElement
, String labelString
,
50 String initialText
, Integer textHeight
, int style
) {
51 super(parent
, formFactory
, parentFormElement
, style
);
52 setBackground(SWTResourceManager
.getColor(SWT
.COLOR_WHITE
));
56 initialText
= initialText
==null?
"":initialText
;
58 int scrollStyle
= textHeight
== null ? SWT
.NULL
: (SWT
.V_SCROLL
| SWT
.MULTI
);
60 int combinedStyle
= style
| SWT
.BORDER
| scrollStyle
;
62 // SWT.PASSWORD does not work when SWT.WRAP is set.
63 if (style
!= SWT
.PASSWORD
) {
64 combinedStyle
= combinedStyle
| SWT
.WRAP
;
68 label
= new Label(this, SWT
.NONE
);
69 TableWrapData twd_lblNewLabel
= new TableWrapData(TableWrapData
.RIGHT
, TableWrapData
.TOP
);
70 twd_lblNewLabel
.grabHorizontal
= true;
71 twd_lblNewLabel
.align
= TableWrapData
.LEFT
;
72 label
.setLayoutData(twd_lblNewLabel
);
73 label
.setText(labelString
);
75 text
= new Text(this, SWT
.NONE
);
76 TableWrapData twd_text_1
= new TableWrapData(TableWrapData
.FILL_GRAB
, TableWrapData
.TOP
);
77 twd_text_1
.align
= TableWrapData
.RIGHT
;
78 twd_text_1
.grabHorizontal
= false;
79 text
.setText(initialText
);
80 text
.setLayoutData(twd_text_1
);
84 if (textHeight
== null) {
85 text
.addKeyListener(new KeyAdapter() {
87 public void keyPressed(KeyEvent e
) {
88 if (e
.character
== SWT
.CR
) {
89 // Don't accept carriage returns as input when in single
92 } else if (e
.character
== SWT
.TAB
) {
93 // traverse is not working for wrapped text widgets so
94 // we reintroduce it here
96 TextWithLabelComposite
.this.text
.traverse(SWT
.TRAVERSE_TAB_NEXT
);
102 TableWrapData layoutData
= LayoutConstants
.FILL();
103 if (textHeight
!= null && textHeight
> 0) {
104 (layoutData
).heightHint
= textHeight
;
107 text
.setLayoutData(layoutData
);
109 text
.addModifyListener(this);
117 * Get the text of this composites text composite
119 * @return a {@link java.lang.String} object.
121 public String
getText() {
122 return text
.getText();
126 * Set the text of this composites text composite
129 * a {@link java.lang.String} object.
131 public void setText(String string
) {
132 Listener
[] listeners
= text
.getListeners(SWT
.Modify
);
134 for (Listener listener
: listeners
) {
135 text
.removeListener(SWT
.Modify
, listener
);
138 text
.setText(CdmUtils
.Nz(string
));
140 for (Listener listener
: listeners
) {
141 text
.addListener(SWT
.Modify
, listener
);
149 * org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events
154 public void modifyText(ModifyEvent e
) {
155 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e
));
160 public void setEnabled(boolean enabled
) {
161 text
.setEnabled(enabled
);
162 String symbolicName
= enabled ? Resources
.COLOR_FONT_DEFAULT
: Resources
.COLOR_TEXT_DISABLED
;
163 text
.setForeground(getColor(symbolicName
));
168 public void setIrrelevant(boolean irrelevant
) {
169 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
: Resources
.COLOR_COMPOSITE_BACKGROUND
;
171 Color color
= getColor(colorId
);
172 text
.setBackground(color
);
177 public void setBackground(Color color
) {
178 super.setBackground(color
);
180 label
.setBackground(color
);
185 public void setSelected(boolean selected
) {
186 setBackground(selected ? SELECTED
: getPersistentBackground());
192 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#setFocus()
197 public boolean setFocus() {
198 return text
.setFocus();
206 * @return a {@link org.eclipse.swt.widgets.Control} object.
208 public Control
getMainControl() {
220 public void setTextLimit(int limit
) {
221 text
.setTextLimit(limit
);