1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 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();
}
}
|