+++ /dev/null
-package tim.prune.load.babel;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.GridLayout;
-
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.ButtonGroup;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import tim.prune.I18nManager;
-import tim.prune.data.UnitSetLibrary;
-import tim.prune.gui.DecimalNumberField;
-import tim.prune.gui.WholeNumberField;
-
-/**
- * Simplify filter for GPSBabel
- */
-public class SimplifyFilter extends FilterDefinition
-{
- /** Constructor */
- public SimplifyFilter(AddFilterDialog inFilterDialog)
- {
- super(inFilterDialog);
- makePanelContents();
- }
-
- private WholeNumberField _maxPointsField = null;
- private DecimalNumberField _distField = null;
- private JComboBox<String> _distUnitsCombo = null;
- private JRadioButton _crossTrackRadio = null;
- private JRadioButton _lengthRadio = null;
- private JRadioButton _relativeRadio = null;
-
-
- /** @return filter name */
- protected String getFilterName() {
- return "simplify";
- }
-
- /** Make the panel contents */
- protected void makePanelContents()
- {
- setLayout(new BorderLayout());
- JPanel boxPanel = new JPanel();
- boxPanel.setLayout(new BoxLayout(boxPanel, BoxLayout.Y_AXIS));
- add(boxPanel, BorderLayout.NORTH);
- JLabel topLabel = new JLabel(I18nManager.getText("dialog.gpsbabel.filter.simplify.intro"));
- topLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
- boxPanel.add(topLabel);
- boxPanel.add(Box.createVerticalStrut(18)); // spacer
- // Main three-column grid
- JPanel gridPanel = new JPanel();
- gridPanel.setLayout(new GridLayout(0, 3, 4, 4));
- gridPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.simplify.maxpoints")));
- _maxPointsField = new WholeNumberField(6);
- _maxPointsField.addKeyListener(_paramChangeListener);
- gridPanel.add(_maxPointsField);
- gridPanel.add(new JLabel(" "));
- gridPanel.add(new JLabel(I18nManager.getText("dialog.gpsbabel.filter.simplify.maxerror")));
- _distField = new DecimalNumberField();
- _distField.addKeyListener(_paramChangeListener);
- gridPanel.add(_distField);
- _distUnitsCombo = new JComboBox<String>(new String[] {
- I18nManager.getText(UnitSetLibrary.UNITS_KILOMETRES.getNameKey()),
- I18nManager.getText(UnitSetLibrary.UNITS_MILES.getNameKey())
- });
- gridPanel.add(_distUnitsCombo);
- // radio buttons
- _crossTrackRadio = new JRadioButton(I18nManager.getText("dialog.gpsbabel.filter.simplify.crosstrack"));
- _crossTrackRadio.setSelected(true);
- _lengthRadio = new JRadioButton(I18nManager.getText("dialog.gpsbabel.filter.simplify.length"));
- _relativeRadio = new JRadioButton(I18nManager.getText("dialog.gpsbabel.filter.simplify.relative"));
- ButtonGroup radioGroup = new ButtonGroup();
- radioGroup.add(_crossTrackRadio);
- radioGroup.add(_lengthRadio);
- radioGroup.add(_relativeRadio);
- gridPanel.add(_crossTrackRadio);
- gridPanel.add(_lengthRadio);
- gridPanel.add(_relativeRadio);
- gridPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
- boxPanel.add(gridPanel);
- }
-
- /**
- * @return true if the filters are valid
- */
- public boolean isFilterValid()
- {
- final boolean countGiven = _maxPointsField.getText() != null && _maxPointsField.getText().trim().length() > 0;
- final boolean distGiven = _distField.getText() != null && _distField.getText().trim().length() > 0;
- if ((!countGiven && !distGiven) || (countGiven && distGiven)) {
- return false; // only one or the other allowed
- }
- if (countGiven && _maxPointsField.getValue() <= 1) {
- return false; // must have a decent max points
- }
- if (distGiven && _distField.getValue() <= 0.001) {
- return false; // no zero or negative distances allowed
- }
- // must be ok
- return true;
- }
-
- /**
- * @return filter parameters as a string, or null
- */
- protected String getParameters()
- {
- if (!isFilterValid()) return null;
- StringBuilder builder = new StringBuilder();
- // type
- final boolean countGiven = _maxPointsField.getText() != null && _maxPointsField.getText().trim().length() > 0;
- final boolean distGiven = _distField.getText() != null && _distField.getText().trim().length() > 0;
- if (countGiven) {
- builder.append(",count=").append(_maxPointsField.getValue());
- }
- else if (distGiven)
- {
- double dValue = 1.0;
- try {
- dValue = Double.parseDouble(_distField.getText());
- }
- catch (Exception e) {} // shouldn't happen, otherwise validation would have failed
- builder.append(",error=").append(dValue);
- // units of distance (miles by default)
- if (_distUnitsCombo.getSelectedIndex() == 0) {
- builder.append("k"); // nothing for miles
- }
- }
- // three options
- if (_crossTrackRadio.isSelected()) {
- builder.append(",crosstrack"); // default, could not pass it
- }
- else if (_lengthRadio.isSelected()) {
- builder.append(",length");
- }
- else if (_relativeRadio.isSelected()) {
- builder.append(",relative");
- }
- return builder.toString();
- }
-}