source: josm/trunk/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java@ 8378

Last change on this file since 8378 was 8378, checked in by Don-vip, 9 years ago

fix copyright/license headers globally

  • Property svn:eol-style set to native
File size: 4.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.layer.gpx;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.GridBagLayout;
8import java.awt.event.ActionEvent;
9import java.awt.event.ActionListener;
10import java.util.Date;
11import java.util.GregorianCalendar;
12
13import javax.swing.JCheckBox;
14import javax.swing.JPanel;
15import javax.swing.Timer;
16import javax.swing.event.ChangeEvent;
17import javax.swing.event.ChangeListener;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.gui.layer.GpxLayer;
21import org.openstreetmap.josm.gui.widgets.DateEditorWithSlider;
22import org.openstreetmap.josm.tools.GBC;
23
24public class DateFilterPanel extends JPanel {
25 private DateEditorWithSlider dateFrom = new DateEditorWithSlider(tr("From"));
26 private DateEditorWithSlider dateTo = new DateEditorWithSlider(tr("To"));
27 private JCheckBox noTimestampCb = new JCheckBox(tr("No timestamp"));
28 private transient GpxLayer layer;
29
30 private transient ActionListener filterAppliedListener;
31
32 private final String prefDate0;
33 private final String prefDateMin;
34 private final String prefDateMax;
35
36 /**
37 * Create the panel to filter tracks on GPX layer @param layer by date
38 * Preferences will be stored in @param preferencePrefix
39 * If @param enabled = true, the the panel is created as active and filtering occurs immediately.
40 */
41 public DateFilterPanel(GpxLayer layer, String preferencePrefix, boolean enabled) {
42 super(new GridBagLayout());
43 prefDate0 = preferencePrefix+".showzerotimestamp";
44 prefDateMin = preferencePrefix+".mintime";
45 prefDateMax = preferencePrefix+".maxtime";
46 this.layer = layer;
47
48 final Date startTime, endTime;
49 Date[] bounds = layer.data.getMinMaxTimeForAllTracks();
50 startTime = (bounds==null) ? new GregorianCalendar(2000, 1, 1).getTime():bounds[0];
51 endTime = (bounds==null) ? new Date() : bounds[1];
52
53 dateFrom.setDate(startTime);
54 dateTo.setDate(endTime);
55 dateFrom.setRange(startTime, endTime);
56 dateTo.setRange(startTime, endTime);
57
58 add(noTimestampCb, GBC.std().grid(1,1).insets(0, 0, 5, 0));
59 add(dateFrom, GBC.std().grid(2,1).fill(GBC.HORIZONTAL));
60 add(dateTo, GBC.eol().grid(3,1).fill(GBC.HORIZONTAL));
61
62 setEnabled(enabled);
63
64 dateFrom.addDateListener(changeListener);
65 dateTo.addDateListener(changeListener);
66 noTimestampCb.addChangeListener(changeListener);
67 }
68
69 private transient ChangeListener changeListener = new ChangeListener() {
70 @Override public void stateChanged(ChangeEvent e) {
71 if (isEnabled()) applyFilterWithDelay();
72 }
73 };
74
75 private Timer t = new Timer(200 , new ActionListener() {
76 @Override public void actionPerformed(ActionEvent e) {
77 applyFilter();
78 }
79 });
80
81 /**
82 * Do filtering but little bit later (to reduce cpu load)
83 */
84 public void applyFilterWithDelay() {
85 if (t.isRunning()) {
86 t.restart();
87 } else {
88 t.start();
89 }
90 }
91
92 public void applyFilter() {
93 t.stop();
94 filterTracksByDate();
95 if (filterAppliedListener!=null)
96 filterAppliedListener.actionPerformed(null);
97 }
98
99 /**
100 * Called by other components when it is correct time to save date filtering parameters
101 */
102 public void saveInPrefs() {
103 Main.pref.putLong(prefDateMin, dateFrom.getDate().getTime());
104 Main.pref.putLong(prefDateMax, dateTo.getDate().getTime());
105 Main.pref.put(prefDate0, noTimestampCb.isSelected());
106 }
107
108 /**
109 * If possible, load date ragne and "zero timestamp" option from preferences
110 * Called by other components when it is needed.
111 */
112 public void loadFromPrefs() {
113 long t1 =Main.pref.getLong(prefDateMin, 0);
114 if (t1!=0) dateFrom.setDate(new Date(t1));
115 long t2 =Main.pref.getLong(prefDateMax, 0);
116 if (t2!=0) dateTo.setDate(new Date(t2));
117 noTimestampCb.setSelected(Main.pref.getBoolean(prefDate0, false));
118 }
119
120 public void setFilterAppliedListener(ActionListener filterAppliedListener) {
121 this.filterAppliedListener = filterAppliedListener;
122 }
123
124 private void filterTracksByDate() {
125 Date from = dateFrom.getDate();
126 Date to = dateTo.getDate();
127 layer.filterTracksByDate(from, to, noTimestampCb.isSelected());
128 }
129
130 @Override
131 public final void setEnabled(boolean enabled) {
132 super.setEnabled(enabled);
133 for (Component c: getComponents()) {
134 c.setEnabled(enabled);
135 }
136 }
137}
Note: See TracBrowser for help on using the repository browser.