1 package tim.prune.load.babel;
3 import java.awt.BorderLayout;
4 import java.awt.Component;
5 import java.awt.GridLayout;
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;
17 import tim.prune.I18nManager;
18 import tim.prune.gui.WholeNumberField;
21 * Discard filter for GPSBabel
23 public class DiscardFilter extends FilterDefinition
26 public DiscardFilter(AddFilterDialog inFilterDialog)
28 super(inFilterDialog);
32 private WholeNumberField _hdopField = null;
33 private WholeNumberField _vdopField = null;
34 private JComboBox<String> _combineDopsCombo = null;
35 private WholeNumberField _numSatsField = null;
36 private JCheckBox _noFixCheckbox = null;
37 private JCheckBox _unknownFixCheckbox = null;
40 /** @return filter name */
41 protected String getFilterName() {
45 /** Make the panel contents */
46 protected void makePanelContents()
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
56 JPanel boxPanel2 = new JPanel();
57 boxPanel2.setLayout(new BoxLayout(boxPanel2, BoxLayout.Y_AXIS));
59 JPanel dopPanel = new JPanel();
60 dopPanel.setBorder(BorderFactory.createCompoundBorder(
61 BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4))
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<String>(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);
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);
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
91 boxPanel2.setAlignmentX(Component.LEFT_ALIGNMENT);
92 boxPanel.add(boxPanel2);
93 add(boxPanel, BorderLayout.NORTH);
97 * @return true if the filters are valid
99 public boolean isFilterValid()
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;
110 * @return filter parameters as a string, or null
112 protected String getParameters()
114 if (!isFilterValid()) return null;
115 StringBuilder builder = new StringBuilder();
117 final int hdop = _hdopField.getValue();
119 builder.append(",hdop=").append(hdop);
121 final int vdop = _vdopField.getValue();
124 builder.append(",vdop=").append(vdop);
125 if (hdop > 0 && _combineDopsCombo.getSelectedIndex() == 0) {
126 builder.append(",hdopandvdop");
129 // number of satellites
130 final int numSats = _numSatsField.getValue();
133 builder.append(",sat=").append(numSats);
136 if (_noFixCheckbox.isSelected()) {
137 builder.append(",fixnone");
139 if (_unknownFixCheckbox.isSelected()) {
140 builder.append(",fixunknown");
142 return builder.toString();