Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.serv / org.gvsig.tools.swing.serv.field / src / main / java / org / gvsig / tools / swing / serv / field / component / JDateCalendarDynFieldComponent.java @ 650

History | View | Annotate | Download (6.02 KB)

1
package org.gvsig.tools.swing.serv.field.component;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.awt.event.FocusEvent;
6
import java.awt.event.FocusListener;
7
import java.util.Date;
8
import java.util.Locale;
9

    
10
import javax.swing.ImageIcon;
11
import javax.swing.JButton;
12
import javax.swing.JComponent;
13
import javax.swing.event.ChangeEvent;
14
import javax.swing.event.ChangeListener;
15

    
16
import org.gvsig.tools.dataTypes.DataTypes;
17
import org.gvsig.tools.dynobject.DynField;
18
import org.gvsig.tools.service.ServiceException;
19
import org.gvsig.tools.swing.api.ToolsSwingLocator;
20
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener;
21
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
22
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
23
import org.gvsig.tools.swing.api.usability.UsabilitySwingManager;
24
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
25
import org.gvsig.tools.swing.serv.field.component.date.DateCalendarPicker;
26
import org.gvsig.tools.swing.serv.field.component.date.JNullValueMuttableTextFieldComponent;
27
import org.gvsig.tools.swing.spi.AbstractJDynFieldComponent;
28

    
29
public class JDateCalendarDynFieldComponent extends AbstractJDynFieldComponent
30
                implements JDynFieldComponent, FocusListener, ChangeListener,
