2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * 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
.jface
.util
.PropertyChangeEvent
;
13 import org
.eclipse
.swt
.SWT
;
14 import org
.eclipse
.swt
.graphics
.Color
;
15 import org
.eclipse
.swt
.widgets
.Display
;
16 import org
.eclipse
.swt
.widgets
.Label
;
17 import org
.eclipse
.ui
.forms
.widgets
.TableWrapData
;
18 import org
.eclipse
.ui
.forms
.widgets
.TableWrapLayout
;
19 import org
.joda
.time
.IllegalFieldValueException
;
20 import org
.joda
.time
.Partial
;
22 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
23 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
24 import eu
.etaxonomy
.taxeditor
.preference
.Resources
;
27 * <p>PartialElement class.</p>
30 * @created Mar 31, 2010
32 public class PartialElement
extends AbstractCdmFormElement
implements ISelectable
, IEnableableFormElement
{
35 private FloatWithLabelElement number_day
;
36 private FloatWithLabelElement number_month
;
37 private FloatWithLabelElement number_year
= null;
38 private Partial partial
;
39 private boolean isEnabled
;
41 public PartialElement(CdmFormFactory formFactory
,
42 ICdmFormElement formElement
, String labelString
, int style
){
43 this(formFactory
, formElement
, labelString
, style
, true);
47 * <p>Constructor for PartialElement.</p>
49 * @param formFactory a {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
50 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.element.forms.ICdmFormElement} object.
51 * @param labelString a {@link java.lang.String} object.
54 public PartialElement(CdmFormFactory formFactory
,
55 ICdmFormElement formElement
, String labelString
, int style
, boolean showYear
) {
56 super(formFactory
, formElement
);
62 TableWrapLayout layout
= LayoutConstants
.LAYOUT(rows
, false);
63 // layout.verticalSpacing = 7;
64 layout
.horizontalSpacing
= 7;
66 formElement
.getLayoutComposite().setLayout(layout
);
68 TableWrapData layoutLable
= new TableWrapData();
69 layoutLable
.valign
= TableWrapData
.MIDDLE
;
71 label
= formFactory
.createLabel(getLayoutComposite(), labelString
);
72 label
.setLayoutData(layoutLable
);
76 number_year
= formFactory
.createFloatTextWithLabelElement(this, "Year", null, style
);
77 number_year
.setLimits(4, 0, 9999);
81 number_month
= formFactory
.createFloatTextWithLabelElement(this, "Month", null, style
);
82 number_month
.setLimits(2, 1, 12);
84 number_day
= formFactory
.createFloatTextWithLabelElement(this, "Day", null, style
);
85 number_day
.setLimits(2, 1, 31);
88 formFactory
.addPropertyChangeListener(this);
92 * <p>Setter for the field <code>partial</code>.</p>
94 * @param partial a {@link org.joda.time.Partial} object.
96 public void setPartial(Partial partial
){
97 this.partial
= partial
;
100 number_day
.setNumber(TimePeriod
.getPartialValue(partial
, TimePeriod
.DAY_TYPE
));
101 number_month
.setNumber(TimePeriod
.getPartialValue(partial
, TimePeriod
.MONTH_TYPE
));
102 if (number_year
!= null) {
103 number_year
.setNumber(TimePeriod
.getPartialValue(partial
, TimePeriod
.YEAR_TYPE
));
107 number_day
.setNumber(null);
108 number_month
.setNumber(null);
109 if (number_year
!= null) {
110 number_year
.setNumber(null);
116 * <p>Getter for the field <code>partial</code>.</p>
118 * @return a {@link org.joda.time.Partial} object.
120 public Partial
getPartial(){
126 public void propertyChange(PropertyChangeEvent event
) {
131 Object eventSource
= event
.getSource();
133 if(getElements().contains(eventSource
)){
134 if(event
instanceof CdmPropertyChangeEvent
){
135 if(((CdmPropertyChangeEvent
) event
).hasException()){
136 handleException((CdmPropertyChangeEvent
) event
);
140 handleEvent(eventSource
);
147 private void handleException(CdmPropertyChangeEvent event
) {
148 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event
.getException()));
151 private void handleEvent(Object eventSource
){
152 if (eventSource
instanceof NumberWithLabelElement
){
154 if(eventSource
== number_month
&& number_month
.getException()==null){
155 partial
= TimePeriod
.setPartialField(partial
, number_month
.getInteger(), TimePeriod
.MONTH_TYPE
);
156 }else if(eventSource
== number_day
&& number_day
.getException()==null){
157 partial
= TimePeriod
.setPartialField(partial
, number_day
.getInteger(), TimePeriod
.DAY_TYPE
);
158 }else if(eventSource
== number_year
&& number_year
.getException()==null){
159 partial
= TimePeriod
.setPartialField(partial
, number_year
.getInteger(), TimePeriod
.YEAR_TYPE
);
161 } catch (IndexOutOfBoundsException
| IllegalFieldValueException e
) {
162 ((NumberWithLabelElement
)eventSource
).text
.setBackground(Display
.getCurrent().getSystemColor(SWT
.COLOR_RED
));
165 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
170 public void setBackground(Color color
) {
171 label
.setBackground(color
);
175 public void setSelected(boolean selected
) {
176 setBackground(selected ? SELECTED
: getPersistentBackground());
180 public void setEnabled(boolean enabled
){
181 this.number_day
.setEnabled(enabled
);
182 this.number_month
.setEnabled(enabled
);
183 if (number_year
!= null){
184 this.number_year
.setEnabled(enabled
);
187 if (number_year
!= null){
188 this.number_year
.getMainControl().setBackground(AbstractUtility
.getColor(Resources
.COLOR_TEXT_DISABLED_BACKGROUND
));
190 this.number_month
.getMainControl().setBackground(AbstractUtility
.getColor(Resources
.COLOR_TEXT_DISABLED_BACKGROUND
));
191 this.number_day
.getMainControl().setBackground(AbstractUtility
.getColor(Resources
.COLOR_TEXT_DISABLED_BACKGROUND
));
193 if (number_year
!= null){
194 this.number_year
.getMainControl().setBackground(getPersistentBackground());
196 this.number_month
.getMainControl().setBackground(getPersistentBackground());
197 this.number_day
.getMainControl().setBackground(getPersistentBackground());
204 public void setAllNull() {
205 this.number_day
.setNumber(null);
206 this.number_month
.setNumber(null);
207 if (number_year
!= null){
208 this.number_year
.setNumber(null);
214 public boolean isEnabled() {