]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/gui/SelectorDisplay.java
Version 11, August 2010
[GpsPrune.git] / tim / prune / gui / SelectorDisplay.java
index 28e0a95b14a2dc6e3915a6f1f62d9e50d422a7f7..ed244d0bdbff57816492f5d23d7a6407e4151ce4 100644 (file)
@@ -16,14 +16,13 @@ import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollBar;
 import javax.swing.JScrollPane;
+import javax.swing.ListSelectionModel;
 import javax.swing.border.EtchedBorder;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
 import tim.prune.DataSubscriber;
 import tim.prune.I18nManager;
-import tim.prune.data.DataPoint;
-import tim.prune.data.Photo;
 import tim.prune.data.TrackInfo;
 
 /**
@@ -100,6 +99,7 @@ public class SelectorDisplay extends GenericDisplay
                _waypointListModel = new WaypointListModel(_trackInfo.getTrack());
                _waypointList = new JList(_waypointListModel);
                _waypointList.setVisibleRowCount(NUM_LIST_ENTRIES);
+               _waypointList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                _waypointList.addListSelectionListener(new ListSelectionListener() {
                        public void valueChanged(ListSelectionEvent e)
                        {
@@ -114,10 +114,13 @@ public class SelectorDisplay extends GenericDisplay
                _photoListModel = new PhotoListModel(_trackInfo.getPhotoList());
                _photoList = new JList(_photoListModel);
                _photoList.setVisibleRowCount(NUM_LIST_ENTRIES);
+               _photoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                _photoList.addListSelectionListener(new ListSelectionListener() {
                        public void valueChanged(ListSelectionEvent e)
                        {
-                               if (!e.getValueIsAdjusting()) selectPhoto(_photoList.getSelectedIndex());
+                               if (!e.getValueIsAdjusting()) {
+                                       selectPhoto(_photoList.getSelectedIndex());
+                               }
                        }});
                JPanel photoListPanel = new JPanel();
                photoListPanel.setLayout(new BorderLayout());
@@ -149,7 +152,7 @@ public class SelectorDisplay extends GenericDisplay
        {
                if (_track != null && !_ignoreScrollEvents)
                {
-                       _trackInfo.getSelection().selectPoint(inValue);
+                       _trackInfo.selectPoint(inValue);
                }
        }
 
@@ -217,7 +220,7 @@ public class SelectorDisplay extends GenericDisplay
                }
                else
                {
-                       _scroller.setMaximum(_track.getNumPoints() + SCROLLBAR_INTERVAL);
+                       _scroller.setMaximum(_track.getNumPoints() -1 + SCROLLBAR_INTERVAL);
                        if (currentPointIndex >= 0)
                                _scroller.setValue(currentPointIndex);
                        _scroller.setEnabled(true);
@@ -246,23 +249,20 @@ public class SelectorDisplay extends GenericDisplay
                                _waypointList.clearSelection();
                        }
                }
-               // Do the same for the photos
-               if (_photoList.getSelectedIndex() >= 0)
+               // Make sure correct photo is selected
+               if (_photoListModel.getSize() > 0)
                {
-                       DataPoint trackPoint = _trackInfo.getCurrentPoint();
-                       Photo selectedPhoto = _photoListModel.getPhoto(_photoList.getSelectedIndex());
-                       // Get selected Photo, if it's still there
-                       DataPoint photoPoint = null;
-                       if (selectedPhoto != null) {
-                               photoPoint = _photoListModel.getPhoto(_photoList.getSelectedIndex()).getDataPoint();
-                       }
-                       // Compare selected photo with selected point
-                       if ( (photoPoint != null && (trackPoint == null || !photoPoint.equals(trackPoint)))
-                               || (_trackInfo.getSelection().getCurrentPhotoIndex() < 0) )
+                       int photoIndex = _trackInfo.getSelection().getCurrentPhotoIndex();
+                       int listSelection = _photoList.getSelectedIndex();
+                       // Change listbox selection if indexes not equal
+                       if (listSelection != photoIndex)
                        {
-                               // photo is selected in list but different from current point - deselect
-                               _photoList.clearSelection();
-                               _trackInfo.getSelection().deselectPhoto();
+                               if (photoIndex < 0) {
+                                       _photoList.clearSelection();
+                               }
+                               else {
+                                       _photoList.setSelectedIndex(photoIndex);
+                               }
                        }
                }
        }