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
;
39 * Abstract AbstractEnumComboElement class.
43 * @created Mar 16, 2010
46 public class EnumComboElement
<T
extends IDefinedTerm
> extends
47 AbstractCdmFormElement
implements SelectionListener
,
48 IEnableableFormElement
, ISelectable
{
50 private static CdmEnumDataHolder
[] cdmEnumDataHolders
= {
51 new CdmEnumDataHolder
<NomenclaturalCode
>(){
54 public String
getName() {
55 return "Nomenclatural Code";
59 public Collection
<NomenclaturalCode
> getElements() {
60 return Arrays
.asList(NomenclaturalCode
.values());
64 public Class
<NomenclaturalCode
> getClazz() {
65 return NomenclaturalCode
.class;
69 new CdmEnumDataHolder
<ReferenceType
>(){
72 public String
getName() {
73 return "Reference Type";
77 public Collection
<ReferenceType
> getElements() {
78 return Arrays
.asList(ReferenceType
.values());
82 public Class
<ReferenceType
> getClazz() {
83 return ReferenceType
.class;
89 private static final int DEFAULT_VISIBLE_ITEMS
= 10;
91 protected T selection
;
93 protected List
<T
> elementTypeList
= new ArrayList
<T
>();
96 protected Combo combo
;
98 private Class
<T
> enumType
;
102 * Constructor for AbstractEnumComboElement.
106 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
108 * @param parentElement
109 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
112 * a {@link java.lang.String} object.
116 public EnumComboElement(CdmFormFactory formFactory
,
117 ICdmFormElement parentElement
, Class
<T
> enumType
, int style
) {
118 super(formFactory
, parentElement
);
119 this.enumType
= enumType
;
120 label
= formFactory
.createLabel(getLayoutComposite(), getDefaultLabelString());
124 combo
= new Combo(getLayoutComposite(), SWT
.BORDER
| SWT
.READ_ONLY
);
126 combo
.setLayoutData(CdmFormFactory
.FILL_HORIZONTALLY());
127 setVisibleItemCount(DEFAULT_VISIBLE_ITEMS
);
131 combo
.addSelectionListener(this);
134 private String
getDefaultLabelString() {
135 if(enumType
.equals(ReferenceType
.class)){
136 return "Reference Type";
137 }else if (enumType
.equals(NomenclaturalCode
.class)){
138 return "Nomenclatural Code";
148 private void populateTypes(){
149 for(T enumElement
: getElementsForClass(enumType
)){
150 elementTypeList
.add(enumElement
);
151 combo
.add(((Enum
) enumElement
).name());
157 * Setter for the field <code>selection</code>.
161 * the selection to set
163 public void setSelection(T selection
) {
164 this.selection
= selection
;
165 combo
.select(elementTypeList
.indexOf(selection
));
170 * addSelectionListener
174 * a {@link org.eclipse.swt.events.SelectionListener} object.
176 public void addSelectionListener(SelectionListener listener
) {
177 combo
.addSelectionListener(listener
);
182 * removeSelectionListener
186 * a {@link org.eclipse.swt.events.SelectionListener} object.
188 public void removeSelectionListener(SelectionListener listener
) {
189 combo
.removeSelectionListener(listener
);
193 public void setSelected(boolean selected
) {
194 setBackground(selected ? SELECTED
: getPersistentBackground());
199 * Getter for the field <code>selection</code>.
202 * @return the selection
204 public T
getSelection() {
209 public void setEnabled(boolean enabled
) {
210 combo
.setEnabled(enabled
);
217 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
218 * .events.SelectionEvent)
221 public void widgetSelected(SelectionEvent e
) {
222 selection
= elementTypeList
.get(combo
.getSelectionIndex());
223 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, e
));
227 public void setIrrelevant(boolean irrelevant
) {
228 String colorId
= irrelevant ? Resources
.COLOR_COMPOSITE_IRRELEVANT
229 : Resources
.COLOR_COMPOSITE_BACKGROUND
;
231 Color color
= StoreUtil
.getColor(colorId
);
232 combo
.setBackground(color
);
237 public void setBackground(Color color
) {
238 label
.setBackground(color
);
242 public void widgetDefaultSelected(SelectionEvent e
) {
245 public void setVisibleItemCount(int visibleItems
){
246 combo
.setVisibleItemCount(visibleItems
);
249 private Collection
<T
> getElementsForClass(Class
<T
> clazz
){
250 CdmEnumDataHolder
<T
> dataHolder
= getCdmEnumDataHolderForClass(clazz
);
251 if (dataHolder
!= null) {
252 return dataHolder
.getElements();
257 private CdmEnumDataHolder
<T
> getCdmEnumDataHolderForClass(Class
<T
> clazz
){
258 for (CdmEnumDataHolder dataHolder
: cdmEnumDataHolders
) {
259 if (dataHolder
.getClazz().equals(clazz
)){
266 private interface CdmEnumDataHolder
<T
> {
269 Collection
<T
> getElements();