]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/load/babel/DiscardFilter.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / load / babel / DiscardFilter.java
diff --git a/src/tim/prune/load/babel/DiscardFilter.java b/src/tim/prune/load/babel/DiscardFilter.java
new file mode 100644 (file)
index 0000000..22f36f7
--- /dev/null
@@ -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<String> _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<String>(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();
+       }
+}