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 / date / JDateCalendarDynFieldComponent.java @ 306

History | View | Annotate | Download (6.76 KB)

1
package org.gvsig.tools.swing.serv.field.component.date;
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.Calendar;
8
import java.util.Date;
9
import java.util.Locale;
10

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

    
18
import org.freixas.jcalendar.DateEvent;
19

    
20
import org.gvsig.tools.dataTypes.DataTypes;
21
import org.gvsig.tools.service.ServiceException;
22
import org.gvsig.tools.swing.api.dynobject.ValueChangedListener;
23
import org.gvsig.tools.swing.api.dynobject.dynfield.JDynFieldComponent;
24
import org.gvsig.tools.swing.api.dynobject.dynfield.ValueField;
25
import org.gvsig.tools.swing.serv.field.component.JNullValueMuttableTextField;
26
import org.gvsig.tools.swing.spi.AbstractJDynFieldComponent;
27

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

    
32
        private static final String BTN_EMPTY_IMG_PATH = "editdelete.png";
33

    
34
    private JButton jBtnChangeDate;
35
    // private JNullSpinner dateField;
36
    private DateCalendarPicker datePicker;
37
    private JDialog dlg;
38
    // private JPanel pane;
39
    private JNullValueMuttableTextField dateFieldPanel;
40
    private Object oldTxt;
41

    
42
        public JDateCalendarDynFieldComponent(ValueField valueField)
43
        throws ServiceException {
44
                super(valueField);
45
        if (getDynField().getType() != DataTypes.DATE) {
46
            this.getJBtnChangeDate().setVisible(false);
47
        }
48
    }
49

    
50
    public void actionPerformed(ActionEvent e) {
51
        JButton btn = (JButton) e.getSource();
52
        if (btn.getActionCommand().equals("BTN_OK")) {
53
            if (dlg != null) {
54
                setValue(datePicker.getSelectedDate());
55
            }
56
        }
57
        if (dlg != null) {
58
            dlg.setVisible(false);
59
        }
60
        this.fireValueChangedEvent();
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
        dlg.setVisible(false);
75
    }
76

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

    
84
    public void dateChanged(DateEvent dateEvent) {
85
        Calendar cal = dateEvent.getSelectedDate();
86
        if (cal != null) {
87
            this.getModel().setValue(null);
88
        } else {
89
            this.getModel().setValue(cal.getTime());
90
        }
91
        close();
92
        this.fireValueChangedEvent();
93
    }
94

    
95
    public void focusGained(FocusEvent e) {
96
        oldTxt = getValue();
97
        this.fireValueChangedEvent();
98
    }
99

    
100
    public void focusLost(FocusEvent e) {
101
        Object txt = getValue();
102
        Date date = getDate();
103
        if (date == null) {
104
            if (!((txt == null) || (txt.equals("")))) {
105
                setValue(oldTxt);
106
            }
107
        } else {
108
            setValue(txt);
109
            oldTxt = txt;
110
        }
111
        this.fireValueChangedEvent();
112
    }
113

    
114
    protected ImageIcon getBtnEmptyImageIcon() {
115
                return new ImageIcon(this.getClass().getResource(BTN_EMPTY_IMG_PATH));
116
    }
117

    
118
    private Date getDate() {
119
        return (Date) getValue();
120
    }
121

    
122
    /**
123
     * This method initializes jButton
124
     * 
125
     * @return javax.swing.JButton
126
     */
127
    public JButton getJBtnChangeDate() {
128
        if (jBtnChangeDate == null) {
129
            jBtnChangeDate = new JButton();
130
            jBtnChangeDate.setText("..."); //$NON-NLS-1$
131
            jBtnChangeDate.setPreferredSize(new java.awt.Dimension(26, 26));
132
        }
133
        return jBtnChangeDate;
134
    }
135

    
136
    private JNullValueMuttableTextField getModel() {
137
        return dateFieldPanel;
138
    }
139

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

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

    
149
    private void initBtnChangeDate(Locale loc) {
150
        if (datePicker == null) {
151
            datePicker = createCalendarPicker(this.getDate(), loc);
152
            // datePicker.setSize(datePicker.getPreferredSize());
153
            datePicker.addButtonsActionListener(this);
154
        }
155
        getJBtnChangeDate().addActionListener(new ActionListener() {
156

    
157
            public void actionPerformed(ActionEvent e) {
158
                datePicker.setSelectedDate(getDate());
159
                showDialog(datePicker);
160
            }
161

    
162
        });
163
    }
164

    
165
    @Override
166
    protected void initData() {
167
        // TODO Auto-generated method stub
168

    
169
    }
170

    
171
    @Override
172
    protected void initUI() {
173
        this.dateFieldPanel =
174
            new JNullValueMuttableTextField(this.getDynField(), this
175
                .getInitialValue(), Locale.getDefault(), getBtnEmptyImageIcon());
176
        // this.dateFieldPanel.addEmptyButtonActionListener(this);
177
        this.dateFieldPanel.add(this.getJBtnChangeDate());
178
        this.dateFieldPanel.addValueChangedListener(this);
179
        initBtnChangeDate(getModel().getLocale());
180
    }
181

    
182
    @Override
183
    public boolean isValid() {
184
        Date date = getDate();
185
        if ((date == null) && (this.getDynField().isMandatory())) {
186
            return false;
187
        }
188
        return true;
189

    
190
    }
191

    
192
    public void requestFocus() {
193
        this.getModel().requestFocus();
194
        this.fireValueChangedEvent();
195
    }
196

    
197
    public void setEnabled(boolean isEnabled) {
198
        getModel().setEnabled(isEnabled);
199
    }
200

    
201
    @Override
202
    protected void setJDynFieldComponentListeners() {
203
    }
204

    
205
    @Override
206
    protected void setNonNullValue(Object value) {
207
        this.getModel().setValue(value);
208
    }
209

    
210
    // public void stateChanged(ChangeEvent e) {
211
    // this.fireValueChangedEvent();
212
    // }
213

    
214
    @Override
215
    protected void setNullValue() {
216
        this.getModel().setValue(null);
217
    }
218

    
219
    @Override
220
    protected void setReadOnly() {
221
        this.getModel().setEditable(false);
222
        this.getJBtnChangeDate().setVisible(false);
223
    }
224

    
225
    protected void showDialog(DateCalendarPicker datePicker) {
226
        dlg = new JDialog();
227
        dlg.add(datePicker);
228
        dlg.setSize(datePicker.getPreferredSize());
229
        dlg.setVisible(true);
230
    }
231

    
232
    public void stateChanged(ChangeEvent e) {
233
        this.fireValueChangedEvent();
234
    }
235
}