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(); } }