]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/function/gpsies/TrackListModel.java
Version 19, May 2018
[GpsPrune.git] / tim / prune / function / gpsies / TrackListModel.java
index 904dd8bc62248d49fe4e5669ee37fccc19a643a3..850921303801d33878c6b429ec2709087ed7fd6a 100644 (file)
@@ -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.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<GpsiesTrack> _trackList = null;
+       private ArrayList<SearchResult> _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,8 +92,14 @@ public class TrackListModel extends AbstractTableModel
         */
        public Object getValueAt(int inRowNum, int inColNum)
        {
-               GpsiesTrack track = _trackList.get(inRowNum);
-               if (inColNum == 0) {return track.getTrackName();}
+               SearchResult track = _trackList.get(inRowNum);
+               if (inColNum == 0) {
+                       return track.getTrackName();
+               }
+               if (_showPointTypes)
+               {
+                       return track.getPointType();
+               }
                double lengthM = track.getLength();
                // convert to current distance units
                Unit distUnit = Config.getUnitSet().getDistanceUnit();
@@ -88,12 +112,26 @@ public class TrackListModel extends AbstractTableModel
         * Add a list of tracks to this model
         * @param inList list of tracks to add
         */
-       public void addTracks(ArrayList<GpsiesTrack> inList)
+       public void addTracks(ArrayList<SearchResult> 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<SearchResult> inList, boolean inSort)
        {
-               if (_trackList == null) {_trackList = new ArrayList<GpsiesTrack>();}
+               if (_trackList == null) {_trackList = new ArrayList<SearchResult>();}
                final int prevCount = _trackList.size();
-               if (inList != null && inList.size() > 0) {
+               if (inList != null && inList.size() > 0)
+               {
                        _trackList.addAll(inList);
+                       if (inSort) {
+                               Collections.sort(_trackList);
+                       }
                }
                final int updatedCount = _trackList.size();
                if (prevCount <= 0)
@@ -106,7 +144,7 @@ public class TrackListModel extends AbstractTableModel
         * @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);
        }