3 * Copyright (C) 2007 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.
11 package eu
.etaxonomy
.taxeditor
.ui
.combo
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.Collection
;
16 import java
.util
.List
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.events
.SelectionEvent
;
20 import org
.eclipse
.swt
.events
.SelectionListener
;
21 import org
.eclipse
.swt
.graphics
.Color
;
22 import org
.eclipse
.swt
.widgets
.Combo
;
23 import org
.eclipse
.swt
.widgets
.Label
;
25 import eu
.etaxonomy
.cdm
.model
.common
.IDefinedTerm
;
26 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
27 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
28 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
29 import eu
.etaxonomy
.taxeditor
.store
.StoreUtil
;
30 import eu
.etaxonomy
.taxeditor
.ui
.element
.AbstractCdmFormElement
;
31 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
32 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmPropertyChangeEvent
;
33 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.element
.IEnableableFormElement
;
35 import eu
.etaxonomy
.taxeditor
.ui
.element
.ISelectable
;
36 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
40 * Abstract AbstractEnumComboElement class.
44 * @created Mar 16, 2010
47 public class EnumComboElement
<T
extends IDefinedTerm
> extends
48 AbstractCdmFormElement
implements SelectionListener
,
49 IEnableableFormElement
, ISelectable
{
51 private static CdmEnumDataHolder
[] cdmEnumDataHolders
= {
52 new CdmEnumDataHolder
<NomenclaturalCode
>(){
55 public String
getName() {
56 return "Nomenclatural Code";
60 public Collection
<NomenclaturalCode
> getElements() {
61 return Arrays
.asList(NomenclaturalCode
.values());
65 public Class
<NomenclaturalCode
> getClazz() {
66 return NomenclaturalCode
.class;
70 new CdmEnumDataHolder
<ReferenceType
>(){
73 public String
getName() {
74 return "Reference Type";
78 public Collection
<ReferenceType
> getElements() {
79 return Arrays
.asList(ReferenceType
.values());
83 public Class
<ReferenceType
> getClazz() {
84 return ReferenceType
.class;
90 private static final int DEFAULT_VISIBLE_ITEMS
= 10;
92 protected T selection
;
94 protected List
<T
> elementTypeList
= new ArrayList
<T
>();
97 protected Combo combo
;
99 private Class
<T
> enumType
;
103 * Constructor for AbstractEnumComboElement.
107 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
109 * @param parentElement
110 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
113 * a {@link java.lang.String} object.
117 public EnumComboElement(CdmFormFactory formFactory
,
118 ICdmFormElement parentElement
, Class
<T
> enumType
, int style
) {
119 super(formFactory
, parentElement
);
120 this.enumType
= enumType
;
121 label
= formFactory
.createLabel(getLayoutComposite(), getDefaultLabelString());
125 combo
= new Combo(getLayoutComposite(), SWT
.BORDER
| SWT
.READ_ONLY
);
127 combo
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY());
128 setVisibleItemCount(DEFAULT_VISIBLE_ITEMS
);
132 combo
.addSelectionListener(this);
135 private String
getDefaultLabelString() {
136 if(enumType
.equals(ReferenceType
.class)){
137 return "Reference Type";
138 }else if (enumType
.equals(NomenclaturalCode
.class)){
139 return "Nomenclatural Code";
149 private void populateTypes(){
150 for(T enumElement
: getElementsForClass(enumType
)){
151 elementTypeList
.add(enumElement
);
152 combo
.add(((Enum
) enumElement
).name());
158 * Setter for the field <code>selection</code>.
162 * the selection to set
164 public void setSelection(T selection
) {
165 this.selection
= selection
;
166 combo
.select(elementTypeList
.indexOf(selection
));
171 * addSelectionListener
175 * a {@link org.eclipse.swt.events.SelectionListener} object.
177 public void addSelectionListener(SelectionListener listener
) {
178 combo
.addSelectionListener(listener
);
183 * removeSelectionListener
187 * a {@link org.eclipse.swt.events.SelectionListener} object.
189 public void removeSelectionListener(SelectionListener listener
) {
190 combo
.removeSelectionListener(listener
);
194 public void setSelected(boolean selected
) {
195 setBackground(selected ? SELECTED
: getPersistentBackground());
200 * Getter for the field <code>selection</code>.
203 * @return the selection
205 public T
getSelection() {
210 public void setEnabled(boolean enabled
) {
211 combo
.setEnabled(enabled
);
218 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
219 * .events.SelectionEvent)
222 public void widgetSelected(SelectionEvent e
) {
223 selection
= elementTypeList
.get(combo
.getSelectionIndex());
224 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e
));
228 public void setIrrelevant(boolean irrelevant
) {
229 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
230 : Resources
.COLOR_COMPOSITE_BACKGROUND
;
232 Color color
= StoreUtil
.getColor(colorId
);
233 combo
.setBackground(color
);
238 public void setBackground(Color color
) {
239 label
.setBackground(color
);
243 public void widgetDefaultSelected(SelectionEvent e
) {
246 public void setVisibleItemCount(int visibleItems
){
247 combo
.setVisibleItemCount(visibleItems
);
250 private Collection
<T
> getElementsForClass(Class
<T
> clazz
){
251 CdmEnumDataHolder
<T
> dataHolder
= getCdmEnumDataHolderForClass(clazz
);
252 if (dataHolder
!= null) {
253 return dataHolder
.getElements();
258 private CdmEnumDataHolder
<T
> getCdmEnumDataHolderForClass(Class
<T
> clazz
){
259 for (CdmEnumDataHolder dataHolder
: cdmEnumDataHolders
) {
260 if (dataHolder
.getClazz().equals(clazz
)){
267 private interface CdmEnumDataHolder
<T
> {
270 Collection
<T
> getElements();