]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/load/babel/DiscardFilter.java
f310031fad6810e7191892263f1b7f7db1e6b048
[GpsPrune.git] / tim / prune / load / babel / DiscardFilter.java
1 package tim.prune.load.babel;
2
3 import java.awt.BorderLayout;
4 import java.awt.Component;
5 import java.awt.GridLayout;
6
7 import javax.swing.BorderFactory;
8 import javax.swing.Box;
9 import javax.swing.BoxLayout;
10 import javax.swing.JCheckBox;
11 import javax.swing.JComboBox;
12 import javax.swing.JLabel;
13 import javax.swing.JPanel;
14 import javax.swing.SwingConstants;
15 import javax.swing.border.EtchedBorder;
16
17 import tim.prune.I18nManager;
18 import tim.prune.gui.WholeNumberField;
19
20 /**
21  * Discard filter for GPSBabel
22  */
23 public class DiscardFilter extends FilterDefinition
24 {
25         /** Constructor */
26         public DiscardFilter(AddFilterDialog inFilterDialog)
27         {
28                 super(inFilterDialog);
29                 makePanelContents();
30         }
31
32         private WholeNumberField _hdopField = null;
33         private WholeNumberField _vdopField = null;
34         private JComboBox _combineDopsCombo = null;
35         private WholeNumberField _numSatsField = null;
36         private JCheckBox _noFixCheckbox = null;
37         private JCheckBox _unknownFixCheckbox = null;
38
39
40         /** @return filter name */
41         protected String getFilterName() {
42                 return "discard";
43         }
44
45         /** Make the panel contents */
46         protected void makePanelContents()
47         {
48                 setLayout(new BorderLayout());
49                 JPanel boxPanel = new JPanel();
50                 boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.Y_AXIS));
51                 JLabel topLabel = new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.intro"));
52                 topLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
53                 boxPanel.add(topLabel);
54                 boxPanel.add(Box.createVerticalStrut(9)); // spacer
55
56                 JPanel boxPanel2 = new JPanel();
57                 boxPanel2.setLayout(new BoxLayout(boxPanel2, BoxLayout.Y_AXIS));
58                 // Panel for dops
59                 JPanel dopPanel = new JPanel();
60                 dopPanel.setBorder(BorderFactory.createCompoundBorder(
61                         BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4))
62                 );
63                 dopPanel.setLayout(new GridLayout(0, 3, 4, 2));
64                 dopPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.hdop"), SwingConstants.RIGHT));
65                 _hdopField = new WholeNumberField(2);
66                 _hdopField.addKeyListener(_paramChangeListener);
67                 dopPanel.add(_hdopField);
68                 _combineDopsCombo = new JComboBox(new String[] {I18nManager.getText("logic.and"), I18nManager.getText("logic.or")});
69                 dopPanel.add(_combineDopsCombo);
70                 dopPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.vdop"), SwingConstants.RIGHT));
71                 _vdopField = new WholeNumberField(2);
72                 _vdopField.addKeyListener(_paramChangeListener);
73                 dopPanel.add(_vdopField);
74                 boxPanel2.add(dopPanel);
75
76                 // Number of satellites
77                 JPanel satPanel = new JPanel();
78                 satPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.numsats")));
79                 _numSatsField = new WholeNumberField(2);
80                 _numSatsField.addKeyListener(_paramChangeListener);
81                 satPanel.add(_numSatsField);
82                 boxPanel2.add(satPanel);
83
84                 // Checkboxes for no fix and unknown fix
85                 _noFixCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsbabel.filter.discard.nofix"));
86                 boxPanel2.add(_noFixCheckbox);
87                 _unknownFixCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsbabel.filter.discard.unknownfix"));
88                 boxPanel2.add(_unknownFixCheckbox);
89                 boxPanel2.add(Box.createVerticalStrut(9)); // spacer
90
91                 boxPanel2.setAlignmentX(Component.LEFT_ALIGNMENT);
92                 boxPanel.add(boxPanel2);
93                 add(boxPanel, BorderLayout.NORTH);
94 }
95
96         /**
97          * @return true if the filters are valid
98          */
99         public boolean isFilterValid()
100         {
101                 // If values are entered, insist that they're positive (0 not valid)
102                 if (_hdopField.getText() != null && _hdopField.getText().length() > 0 && _hdopField.getValue() <= 0) {return false;}
103                 if (_vdopField.getText() != null && _vdopField.getText().length() > 0 && _vdopField.getValue() <= 0) {return false;}
104                 if (_numSatsField.getText() != null && _numSatsField.getText().length() > 0 && _numSatsField.getValue() <= 0) {return false;}
105                 // Insist that at least one value has been entered
106                 return _hdopField.getValue() > 0 || _vdopField.getValue() > 0 || _numSatsField.getValue() > 0;
107         }
108
109         /**
110          * @return filter parameters as a string, or null
111          */
112         protected String getParameters()
113         {
114                 if (!isFilterValid()) return null;
115                 StringBuilder builder = new StringBuilder();
116                 // hdop and vdop
117                 final int hdop = _hdopField.getValue();
118                 if (hdop > 0) {
119                         builder.append(",hdop=").append(hdop);
120                 }
121                 final int vdop = _vdopField.getValue();
122                 if (vdop > 0)
123                 {
124                         builder.append(",vdop=").append(vdop);
125                         if (hdop > 0 && _combineDopsCombo.getSelectedIndex() == 0) {
126                                 builder.append(",hdopandvdop");
127                         }
128                 }
129                 // number of satellites
130                 final int numSats = _numSatsField.getValue();
131                 if (numSats > 0)
132                 {
133                         builder.append(",sat=").append(numSats);
134                 }
135                 // checkboxes
136                 if (_noFixCheckbox.isSelected()) {
137                         builder.append(",fixnone");
138                 }
139                 if (_unknownFixCheckbox.isSelected()) {
140                         builder.append(",fixunknown");
141                 }
142                 return builder.toString();
143         }
144 }