File: DiscardFilter.java

package info (click to toggle)
gpsprune 17-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,984 kB
  • ctags: 5,218
  • sloc: java: 39,403; sh: 25; makefile: 17; python: 15
file content (144 lines) | stat: -rw-r--r-- 4,848 bytes parent folder | download | duplicates (6)
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();
	}
}