Project

General

Profile

Download (7.13 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2014 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9
package eu.etaxonomy.taxeditor.ui.mvc.element;
10

    
11

    
12
import java.awt.FontMetrics;
13
import java.util.Calendar;
14
import java.util.ConcurrentModificationException;
15
import java.util.List;
16

    
17
import org.eclipse.core.runtime.Assert;
18
import org.eclipse.jface.util.IPropertyChangeListener;
19
import org.eclipse.jface.viewers.CellEditor.LayoutData;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.events.DisposeEvent;
22
import org.eclipse.swt.events.DisposeListener;
23
import org.eclipse.swt.events.SelectionAdapter;
24
import org.eclipse.swt.events.SelectionEvent;
25
import org.eclipse.swt.graphics.GC;
26
import org.eclipse.swt.graphics.Image;
27
import org.eclipse.swt.layout.GridData;
28
import org.eclipse.swt.layout.GridLayout;
29
import org.eclipse.swt.widgets.Button;
30
import org.eclipse.swt.widgets.Composite;
31
import org.eclipse.swt.widgets.DateTime;
32
import org.eclipse.swt.widgets.Display;
33
import org.eclipse.swt.widgets.Label;
34
import org.eclipse.swt.widgets.Shell;
35
import org.eclipse.swt.widgets.Text;
36
import org.eclipse.ui.forms.widgets.FormToolkit;
37
import org.eclipse.ui.forms.widgets.TableWrapData;
38
import org.eclipse.ui.forms.widgets.TableWrapLayout;
39
//import org.joda.time.DateTime;
40

    
41
import eu.etaxonomy.taxeditor.model.ImageResources;
42
import eu.etaxonomy.taxeditor.model.MessagingUtils;
43
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
44
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
45
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
46
import eu.etaxonomy.taxeditor.ui.element.IPropertyChangeEmitter;
47
import eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite;
48

    
49
/**
50
 * @author pplitzner
51
 * @date 16.06.2014
52
 *
53
 */
54
public class DateElement extends AbstractCdmComposite<DateElementController>  {
55

    
56
    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
57
    private org.joda.time.DateTime initialDateTime;
58
    private Text textDate;
59
    private final Button openDateDialog;
60
    
61
    private static final String pattern = "yyyy-MM-dd HH:mm";
62
   
63

    
64
    /**
65
     * Create the composite.
66
     * @param parent
67
     * @param style
68
     */
69
    public DateElement(Composite parent, org.joda.time.DateTime initialDateTime, String label, int style, boolean editableText) {
70
        super(parent, style);
71
        this.initialDateTime = initialDateTime;
72
        addDisposeListener(new DisposeListener() {
73
            @Override
74
            public void widgetDisposed(DisposeEvent e) {
75
                toolkit.dispose();
76
            }
77
        });
78
        toolkit.adapt(this);
79
        toolkit.paintBordersFor(this);
80
        {
81
            TableWrapLayout tableWrapLayout = new TableWrapLayout();
82
            tableWrapLayout.verticalSpacing = 0;
83
            tableWrapLayout.topMargin = 0;
84
            tableWrapLayout.rightMargin = 0;
85
            tableWrapLayout.leftMargin = 0;
86
            tableWrapLayout.horizontalSpacing = 0;
87
            tableWrapLayout.bottomMargin = 0;
88
            setLayout(tableWrapLayout);
89
        }
90
     
91
        Composite composite = new Composite (this, SWT.NONE);
92
    	GridLayout layout = new GridLayout ();
93
    
94
    	layout.numColumns = 2;
95
    	 	
96
    	composite.setLayout(layout);
97
    	
98
    	
99
       // textDate = new Text(composite, SWT.BORDER|SWT.FILL);new Text(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
100
    	textDate = toolkit.createText(composite, null, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
101
    	
102
        textDate.setEditable(editableText);
103
       
104
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
105
        gridData.minimumWidth = 100;
106
                       
107
        textDate.setLayoutData(gridData);
108
        openDateDialog = new Button (composite, SWT.PUSH);
109
        Image image = ImageResources.getImage(ImageResources.DATE);
110
   //     openDateDialog.setText ("Open Date Dialog");
111
        openDateDialog.setImage(image);
112
       
113
        openDateDialog.addSelectionListener (new SelectionAdapter() {
114
        	@Override
115
        	public void widgetSelected(SelectionEvent e){
116
        		final Shell dialog = new Shell (parent.getShell(), SWT.DIALOG_TRIM);
117
        	
118
    			dialog.setLayout (new GridLayout (3, false));
119
    			dialog.setText(label);
120

    
121
    			final DateTime calendar = new DateTime (dialog, SWT.CALENDAR | SWT.BORDER);
122
    			
123
    			final DateTime time = new DateTime (dialog, SWT.TIME | SWT.SHORT);
124
    			if (initialDateTime != null){
125
    				calendar.setDate(initialDateTime.getYear(), initialDateTime.getMonthOfYear(), initialDateTime.getDayOfMonth());
126
    				time.setHours(initialDateTime.getHourOfDay());
127
        			time.setMinutes(initialDateTime.getMinuteOfHour());
128
        			time.setSeconds(initialDateTime.getSecondOfMinute());
129
    			}
130
    			
131

    
132
    			new Label (dialog, SWT.NONE);
133
    			new Label (dialog, SWT.NONE);
134
    			Button ok = new Button (dialog, SWT.PUSH);
135
    			ok.setText ("OK");
136
    			ok.setLayoutData(new GridData (SWT.FILL, SWT.CENTER, false, false));
137
    			ok.addSelectionListener (new SelectionAdapter() {
138
    	        	@Override
139
    	        	public void widgetSelected(SelectionEvent e){
140
    	        		setData(makeJodaFromSWT(calendar, time));
141
    	        		dialog.close ();
142
    				}
143
    			});
144
    			dialog.setDefaultButton (ok);
145
    			dialog.pack ();
146
    			dialog.open ();
147
    		}
148
        });
149
       
150
        toolkit.adapt(textDate, true, true);
151
    }
152

    
153
    /* (non-Javadoc)
154
     * @see eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite#initInternalController(eu.etaxonomy.taxeditor.ui.element.CdmFormFactory, eu.etaxonomy.taxeditor.ui.element.ICdmFormElement)
155
     */
156
    @Override
157
    protected void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
158
        controller = new DateElementController(this, formFactory, parentElement, initialDateTime);
159
        formFactory.adapt(controller);
160
    }
161
    public Text getTextDate() {
162
        return textDate;
163
    }
164
    
165
   
166
    
167
	
168
		  public static org.joda.time.DateTime makeJodaFromSWT(
169
		                                org.eclipse.swt.widgets.DateTime widget, org.eclipse.swt.widgets.DateTime dateTime) {
170
		    return new org.joda.time.DateTime(widget.getYear(),
171
		                        widget.getMonth(),
172
		                        widget.getDay(),
173
		                        dateTime.getHours(),
174
		                        dateTime.getMinutes(),
175
		                        dateTime.getSeconds());
176
		  }
177

    
178
		  public static void updateSWTwithJoda(
179
		                                org.eclipse.swt.widgets.DateTime widget,
180
		                                org.joda.time.DateTime dateTime) {
181
		    widget.setYear(dateTime.getYear());
182
		    widget.setMonth(dateTime.getMonthOfYear());
183
		    widget.setDay(dateTime.getDayOfMonth());
184
		    widget.setHours(dateTime.getHourOfDay());
185
		    widget.setMinutes(dateTime.getMinuteOfHour());
186
		    widget.setSeconds(dateTime.getSecondOfMinute());
187
		  }
188
		
189
	  public void setData (org.joda.time.DateTime data) {
190
			this.initialDateTime = data;
191
			this.controller.setDateTime(data);
192
			this.textDate.setText(initialDateTime.toString(pattern));
193
			
194
			
195
		}
196

    
197
		
198
		
199
		
200
	  
201

    
202
}
(1-1/4)