31
                ValueChangedListener, ActionListener {
32

    
33
        private static final String BTN_EMPTY_IMG_PATH = "editdelete.png";
34
        private static final String DATEPICKER_TITLE = "Choose a date:";
35

    
36
        private JButton jBtnChangeDate;
37
        private JNullValueMuttableTextFieldComponent dateFieldPanel;
38
        private Object oldTxt;
39

    
40
        // private Component dlg;
41
        private WindowManager windowManager;
42
        private DateCalendarPicker datePicker;
43
        private UsabilitySwingManager usabilityManager;
44

    
45
        public JDateCalendarDynFieldComponent(DynField definition,
46
                        ValueField valueField, boolean writable) throws ServiceException {
47
                super(definition, valueField, writable);
48
                windowManager = ToolsSwingLocator.getWindowManager();
49
                if (getDynField().getType() != DataTypes.DATE) {
50
                        this.getJBtnChangeDate().setVisible(false);
51
                }
52
        }
53

    
54
        public void actionPerformed(ActionEvent e) {
55
                JButton btn = (JButton) e.getSource();
56
                if (btn.getActionCommand().equals("BTN_OK")) {
57
                        setValue(getDatePicker().getSelectedDate());
58
                        this.fireValueChangedEvent();
59
                }
60
                close();
61
        }
62

    
63
        @Override
64
        protected void afterUI() {
65
                // TODO Auto-generated method stub
66

    
67
        }
68

    
69
        public JComponent asJComponent() {
70
                return getModel();
71
        }
72

    
73
        protected void close() {
74
                if (datePicker.isVisible()) {
75
                        datePicker.setVisible(false);
76
                }
77
        }
78

    
79
        protected DateCalendarPicker createCalendarPicker(Date date, Locale loc) {
80
                DateCalendarPicker datePicker = new DateCalendarPicker(this.getDate(),
81
                                loc);
82
                datePicker.setPreferredSize(new java.awt.Dimension(450, 410));
83
                return datePicker;
84
        }
85

    
86
        public void focusGained(FocusEvent e) {
87
                oldTxt = getValue();
88
                if (oldTxt == null) {
89
                        oldTxt = getDefaultValue();
90
                }
91
                setValue(oldTxt);
92
        }
93

    
94
        public void focusLost(FocusEvent e) {
95
                Object txt = getValue();
96
                if (txt == null) {
97
                        setValue(null);
98
                } else {
99
                        oldTxt = txt;
100
                        setValue(txt);
101
                }
102
        }
103

    
104
        protected ImageIcon getBtnEmptyImageIcon() {
105
                return new ImageIcon(
106
                                org.gvsig.tools.swing.serv.field.component.JNumberDynFieldComponent.class
107
                                                .getResource(BTN_EMPTY_IMG_PATH));
108
        }
109

    
110
        private Date getDate() {
111
                return (Date) getValue();
112
        }
113

    
114
        /**
115
         * This method initializes jButton
116
         * 
117
         * @return javax.swing.JButton
118
         */
119
        public JButton getJBtnChangeDate() {
120
                if (jBtnChangeDate == null) { 
121
                        jBtnChangeDate = new JButton();
122
                        jBtnChangeDate.setText("...");
123
                        jBtnChangeDate.setPreferredSize(new java.awt.Dimension(26, 26));
124
                        jBtnChangeDate.addActionListener(new ActionListener() {
125

    
126
                                public void actionPerformed(ActionEvent event) {
127
                                        showDialog(getDatePicker());
128
                                }
129

    
130
                        });
131
                }
132
                return jBtnChangeDate;
133
        }
134

    
135
        private JNullValueMuttableTextFieldComponent getModel() {
136
                return dateFieldPanel;
137
        }
138

    
139
        @Override
140
        public Object getValue() {
141
                return this.getModel().getTextFieldValue();
142
        }
143

    
144
        public void handleValueChanged(JDynFieldComponent jDynFieldComponent) {
145
                this.fireValueChangedEvent();
146
        }
147

    
148
        public DateCalendarPicker getDatePicker() {
149
                if (datePicker == null) {
150
                        datePicker = createCalendarPicker(this.getDate(), getLocale());
151
                        datePicker.addButtonsActionListener(this);
152
                }
153
                return datePicker;
154
        }
155

    
156
        @Override
157
        protected void initData() {
158
                usabilityManager = ToolsSwingLocator.getUsabilitySwingManager();
159
        }
160

    
161
        @Override
162
        protected void initUI() {
163
                this.dateFieldPanel = new JNullValueMuttableTextFieldComponent(this,
164
                                this.getInitialValue(), Locale.getDefault(),
165
                                getBtnEmptyImageIcon());
166
                this.dateFieldPanel.add(this.getJBtnChangeDate());
167
                this.dateFieldPanel.addValueChangedListener(this);
168
        }
169

    
170
        private Locale getLocale() {
171
                return getModel().getLocale();
172
        }
173

    
174
        @Override
175
        public boolean isValid() {
176
                Date date = getDate();
177
                if ((date == null) && (this.getDynField().isMandatory())) {
178
                        return false;
179
                }
180
                return true;
181

    
182
        }
183

    
184
        public void requestFocus() {
185
                this.getModel().requestFocus();
186
                this.fireValueChangedEvent();
187
        }
188

    
189
        public void setEnabled(boolean isEnabled) {
190
                getModel().setEnabled(isEnabled);
191
        }
192

    
193
        @Override
194
        protected void setJDynFieldComponentListeners() {
195
        }
196

    
197
        @Override
198
        protected void setNonNullValue(Object value) {
199
                this.getModel().setValue(value);
200
        }
201

    
202
        @Override
203
        protected void setNullValue() {
204
                this.getModel().setValue(null);
205
        }
206

    
207
        @Override
208
        protected void setReadOnly() {
209
                this.getModel().setEditable(false);
210
                this.getJBtnChangeDate().setVisible(false);
211
        }
212

    
213
        protected void showDialog(DateCalendarPicker datePicker) {
214
                ToolsSwingLocator.getTaskStatusSwingManager();
215
                datePicker.setVisible(true);
216
                datePicker.setSelectedDate(this.getDate());
217
                windowManager.showWindow(datePicker, translate(DATEPICKER_TITLE),
218
                                WindowManager.MODE.WINDOW);
219
        }
220

    
221
        public void stateChanged(ChangeEvent e) {
222
                this.fireValueChangedEvent();
223
        }
224
}