X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2FSelectorDisplay.java;h=d1a4915d76caa86f644bcafedf012622acd06b96;hb=0ecb90e2df2bc8bc2aa253780a88d5fb957e6062;hp=fa6630dc5b71400bd4f7202fb688f9a911cc3f6f;hpb=63241d23966d58714b8f13173515d6eb772706a7;p=GpsPrune.git diff --git a/src/tim/prune/gui/SelectorDisplay.java b/src/tim/prune/gui/SelectorDisplay.java index fa6630d..d1a4915 100644 --- a/src/tim/prune/gui/SelectorDisplay.java +++ b/src/tim/prune/gui/SelectorDisplay.java @@ -53,6 +53,10 @@ public class SelectorDisplay extends GenericDisplay private JPanel _audioListPanel = null; private JList _audioList = null; private MediaListModel _audioListModel = null; + // Segments + private JPanel _segmentListPanel = null; + private JList _segmentList = null; + private SegmentListModel _segmentListModel = null; // scrollbar interval private static final int SCROLLBAR_INTERVAL = 50; @@ -144,6 +148,18 @@ public class SelectorDisplay extends GenericDisplay // don't add audio list either _listsPanel.setAlignmentX(Component.LEFT_ALIGNMENT); + // Segment list + _segmentListModel = new SegmentListModel(_trackInfo.getTrack()); + _segmentList = new JList(_segmentListModel); + _segmentList.addListSelectionListener(new ListSelectionListener() { + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) { + selectSegment(_segmentList.getSelectedIndex()); + } + }}); + _segmentListPanel = makeListPanel("details.lists.segments", _segmentList); + // add the controls to the main panel mainPanel.add(trackDetailsPanel); mainPanel.add(Box.createVerticalStrut(5)); @@ -189,6 +205,18 @@ public class SelectorDisplay extends GenericDisplay _trackInfo.selectAudio(inIndex); } + /** + * + */ + private void selectSegment(int inIndex) + { + if (inIndex >= 0) { + int start = _segmentListModel.getSegmentStart(inIndex); + int end = _segmentListModel.getSegmentEnd(inIndex); + _trackInfo.getSelection().selectRange(start, end); + } + } + /** * Select the specified waypoint * @param inWaypointIndex index of selected waypoint @@ -257,7 +285,7 @@ public class SelectorDisplay extends GenericDisplay _ignoreScrollEvents = false; // update waypoints and photos if necessary - if ((inUpdateType | + if ((inUpdateType & (DataSubscriber.DATA_ADDED_OR_REMOVED | DataSubscriber.DATA_EDITED | DataSubscriber.WAYPOINTS_MODIFIED)) > 0) { _waypointListModel.fireChanged(); @@ -279,6 +307,28 @@ public class SelectorDisplay extends GenericDisplay _waypointList.clearSelection(); } } + if ((inUpdateType & (DataSubscriber.DATA_ADDED_OR_REMOVED | DataSubscriber.DATA_EDITED)) > 0) + { + _segmentListModel.fireChanged(); + if (_segmentListModel.getSize() > 1) + { + _listsPanel.add(_segmentListPanel); + } + } + // Deselect segment if selection goes beyond the selected + // segment + if ((inUpdateType & DataSubscriber.SELECTION_CHANGED) > 0) + { + int segmentSelected = _segmentList.getSelectedIndex(); + if (segmentSelected >= 0) + { + if (_trackInfo.getSelection().getStart() != _segmentListModel.getSegmentStart(segmentSelected) || + _trackInfo.getSelection().getEnd() != _segmentListModel.getSegmentEnd(segmentSelected)) + { + _segmentList.clearSelection(); + } + } + } // Hide photo list if no photos loaded, same for audio redrawLists(_photoListModel.getSize() > 0, _audioListModel.getSize() > 0); @@ -347,6 +397,7 @@ public class SelectorDisplay extends GenericDisplay _listsPanel.removeAll(); _listsPanel.setLayout(new GridLayout(0, 1)); _listsPanel.add(_waypointListPanel); + _listsPanel.add(_segmentListPanel); if (inShowPhotos) { _listsPanel.add(_photoListPanel); }