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 | 567 | cmartin | package org.gvsig.tools.swing.serv.field.component; |
---|---|---|---|
2 | 266 | cmartin | |
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 | 296 | cmartin | import javax.swing.ImageIcon; |
11 | 266 | cmartin | import javax.swing.JButton; |
12 | import javax.swing.JComponent; |
||
13 | 283 | cmartin | import javax.swing.event.ChangeEvent; |
14 | import javax.swing.event.ChangeListener; |
||
15 | 266 | cmartin | |
16 | import org.gvsig.tools.dataTypes.DataTypes; |
||
17 | 542 | cmartin | import org.gvsig.tools.dynobject.DynField; |
18 | 266 | cmartin | import org.gvsig.tools.service.ServiceException; |
19 | 505 | cmartin | import org.gvsig.tools.swing.api.ToolsSwingLocator; |
20 | 296 | cmartin | import org.gvsig.tools.swing.api.dynobject.ValueChangedListener; |
21 | 266 | cmartin | import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent; |
22 | import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField; |
||
23 | 567 | cmartin | import org.gvsig.tools.swing.api.usability.UsabilitySwingManager; |
24 | 505 | cmartin | import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
25 | 567 | cmartin | import org.gvsig.tools.swing.serv.field.component.date.DateCalendarPicker; |
26 | import org.gvsig.tools.swing.serv.field.component.date.JNullValueMuttableTextFieldComponent; |
||
27 | 266 | cmartin | import org.gvsig.tools.swing.spi.AbstractJDynFieldComponent; |
28 | |||
29 | 270 | cmartin | public class JDateCalendarDynFieldComponent extends AbstractJDynFieldComponent |
30 | 567 | cmartin | implements JDynFieldComponent, FocusListener, ChangeListener, |
31 | ValueChangedListener, ActionListener {
|
||
32 | 266 | cmartin | |
33 | 477 | jjdelcerro | private static final String BTN_EMPTY_IMG_PATH = "editdelete.png"; |
34 | 567 | cmartin | private static final String DATEPICKER_TITLE = "Choose a date:"; |
35 | 298 | cmartin | |
36 | 567 | cmartin | private JButton jBtnChangeDate; |
37 | private JNullValueMuttableTextFieldComponent dateFieldPanel;
|
||
38 | private Object oldTxt; |
||
39 | 266 | cmartin | |
40 | 567 | cmartin | // private Component dlg;
|
41 | private WindowManager windowManager;
|
||
42 | private DateCalendarPicker datePicker;
|
||
43 | private UsabilitySwingManager usabilityManager;
|
||
44 | 505 | cmartin | |
45 | 567 | cmartin | 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 | 266 | cmartin | |
54 | 567 | cmartin | 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 | 266 | cmartin | |
63 | 567 | cmartin | @Override
|
64 | protected void afterUI() { |
||
65 | // TODO Auto-generated method stub
|
||
66 | 298 | cmartin | |
67 | 567 | cmartin | } |
68 | 266 | cmartin | |
69 | 567 | cmartin | public JComponent asJComponent() { |
70 | return getModel();
|
||
71 | } |
||
72 | 266 | cmartin | |
73 | 567 | cmartin | protected void close() { |
74 | if (datePicker.isVisible()) {
|
||
75 | datePicker.setVisible(false);
|
||
76 | } |
||
77 | } |
||
78 | 266 | cmartin | |
79 | 567 | cmartin | 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 | 266 | cmartin | |
86 | 567 | cmartin | public void focusGained(FocusEvent e) { |
87 | oldTxt = getValue(); |
||
88 | if (oldTxt == null) { |
||
89 | oldTxt = getDefaultValue(); |
||
90 | } |
||
91 | setValue(oldTxt); |
||
92 | } |
||
93 | 271 | cmartin | |
94 | 567 | cmartin | 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 | 266 | cmartin | |
104 | 567 | cmartin | 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 | 266 | cmartin | |
110 | 567 | cmartin | private Date getDate() { |
111 | return (Date) getValue(); |
||
112 | } |
||
113 | 266 | cmartin | |
114 | 567 | cmartin | /**
|
115 | * This method initializes jButton
|
||
116 | *
|
||
117 | * @return javax.swing.JButton
|
||
118 | */
|
||
119 | public JButton getJBtnChangeDate() { |
||
120 | 650 | cmartin | if (jBtnChangeDate == null) { |
121 | 567 | cmartin | jBtnChangeDate = new JButton(); |
122 | 650 | cmartin | jBtnChangeDate.setText("...");
|
123 | 567 | cmartin | jBtnChangeDate.setPreferredSize(new java.awt.Dimension(26, 26)); |
124 | jBtnChangeDate.addActionListener(new ActionListener() { |
||
125 | 266 | cmartin | |
126 | 567 | cmartin | public void actionPerformed(ActionEvent event) { |
127 | showDialog(getDatePicker()); |
||
128 | } |
||
129 | 505 | cmartin | |
130 | 567 | cmartin | }); |
131 | } |
||
132 | return jBtnChangeDate;
|
||
133 | } |
||
134 | 298 | cmartin | |
135 | 567 | cmartin | private JNullValueMuttableTextFieldComponent getModel() {
|
136 | return dateFieldPanel;
|
||
137 | } |
||
138 | 298 | cmartin | |
139 | 567 | cmartin | @Override
|
140 | public Object getValue() { |
||
141 | return this.getModel().getTextFieldValue(); |
||
142 | } |
||
143 | 266 | cmartin | |
144 | 567 | cmartin | public void handleValueChanged(JDynFieldComponent jDynFieldComponent) { |
145 | this.fireValueChangedEvent();
|
||
146 | } |
||
147 | 266 | cmartin | |
148 | 567 | cmartin | public DateCalendarPicker getDatePicker() {
|
149 | if (datePicker == null) { |
||
150 | datePicker = createCalendarPicker(this.getDate(), getLocale());
|
||
151 | datePicker.addButtonsActionListener(this);
|
||
152 | } |
||
153 | return datePicker;
|
||
154 | } |
||
155 | 298 | cmartin | |
156 | 567 | cmartin | @Override
|
157 | protected void initData() { |
||
158 | usabilityManager = ToolsSwingLocator.getUsabilitySwingManager(); |
||
159 | } |
||
160 | 298 | cmartin | |
161 | 567 | cmartin | @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 | 298 | cmartin | |
170 | 567 | cmartin | private Locale getLocale() { |
171 | return getModel().getLocale();
|
||
172 | } |
||
173 | 266 | cmartin | |
174 | 567 | cmartin | @Override
|
175 | public boolean isValid() { |
||
176 | Date date = getDate();
|
||
177 | if ((date == null) && (this.getDynField().isMandatory())) { |
||
178 | return false; |
||
179 | } |
||
180 | return true; |
||
181 | 266 | cmartin | |
182 | 567 | cmartin | } |
183 | 266 | cmartin | |
184 | 567 | cmartin | public void requestFocus() { |
185 | this.getModel().requestFocus();
|
||
186 | this.fireValueChangedEvent();
|
||
187 | } |
||
188 | 298 | cmartin | |
189 | 567 | cmartin | public void setEnabled(boolean isEnabled) { |
190 | getModel().setEnabled(isEnabled); |
||
191 | } |
||
192 | 266 | cmartin | |
193 | 567 | cmartin | @Override
|
194 | protected void setJDynFieldComponentListeners() { |
||
195 | } |
||
196 | 266 | cmartin | |
197 | 567 | cmartin | @Override
|
198 | protected void setNonNullValue(Object value) { |
||
199 | this.getModel().setValue(value);
|
||
200 | } |
||
201 | 266 | cmartin | |
202 | 567 | cmartin | @Override
|
203 | protected void setNullValue() { |
||
204 | this.getModel().setValue(null); |
||
205 | } |
||
206 | 266 | cmartin | |
207 | 567 | cmartin | @Override
|
208 | protected void setReadOnly() { |
||
209 | this.getModel().setEditable(false); |
||
210 | this.getJBtnChangeDate().setVisible(false); |
||
211 | } |
||
212 | 266 | cmartin | |
213 | 567 | cmartin | 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 | 270 | cmartin | |
221 | 567 | cmartin | public void stateChanged(ChangeEvent e) { |
222 | this.fireValueChangedEvent();
|
||
223 | } |
||
224 | 266 | cmartin | } |