cdmlib version change
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / term / AbstractEnumComboElement.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.taxeditor.ui.term;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 import org.eclipse.swt.SWT;
17 import org.eclipse.swt.events.SelectionEvent;
18 import org.eclipse.swt.events.SelectionListener;
19 import org.eclipse.swt.graphics.Color;
20 import org.eclipse.swt.widgets.Combo;
21 import org.eclipse.swt.widgets.Label;
22
23 import eu.etaxonomy.taxeditor.preference.Resources;
24 import eu.etaxonomy.taxeditor.store.StoreUtil;
25 import eu.etaxonomy.taxeditor.ui.forms.AbstractCdmFormElement;
26 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
27 import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
28 import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
29 import eu.etaxonomy.taxeditor.ui.forms.IEnableableFormElement;
30 import eu.etaxonomy.taxeditor.ui.forms.ISelectable;
31
32 /**
33 * <p>
34 * Abstract AbstractEnumComboElement class.
35 * </p>
36 *
37 * @author n.hoffmann
38 * @created Mar 16, 2010
39 * @version 1.0
40 */
41 public abstract class AbstractEnumComboElement<T extends Enum> extends
42 AbstractCdmFormElement implements SelectionListener,
43 IEnableableFormElement, ISelectable {
44
45 private static final int VISIBLE_ITEMS = 10;
46
47 protected T selection;
48
49 protected List<T> elementTypeList = new ArrayList<T>();
50
51 private Label label;
52 protected Combo combo;
53
54 /**
55 * <p>
56 * Constructor for AbstractEnumComboElement.
57 * </p>
58 *
59 * @param formFactory
60 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
61 * object.
62 * @param parentElement
63 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
64 * object.
65 * @param labelString
66 * a {@link java.lang.String} object.
67 * @param <T>
68 * a T object.
69 */
70 public AbstractEnumComboElement(CdmFormFactory formFactory,
71 ICdmFormElement parentElement, String labelString) {
72 super(formFactory, parentElement);
73 label = formFactory.createLabel(getLayoutComposite(), labelString);
74 addControl(label);
75
76 // create combo
77 combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
78 addControl(combo);
79 combo.setLayoutData(CdmFormFactory.FILL_HORIZONTALLY());
80 combo.setVisibleItemCount(VISIBLE_ITEMS);
81
82 populateTypes();
83
84 combo.addSelectionListener(this);
85 }
86
87 /**
88 * <p>
89 * populateTypes
90 * </p>
91 */
92 protected abstract void populateTypes();
93
94 /**
95 * <p>
96 * Setter for the field <code>selection</code>.
97 * </p>
98 *
99 * @param selection
100 * the selection to set
101 */
102 public void setSelection(T selection) {
103 this.selection = selection;
104 combo.select(elementTypeList.indexOf(selection));
105 }
106
107 /**
108 * <p>
109 * addSelectionListener
110 * </p>
111 *
112 * @param listener
113 * a {@link org.eclipse.swt.events.SelectionListener} object.
114 */
115 public void addSelectionListener(SelectionListener listener) {
116 combo.addSelectionListener(listener);
117 }
118
119 /**
120 * <p>
121 * removeSelectionListener
122 * </p>
123 *
124 * @param listener
125 * a {@link org.eclipse.swt.events.SelectionListener} object.
126 */
127 public void removeSelectionListener(SelectionListener listener) {
128 combo.removeSelectionListener(listener);
129 }
130
131 /** {@inheritDoc} */
132 public void setSelected(boolean selected) {
133 setBackground(selected ? SELECTED : getPersistentBackground());
134 }
135
136 /**
137 * <p>
138 * Getter for the field <code>selection</code>.
139 * </p>
140 *
141 * @return the selection
142 */
143 public T getSelection() {
144 return selection;
145 }
146
147 /** {@inheritDoc} */
148 public void setEnabled(boolean enabled) {
149 combo.setEnabled(enabled);
150 }
151
152 /*
153 * (non-Javadoc)
154 *
155 * @see
156 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
157 * .events.SelectionEvent)
158 */
159 /** {@inheritDoc} */
160 public void widgetSelected(SelectionEvent e) {
161 selection = elementTypeList.get(combo.getSelectionIndex());
162 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e));
163 }
164
165 /** {@inheritDoc} */
166 public void setIrrelevant(boolean irrelevant) {
167 String colorId = irrelevant ? Resources.COLOR_COMPOSITE_IRRELEVANT
168 : Resources.COLOR_COMPOSITE_BACKGROUND;
169
170 Color color = StoreUtil.getColor(colorId);
171 combo.setBackground(color);
172 }
173
174 /** {@inheritDoc} */
175 @Override
176 public void setBackground(Color color) {
177 label.setBackground(color);
178 }
179
180 /** {@inheritDoc} */
181 public void widgetDefaultSelected(SelectionEvent e) {
182 }
183 }