1 package tim.prune.function.gpsies;
3 import java.text.NumberFormat;
4 import java.util.ArrayList;
5 import java.util.Collections;
7 import javax.swing.table.AbstractTableModel;
9 import tim.prune.I18nManager;
10 import tim.prune.config.Config;
11 import tim.prune.data.Unit;
12 import tim.prune.function.search.SearchResult;
15 * Model for list of tracks from gpsies.com
17 public class TrackListModel extends AbstractTableModel
20 private ArrayList<SearchResult> _trackList = null;
21 /** Column heading for track name */
22 private String _nameColLabel = null;
23 /** Column heading for length */
24 private String _lengthColLabel = null;
25 /** Number of columns */
26 private int _numColumns = 2;
27 /** Formatter for distances */
28 private NumberFormat _distanceFormatter = NumberFormat.getInstance();
32 * @param inColumn1Key key for first column
33 * @param inColumn2Key key for second column
35 public TrackListModel(String inColumn1Key, String inColumn2Key)
37 _nameColLabel = I18nManager.getText(inColumn1Key);
38 if (inColumn2Key != null) {
39 _lengthColLabel = I18nManager.getText(inColumn2Key);
41 _numColumns = (_lengthColLabel != null?2:1);
42 _distanceFormatter.setMaximumFractionDigits(1);
46 * @return column count
48 public int getColumnCount()
54 * @return number of rows
56 public int getRowCount()
58 if (_trackList == null) return 0;
59 return _trackList.size();
62 /** @return true if there are no rows */
63 public boolean isEmpty()
65 return getRowCount() == 0;
69 * @param inColNum column number
70 * @return column label for given column
72 public String getColumnName(int inColNum)
74 if (inColNum == 0) {return _nameColLabel;}
75 return _lengthColLabel;
79 * @param inRowNum row number
80 * @param inColNum column number
81 * @return cell entry at given row and column
83 public Object getValueAt(int inRowNum, int inColNum)
85 SearchResult track = _trackList.get(inRowNum);
86 if (inColNum == 0) {return track.getTrackName();}
87 double lengthM = track.getLength();
88 // convert to current distance units
89 Unit distUnit = Config.getUnitSet().getDistanceUnit();
90 double length = lengthM * distUnit.getMultFactorFromStd();
92 return _distanceFormatter.format(length) + " " + I18nManager.getText(distUnit.getShortnameKey());
96 * Add a list of tracks to this model
97 * @param inList list of tracks to add
99 public void addTracks(ArrayList<SearchResult> inList)
101 addTracks(inList, false);
105 * Add a list of tracks to this model and optionally sort them
106 * @param inList list of tracks to add
107 * @param inSort true to sort results after adding
109 public void addTracks(ArrayList<SearchResult> inList, boolean inSort)
111 if (_trackList == null) {_trackList = new ArrayList<SearchResult>();}
112 final int prevCount = _trackList.size();
113 if (inList != null && inList.size() > 0)
115 _trackList.addAll(inList);
117 Collections.sort(_trackList);
120 final int updatedCount = _trackList.size();
122 fireTableDataChanged();
124 fireTableRowsInserted(prevCount, updatedCount-1);
128 * @param inRowNum row number from 0
129 * @return track object for this row
131 public SearchResult getTrack(int inRowNum)
133 return _trackList.get(inRowNum);
137 * Clear the list of tracks