X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Ffunction%2Fgpsies%2FTrackListModel.java;h=850921303801d33878c6b429ec2709087ed7fd6a;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=3a7326f647409b131d70964ad48279ac086ab275;hpb=f35b6d628f68e3b5ef19965ad8988d0dd1eb8efa;p=GpsPrune.git diff --git a/tim/prune/function/gpsies/TrackListModel.java b/tim/prune/function/gpsies/TrackListModel.java index 3a7326f..8509213 100644 --- a/tim/prune/function/gpsies/TrackListModel.java +++ b/tim/prune/function/gpsies/TrackListModel.java @@ -2,26 +2,30 @@ package tim.prune.function.gpsies; import java.text.NumberFormat; import java.util.ArrayList; +import java.util.Collections; import javax.swing.table.AbstractTableModel; import tim.prune.I18nManager; import tim.prune.config.Config; -import tim.prune.data.Distance; +import tim.prune.data.Unit; +import tim.prune.function.search.SearchResult; /** - * Model for list of tracks from gpsies.com + * Model for list of tracks from a search result (eg gpsies.com, geonames, overpass) */ public class TrackListModel extends AbstractTableModel { /** List of tracks */ - private ArrayList _trackList = null; + private ArrayList _trackList = null; /** Column heading for track name */ private String _nameColLabel = null; /** Column heading for length */ private String _lengthColLabel = null; /** Number of columns */ private int _numColumns = 2; + /** Normally this model shows distances / lengths, except when this flag is true */ + private boolean _showPointTypes = false; /** Formatter for distances */ private NumberFormat _distanceFormatter = NumberFormat.getInstance(); @@ -57,6 +61,12 @@ public class TrackListModel extends AbstractTableModel return _trackList.size(); } + /** @return true if there are no rows */ + public boolean isEmpty() + { + return getRowCount() == 0; + } + /** * @param inColNum column number * @return column label for given column @@ -67,6 +77,14 @@ public class TrackListModel extends AbstractTableModel return _lengthColLabel; } + /** + * @param inShowTypes true to show point types, false for distances + */ + public void setShowPointTypes(boolean inShowTypes) + { + _showPointTypes = inShowTypes; + } + /** * @param inRowNum row number * @param inColNum column number @@ -74,35 +92,59 @@ public class TrackListModel extends AbstractTableModel */ public Object getValueAt(int inRowNum, int inColNum) { - GpsiesTrack track = _trackList.get(inRowNum); - if (inColNum == 0) {return track.getTrackName();} - double lengthM = track.getLength(); - if (Config.getConfigBoolean(Config.KEY_METRIC_UNITS)) { - return _distanceFormatter.format(lengthM / 1000.0) + " " + I18nManager.getText("units.kilometres.short"); + SearchResult track = _trackList.get(inRowNum); + if (inColNum == 0) { + return track.getTrackName(); } - // must be imperial - return _distanceFormatter.format(Distance.convertMetresToMiles(lengthM)) - + " " + I18nManager.getText("units.miles.short"); + if (_showPointTypes) + { + return track.getPointType(); + } + double lengthM = track.getLength(); + // convert to current distance units + Unit distUnit = Config.getUnitSet().getDistanceUnit(); + double length = lengthM * distUnit.getMultFactorFromStd(); + // Make text + return _distanceFormatter.format(length) + " " + I18nManager.getText(distUnit.getShortnameKey()); } /** * Add a list of tracks to this model * @param inList list of tracks to add */ - public void addTracks(ArrayList inList) + public void addTracks(ArrayList inList) + { + addTracks(inList, false); + } + + /** + * Add a list of tracks to this model and optionally sort them + * @param inList list of tracks to add + * @param inSort true to sort results after adding + */ + public void addTracks(ArrayList inList, boolean inSort) { - if (_trackList == null) {_trackList = new ArrayList();} - if (inList != null && inList.size() > 0) { + if (_trackList == null) {_trackList = new ArrayList();} + final int prevCount = _trackList.size(); + if (inList != null && inList.size() > 0) + { _trackList.addAll(inList); + if (inSort) { + Collections.sort(_trackList); + } } - fireTableDataChanged(); + final int updatedCount = _trackList.size(); + if (prevCount <= 0) + fireTableDataChanged(); + else + fireTableRowsInserted(prevCount, updatedCount-1); } /** * @param inRowNum row number from 0 * @return track object for this row */ - public GpsiesTrack getTrack(int inRowNum) + public SearchResult getTrack(int inRowNum) { return _trackList.get(inRowNum); }