X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2FSelectorDisplay.java;fp=src%2Ftim%2Fprune%2Fgui%2FSelectorDisplay.java;h=92b215399053e7d9d1d2ba586a570c61be35e624;hb=b436c60b4dff131a6c2794851068bc6a61f6062a;hp=9dfc24f42394ad624d925589a2acd344411c12a0;hpb=7a0d2c388f91bfdea7974d7fb1ba3424fb21bf7b;p=GpsPrune.git diff --git a/src/tim/prune/gui/SelectorDisplay.java b/src/tim/prune/gui/SelectorDisplay.java index 9dfc24f..92b2153 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 @@ -258,7 +286,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(); @@ -280,6 +308,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); @@ -348,6 +398,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); }