Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / pickercontroller / DatePickerControllerImpl.java @ 1746

History | View | Annotate | Download (3.96 KB)

1
package org.gvsig.tools.swing.impl.pickercontroller;
2

    
3
import static java.awt.Component.RIGHT_ALIGNMENT;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.net.URL;
7
import java.util.Date;
8
import javax.swing.ImageIcon;
9
import javax.swing.JButton;
10
import javax.swing.JPopupMenu;
11
import javax.swing.JTextField;
12
import org.apache.commons.lang3.mutable.Mutable;
13
import org.apache.commons.lang3.mutable.MutableObject;
14
import org.freixas.jcalendar.DateEvent;
15
import org.freixas.jcalendar.DateListener;
16
import org.freixas.jcalendar.JCalendar;
17
import org.gvsig.tools.dataTypes.DataTypes;
18
import org.gvsig.tools.swing.api.ToolsSwingLocator;
19
import org.gvsig.tools.swing.api.pickercontroller.AbstractPickerController;
20
import org.gvsig.tools.swing.api.pickercontroller.DatePickerController;
21
import org.gvsig.tools.swing.icontheme.IconTheme;
22
import org.gvsig.tools.swing.icontheme.IconThemeManager;
23

    
24
/**
25
 *
26
 * @author jjdelcerro
27
 */
28
public class DatePickerControllerImpl 
29
        extends AbstractPickerController<Date> 
30
        implements DatePickerController
31
    {
32
    
33
    private final JButton btnDate;
34
    private final JTextField txtDate;
35
    private final Mutable<Date> value;
36
    private JCalendar jcalendar;
37

    
38
    public static void selfRegister() {
39
        URL imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/picker/picker-date.png");
40
        if (imageResource != null) {
41
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
42
            IconTheme theme = iconThemeManager.getCurrent();
43
            ImageIcon icon = new ImageIcon(imageResource);
44
            theme.registerDefault("tools", "picker", "picker-date", icon, imageResource);
45
        }
46
    }
47
    
48
    public DatePickerControllerImpl(JTextField txtDate, JButton btnDate) {
49
        this.value = new MutableObject<>(new Date());
50
        this.txtDate = txtDate;
51
        this.btnDate = btnDate;
52
        this.txtDate.setAlignmentX(RIGHT_ALIGNMENT);
53
        this.txtDate.setEditable(false);
54
        
55
        this.btnDate.setIcon(this.getIcon("picker-color"));
56
        this.btnDate.setText("");
57
        
58
        this.btnDate.addActionListener(new ActionListener() {
59
            @Override
60
            public void actionPerformed(ActionEvent e) {
61
                doShowCalendar();
62
            }
63
        });
64
        this.txtDate.setEditable(false);
65
    }
66

    
67
    @Override
68
    public boolean isEmpty() {
69
        return this.value.getValue()==null;
70
    }
71

    
72
    @Override
73
    public Date get() {
74
        return this.value.getValue();
75
    }
76

    
77
    @Override
78
    public void set(Date date) {
79
        this.value.setValue(date);
80
        this.txtDate.setText(date.toString());
81
    }
82

    
83
    @Override
84
    public void setEnabled(boolean enabled) {
85
        this.btnDate.setEnabled(enabled);
86
        this.txtDate.setEnabled(enabled);
87
    }
88

    
89
    @Override
90
    public boolean isEnabled() {
91
        return this.btnDate.isEnabled();
92
    }
93

    
94
    private void doShowCalendar() {
95
        if( !this.isEditable() ) {
96
            return;
97
        }
98
        JPopupMenu menu = new JPopupMenu();
99
        menu.add(getJCalendar());
100
        Date v = this.value.getValue();
101
        if (v != null) {
102
            getJCalendar().setDate(v);
103
        }
104
        menu.show(this.txtDate, 0, this.txtDate.getY() + this.txtDate.getPreferredSize().height);
105
        this.set(getJCalendar().getDate());
106
        this.fireChangeEvent();
107
    }
108

    
109
    protected JCalendar getJCalendar() {
110
        if (this.jcalendar == null) {
111
            this.jcalendar = new JCalendar();
112
            this.jcalendar.addDateListener(new DateListener() {
113
                @Override
114
                public void dateChanged(DateEvent arg0) {
115
                    set(getJCalendar().getDate());
116
                    fireChangeEvent();
117
                }
118
            });
119
        }
120
        return (JCalendar) this.jcalendar;
121
    }
122

    
123
    @Override
124
    public void coerceAndSet(Object value) {
125
        this.set((Date) this.coerce(DataTypes.DATE, value, new Date()));
126
    }
127
    
128
}