2 * Copyright (C) 2014 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.
9 package eu
.etaxonomy
.taxeditor
.ui
.mvc
.element
;
11 import org
.eclipse
.swt
.SWT
;
12 import org
.eclipse
.swt
.events
.DisposeEvent
;
13 import org
.eclipse
.swt
.events
.DisposeListener
;
14 import org
.eclipse
.swt
.events
.SelectionAdapter
;
15 import org
.eclipse
.swt
.events
.SelectionEvent
;
16 import org
.eclipse
.swt
.graphics
.Image
;
17 import org
.eclipse
.swt
.layout
.GridData
;
18 import org
.eclipse
.swt
.layout
.GridLayout
;
19 import org
.eclipse
.swt
.widgets
.Button
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
21 import org
.eclipse
.swt
.widgets
.DateTime
;
22 import org
.eclipse
.swt
.widgets
.Display
;
23 import org
.eclipse
.swt
.widgets
.Shell
;
24 import org
.eclipse
.swt
.widgets
.Text
;
25 import org
.eclipse
.ui
.forms
.widgets
.FormToolkit
;
26 import org
.eclipse
.ui
.forms
.widgets
.TableWrapLayout
;
27 import org
.joda
.time
.DateTimeZone
;
29 import eu
.etaxonomy
.taxeditor
.model
.ImageResources
;
30 import eu
.etaxonomy
.taxeditor
.ui
.element
.CacheRelevance
;
31 import eu
.etaxonomy
.taxeditor
.ui
.element
.CacheRelevanceHelper
;
32 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
33 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICacheRelevantFormElement
;
34 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
35 import eu
.etaxonomy
.taxeditor
.ui
.element
.ToggleableTextElement
;
36 import eu
.etaxonomy
.taxeditor
.ui
.mvc
.AbstractCdmComposite
;
42 public class DateElement
43 extends AbstractCdmComposite
<DateElementController
>
44 implements ICacheRelevantFormElement
{
46 private static final String pattern
= "yyyy-MM-dd HH:mm";
48 private final FormToolkit toolkit
= new FormToolkit(Display
.getCurrent());
49 private org
.joda
.time
.DateTime initialDateTime
;
50 private final Text textDate
;
51 private final Button openDateDialog
;
53 protected CacheRelevanceHelper cacheRelevanceHelper
= new CacheRelevanceHelper();
56 * Create the composite.
58 public DateElement(Composite parent
, org
.joda
.time
.DateTime initDateTime
, String label
, int style
, boolean editableText
) {
60 if (initDateTime
!= null){
61 this.initialDateTime
= initDateTime
.toDateTime(DateTimeZone
.UTC
);
64 addDisposeListener(new DisposeListener() {
66 public void widgetDisposed(DisposeEvent e
) {
71 toolkit
.paintBordersFor(this);
73 TableWrapLayout tableWrapLayout
= new TableWrapLayout();
74 tableWrapLayout
.verticalSpacing
= 0;
75 tableWrapLayout
.topMargin
= 0;
76 tableWrapLayout
.rightMargin
= 0;
77 tableWrapLayout
.leftMargin
= 0;
78 tableWrapLayout
.horizontalSpacing
= 0;
79 tableWrapLayout
.bottomMargin
= 0;
80 setLayout(tableWrapLayout
);
83 Composite composite
= new Composite (this, SWT
.NONE
);
84 GridLayout layout
= new GridLayout ();
86 layout
.numColumns
= 2;
87 layout
.marginWidth
= 0;
89 composite
.setLayout(layout
);
92 textDate
= toolkit
.createText(composite
, null, SWT
.BORDER
| SWT
.SINGLE
| SWT
.FULL_SELECTION
);
94 textDate
.setEditable(editableText
);
96 GridData gridData
= new GridData(GridData
.FILL_HORIZONTAL
);
97 gridData
.minimumWidth
= 100;
99 textDate
.setLayoutData(gridData
);
100 openDateDialog
= new Button (composite
, SWT
.PUSH
);
101 Image image
= ImageResources
.getImage(ImageResources
.DATE
);
102 // openDateDialog.setText ("Open Date Dialog");
103 openDateDialog
.setImage(image
);
105 openDateDialog
.addSelectionListener (new SelectionAdapter() {
107 public void widgetSelected(SelectionEvent e
){
108 final Shell dialog
= new Shell (parent
.getShell(), SWT
.DIALOG_TRIM
);
110 dialog
.setLayout (new GridLayout (3, false));
111 dialog
.setText(label
);
113 final DateTime calendar
= new DateTime (dialog
, SWT
.CALENDAR
| SWT
.BORDER
);
115 final DateTime time
= new DateTime (dialog
, SWT
.TIME
| SWT
.SHORT
);
116 if (initialDateTime
!= null){
117 calendar
.setDate(initialDateTime
.getYear(), initialDateTime
.getMonthOfYear()-1, initialDateTime
.getDayOfMonth());
118 time
.setHours(initialDateTime
.getHourOfDay());
119 time
.setMinutes(initialDateTime
.getMinuteOfHour());
120 // time.setSeconds(initialDateTime.getSecondOfMinute());
123 // new Label (dialog, SWT.NONE);
124 // new Label (dialog, SWT.NONE);
125 Button ok
= new Button (dialog
, SWT
.PUSH
);
127 ok
.setLayoutData(new GridData (SWT
.FILL
, SWT
.CENTER
, false, false));
128 ok
.addSelectionListener (new SelectionAdapter() {
130 public void widgetSelected(SelectionEvent e
){
131 setData(makeZonedTimeFromSWT(calendar
, time
));
135 dialog
.setDefaultButton (ok
);
141 toolkit
.adapt(textDate
, true, true);
145 protected void initInternalController(CdmFormFactory formFactory
, ICdmFormElement parentElement
) {
146 controller
= new DateElementController(this, formFactory
, parentElement
, initialDateTime
);
147 formFactory
.adapt(controller
);
149 public Text
getTextDate() {
153 public static org
.joda
.time
.DateTime
makeZonedTimeFromSWT(
154 org
.eclipse
.swt
.widgets
.DateTime widget
,
155 org
.eclipse
.swt
.widgets
.DateTime dateTime
) {
156 //the first month of the year is 0
157 return new org
.joda
.time
.DateTime(widget
.getYear(),
161 dateTime
.getMinutes(),
167 public static void updateSWTwithJoda(
168 org
.eclipse
.swt
.widgets
.DateTime widget
,
170 widget
.setYear(dateTime
.getYear());
171 widget
.setMonth(dateTime
.getMonth() -1);
172 widget
.setDay(dateTime
.getDay());
173 widget
.setHours(dateTime
.getHours());
174 widget
.setMinutes(dateTime
.getMinutes());
177 public void setData (org
.joda
.time
.DateTime data
) {
178 this.initialDateTime
= data
;
179 this.controller
.setDateTime(data
);
180 this.textDate
.setText(initialDateTime
.toString(pattern
));
184 public void updateCacheRelevance() {
185 textDate
.setBackground(cacheRelevance().getColor());
189 public void addDependsOnCache(ToggleableTextElement cacheElement
) {
190 cacheRelevanceHelper
.addDependsOnCache(cacheElement
);
194 public CacheRelevance
cacheRelevance() {
195 return cacheRelevanceHelper
.cacheRelevance();