Project

General

Profile

Download (6.41 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 org.eclipse.swt.SWT;
13
import org.eclipse.swt.events.DisposeEvent;
14
import org.eclipse.swt.events.DisposeListener;
15
import org.eclipse.swt.events.SelectionAdapter;
16
import org.eclipse.swt.events.SelectionEvent;
17
import org.eclipse.swt.graphics.Image;
18
import org.eclipse.swt.layout.GridData;
19
import org.eclipse.swt.layout.GridLayout;
20
import org.eclipse.swt.widgets.Button;
21
import org.eclipse.swt.widgets.Composite;
22
import org.eclipse.swt.widgets.DateTime;
23
import org.eclipse.swt.widgets.Display;
24
import org.eclipse.swt.widgets.Label;
25
import org.eclipse.swt.widgets.Shell;
26
import org.eclipse.swt.widgets.Text;
27
import org.eclipse.ui.forms.widgets.FormToolkit;
28
import org.eclipse.ui.forms.widgets.TableWrapLayout;
29
//import org.joda.time.DateTime;
30

    
31
import eu.etaxonomy.taxeditor.model.ImageResources;
32
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
33
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
34
import eu.etaxonomy.taxeditor.ui.mvc.AbstractCdmComposite;
35

    
36
/**
37
 * @author pplitzner
38
 * @date 16.06.2014
39
 *
40
 */
41
public class DateElement extends AbstractCdmComposite<DateElementController>  {
42

    
43
    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());
44
    private org.joda.time.DateTime initialDateTime;
45
    private Text textDate;
46
    private final Button openDateDialog;
47
    
48
    private static final String pattern = "yyyy-MM-dd HH:mm";
49
   
50

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

    
108
    			final DateTime calendar = new DateTime (dialog, SWT.CALENDAR | SWT.BORDER);
109
    			
110
    			final DateTime time = new DateTime (dialog, SWT.TIME | SWT.SHORT);
111
    			if (initialDateTime != null){
112
    				calendar.setDate(initialDateTime.getYear(), initialDateTime.getMonthOfYear() - 1, initialDateTime.getDayOfMonth());
113
    				time.setHours(initialDateTime.getHourOfDay());
114
        			time.setMinutes(initialDateTime.getMinuteOfHour());
115
        			time.setSeconds(initialDateTime.getSecondOfMinute());
116
    			}
117
    			
118

    
119
    			new Label (dialog, SWT.NONE);
120
    			new Label (dialog, SWT.NONE);
121
    			Button ok = new Button (dialog, SWT.PUSH);
122
    			ok.setText ("OK");
123
    			ok.setLayoutData(new GridData (SWT.FILL, SWT.CENTER, false, false));
124
    			ok.addSelectionListener (new SelectionAdapter() {
125
    	        	@Override
126
    	        	public void widgetSelected(SelectionEvent e){
127
    	        		setData(makeJodaFromSWT(calendar, time));
128
    	        		dialog.close ();
129
    				}
130
    			});
131
    			dialog.setDefaultButton (ok);
132
    			dialog.pack ();
133
    			dialog.open ();
134
    		}
135
        });
136
       
137
        toolkit.adapt(textDate, true, true);
138
    }
139

    
140
    @Override
141
    protected void initInternalController(CdmFormFactory formFactory, ICdmFormElement parentElement) {
142
        controller = new DateElementController(this, formFactory, parentElement, initialDateTime);
143
        formFactory.adapt(controller);
144
    }
145
    public Text getTextDate() {
146
        return textDate;
147
    }
148
    
149
   
150
    
151
	
152
    public static org.joda.time.DateTime makeJodaFromSWT(
153
	                                org.eclipse.swt.widgets.DateTime widget, 
154
	                                org.eclipse.swt.widgets.DateTime dateTime) {
155
		  //the first month of the year is 0			  
156
		  return new org.joda.time.DateTime(widget.getYear(),
157
	                        widget.getMonth() +1,
158
	                        widget.getDay(),
159
	                        dateTime.getHours(),
160
	                        dateTime.getMinutes(),
161
	                        dateTime.getSeconds());
162
	}
163

    
164
	public static void updateSWTwithJoda(
165
	                                org.eclipse.swt.widgets.DateTime widget,
166
	                                org.joda.time.DateTime dateTime) {
167
		  widget.setYear(dateTime.getYear());
168
		  widget.setMonth(dateTime.getMonthOfYear() - 1);
169
		  widget.setDay(dateTime.getDayOfMonth());
170
		  widget.setHours(dateTime.getHourOfDay());
171
		  widget.setMinutes(dateTime.getMinuteOfHour());
172
		  widget.setSeconds(dateTime.getSecondOfMinute());
173
	}
174
		
175
	public void setData (org.joda.time.DateTime data) {
176
			this.initialDateTime = data;
177
			this.controller.setDateTime(data);
178
			this.textDate.setText(initialDateTime.toString(pattern));
179
	}
180

    
181
}
(1-1/4)