X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fload%2Fbabel%2FDiscardFilter.java;fp=src%2Ftim%2Fprune%2Fload%2Fbabel%2FDiscardFilter.java;h=22f36f72e87a3b1a820494d1f27373cb54740777;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/load/babel/DiscardFilter.java b/src/tim/prune/load/babel/DiscardFilter.java new file mode 100644 index 0000000..22f36f7 --- /dev/null +++ b/src/tim/prune/load/babel/DiscardFilter.java @@ -0,0 +1,144 @@ +package tim.prune.load.babel; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.EtchedBorder; + +import tim.prune.I18nManager; +import tim.prune.gui.WholeNumberField; + +/** + * Discard filter for GPSBabel + */ +public class DiscardFilter extends FilterDefinition +{ + /** Constructor */ + public DiscardFilter(AddFilterDialog inFilterDialog) + { + super(inFilterDialog); + makePanelContents(); + } + + private WholeNumberField _hdopField = null; + private WholeNumberField _vdopField = null; + private JComboBox _combineDopsCombo = null; + private WholeNumberField _numSatsField = null; + private JCheckBox _noFixCheckbox = null; + private JCheckBox _unknownFixCheckbox = null; + + + /** @return filter name */ + protected String getFilterName() { + return "discard"; + } + + /** Make the panel contents */ + protected void makePanelContents() + { + setLayout(new BorderLayout()); + JPanel boxPanel = new JPanel(); + boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.Y_AXIS)); + JLabel topLabel = new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.intro")); + topLabel.setAlignmentX(Component.LEFT_ALIGNMENT); + boxPanel.add(topLabel); + boxPanel.add(Box.createVerticalStrut(9)); // spacer + + JPanel boxPanel2 = new JPanel(); + boxPanel2.setLayout(new BoxLayout(boxPanel2, BoxLayout.Y_AXIS)); + // Panel for dops + JPanel dopPanel = new JPanel(); + dopPanel.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4)) + ); + dopPanel.setLayout(new GridLayout(0, 3, 4, 2)); + dopPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.hdop"), SwingConstants.RIGHT)); + _hdopField = new WholeNumberField(2); + _hdopField.addKeyListener(_paramChangeListener); + dopPanel.add(_hdopField); + _combineDopsCombo = new JComboBox(new String[] {I18nManager.getText("logic.and"), I18nManager.getText("logic.or")}); + dopPanel.add(_combineDopsCombo); + dopPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.vdop"), SwingConstants.RIGHT)); + _vdopField = new WholeNumberField(2); + _vdopField.addKeyListener(_paramChangeListener); + dopPanel.add(_vdopField); + boxPanel2.add(dopPanel); + + // Number of satellites + JPanel satPanel = new JPanel(); + satPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.discard.numsats"))); + _numSatsField = new WholeNumberField(2); + _numSatsField.addKeyListener(_paramChangeListener); + satPanel.add(_numSatsField); + boxPanel2.add(satPanel); + + // Checkboxes for no fix and unknown fix + _noFixCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsbabel.filter.discard.nofix")); + boxPanel2.add(_noFixCheckbox); + _unknownFixCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsbabel.filter.discard.unknownfix")); + boxPanel2.add(_unknownFixCheckbox); + boxPanel2.add(Box.createVerticalStrut(9)); // spacer + + boxPanel2.setAlignmentX(Component.LEFT_ALIGNMENT); + boxPanel.add(boxPanel2); + add(boxPanel, BorderLayout.NORTH); +} + + /** + * @return true if the filters are valid + */ + public boolean isFilterValid() + { + // If values are entered, insist that they're positive (0 not valid) + if (_hdopField.getText() != null && _hdopField.getText().length() > 0 && _hdopField.getValue() <= 0) {return false;} + if (_vdopField.getText() != null && _vdopField.getText().length() > 0 && _vdopField.getValue() <= 0) {return false;} + if (_numSatsField.getText() != null && _numSatsField.getText().length() > 0 && _numSatsField.getValue() <= 0) {return false;} + // Insist that at least one value has been entered + return _hdopField.getValue() > 0 || _vdopField.getValue() > 0 || _numSatsField.getValue() > 0; + } + + /** + * @return filter parameters as a string, or null + */ + protected String getParameters() + { + if (!isFilterValid()) return null; + StringBuilder builder = new StringBuilder(); + // hdop and vdop + final int hdop = _hdopField.getValue(); + if (hdop > 0) { + builder.append(",hdop=").append(hdop); + } + final int vdop = _vdopField.getValue(); + if (vdop > 0) + { + builder.append(",vdop=").append(vdop); + if (hdop > 0 && _combineDopsCombo.getSelectedIndex() == 0) { + builder.append(",hdopandvdop"); + } + } + // number of satellites + final int numSats = _numSatsField.getValue(); + if (numSats > 0) + { + builder.append(",sat=").append(numSats); + } + // checkboxes + if (_noFixCheckbox.isSelected()) { + builder.append(",fixnone"); + } + if (_unknownFixCheckbox.isSelected()) { + builder.append(",fixunknown"); + } + return builder.toString(); + } +}