File: DistanceTableModel.java

package info (click to toggle)
gpsprune 19.2-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 4,516 kB
  • sloc: java: 42,704; sh: 25; makefile: 24; python: 15
file content (100 lines) | stat: -rw-r--r-- 2,620 bytes parent folder | download | duplicates (4)
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
package tim.prune.function.distance;

import tim.prune.I18nManager;
import tim.prune.config.Config;
import tim.prune.data.DataPoint;
import tim.prune.data.Distance;
import tim.prune.data.Unit;

/**
 * Class to hold the table model for the distances table
 */
public class DistanceTableModel extends GenericTableModel
{
	/** Distances */
	private double[] _distances = null;
	/** Column heading */
	private static final String _toColLabel = I18nManager.getText("dialog.distances.column.to");
	/** Column heading (depends on metric/imperial settings) */
	private String _distanceLabel = null;
	/** Previous distance units */
	private Unit _previousDistUnit = null;

	/**
	 * @return column count
	 */
	public int getColumnCount()
	{
		return 2;
	}

	/**
	 * @param inRowIndex row index
	 * @param inColumnIndex column index
	 * @return cell value
	 */
	public Object getValueAt(int inRowIndex, int inColumnIndex)
	{
		if (inColumnIndex == 0) {return getPointName(inRowIndex);}
		if (_distances == null) {return 0.0;}
		return new Double(_distances[inRowIndex]);
	}

	/**
	 * @param inColumnIndex column index
	 * @return column name
	 */
	public String getColumnName(int inColumnIndex)
	{
		if (inColumnIndex == 0) {return _toColLabel;}
		return _distanceLabel;
	}

	/**
	 * Get the column class (required for sorting)
	 * @param inColumnIndex column index
	 * @return Class of specified column
	 */
	public Class<?> getColumnClass(int inColumnIndex)
	{
		if (inColumnIndex == 0) return String.class;
		return Double.class;
	}

	/**
	 * Recalculate the distances
	 * @param inIndex index of selected 'from' point
	 */
	public void recalculate(int inIndex)
	{
		// Which units to use?
		Unit distUnit = Config.getUnitSet().getDistanceUnit();
		_distanceLabel = I18nManager.getText("fieldname.distance") + " (" +
			I18nManager.getText(distUnit.getShortnameKey()) + ")";
		final boolean distUnitsChanged = (distUnit != _previousDistUnit);
		_previousDistUnit = distUnit;

		// Initialize array of distances
		int numRows = getRowCount();
		if (_distances == null || _distances.length != numRows) {
			_distances = new double[numRows];
		}
		DataPoint fromPoint = _pointList.get(inIndex);
		for (int i=0; i<numRows; i++) {
			if (i == inIndex) {
				_distances[i] = 0.0;
			}
			else {
				double rads = DataPoint.calculateRadiansBetween(fromPoint, _pointList.get(i));
				_distances[i] = Distance.convertRadiansToDistance(rads);
			}
		}
		// Let table know that it has to refresh data, and maybe the whole table too
		if (distUnitsChanged) {
			fireTableStructureChanged();
		}
		else {
			fireTableDataChanged();
		}
	}
}