X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2FApp.java;h=7be82425ddc3e1628cf0d2c62343d3d50e7c3e47;hb=1ea5817da5381ceebee75ea7294ea78dffff5671;hp=71bd354172ee3df66957c75b6faf1a8c08369db2;hpb=326f489e36aa7f235bc19409a57bf4955cd50f24;p=GpsPrune.git diff --git a/tim/prune/App.java b/tim/prune/App.java index 71bd354..7be8242 100644 --- a/tim/prune/App.java +++ b/tim/prune/App.java @@ -35,6 +35,8 @@ import tim.prune.gui.MenuManager; import tim.prune.gui.SidebarController; import tim.prune.gui.UndoManager; import tim.prune.gui.Viewport; +import tim.prune.gui.colour.ColourerCaretaker; +import tim.prune.gui.colour.PointColourer; import tim.prune.load.FileLoader; import tim.prune.load.JpegLoader; import tim.prune.load.MediaLinkInfo; @@ -60,7 +62,8 @@ public class App private FileLoader _fileLoader = null; private JpegLoader _jpegLoader = null; private FileSaver _fileSaver = null; - private Stack _undoStack = null; + private UndoStack _undoStack = null; + private ColourerCaretaker _colCaretaker = null; private boolean _mangleTimestampsConfirmed = false; private Viewport _viewport = null; private ArrayList _dataFiles = null; @@ -79,10 +82,13 @@ public class App public App(JFrame inFrame) { _frame = inFrame; - _undoStack = new Stack(); + _undoStack = new UndoStack(); _track = new Track(); _trackInfo = new TrackInfo(_track); FunctionLibrary.initialise(this); + _colCaretaker = new ColourerCaretaker(this); + UpdateMessageBroker.addSubscriber(_colCaretaker); + _colCaretaker.setColourer(Config.getPointColourer()); } @@ -120,6 +126,24 @@ public class App return _undoStack; } + /** + * Update the system's point colourer using the one in the Config + */ + public void updatePointColourer() + { + if (_colCaretaker != null) { + _colCaretaker.setColourer(Config.getPointColourer()); + } + } + + /** + * @return colourer object, or null + */ + public PointColourer getPointColourer() + { + if (_colCaretaker == null) {return null;} + return _colCaretaker.getColourer(); + } /** * Show the specified tip if appropriate @@ -319,8 +343,10 @@ public class App int audioIndex = _trackInfo.getAudioList().getAudioIndex(currentPoint.getAudio()); DataPoint nextTrackPoint = _trackInfo.getTrack().getNextTrackPoint(pointIndex + 1); // Construct Undo object - UndoOperation undo = new UndoDeletePoint(pointIndex, currentPoint, photoIndex, + UndoDeletePoint undo = new UndoDeletePoint(pointIndex, currentPoint, photoIndex, audioIndex, nextTrackPoint != null && nextTrackPoint.getSegmentStart()); + undo.setAtBoundaryOfSelectedRange(pointIndex == _trackInfo.getSelection().getStart() || + pointIndex == _trackInfo.getSelection().getEnd()); // call track to delete point if (_trackInfo.deletePoint()) { @@ -498,12 +524,22 @@ public class App * @param inPoint point to add */ public void createPoint(DataPoint inPoint) + { + createPoint(inPoint, true); + } + + /** + * Create a new point at the end of the track + * @param inPoint point to add + * @param inNewSegment true for a single point, false for a continuation + */ + public void createPoint(DataPoint inPoint, boolean inNewSegment) { // create undo object UndoCreatePoint undo = new UndoCreatePoint(); _undoStack.add(undo); // add point to track - inPoint.setSegmentStart(true); + inPoint.setSegmentStart(inNewSegment); _track.appendPoints(new DataPoint[] {inPoint}); // ensure track's field list contains point's fields _track.extendFieldList(inPoint.getFieldList()); @@ -530,7 +566,7 @@ public class App _trackInfo.selectPoint(inIndex); final int selStart = _trackInfo.getSelection().getStart(); final int selEnd = _trackInfo.getSelection().getEnd(); - if (selStart < inIndex && selEnd > inIndex) + if (selStart < inIndex && selEnd >= inIndex) { // Extend end of selection by 1 _trackInfo.getSelection().selectRange(selStart, selEnd+1); @@ -911,6 +947,12 @@ public class App UpdateMessageBroker.informSubscribers(); } + /** + * @return the current data status, used for later comparison + */ + public DataStatus getCurrentDataStatus() { + return new DataStatus(_undoStack.size(), _undoStack.getNumTimesDeleted()); + } /** * Show a map url in an external browser