X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2FApp.java;h=3a778588ab815a7f30c4b396e4de9d2c266836da;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=e57dcf6d5d15364fd6c5ede5f509d28728531404;hpb=88f2c3647ed9e055090484f01a959d4581f85e7d;p=GpsPrune.git diff --git a/tim/prune/App.java b/tim/prune/App.java index e57dcf6..3a77858 100644 --- a/tim/prune/App.java +++ b/tim/prune/App.java @@ -4,7 +4,6 @@ import java.io.File; import java.util.ArrayList; import java.util.EmptyStackException; import java.util.Set; -import java.util.Stack; import javax.swing.JFrame; import javax.swing.JOptionPane; @@ -25,16 +24,16 @@ import tim.prune.data.TrackInfo; import tim.prune.data.SourceInfo.FILE_TYPE; import tim.prune.data.Unit; import tim.prune.function.AsyncMediaLoader; -import tim.prune.function.SaveConfig; import tim.prune.function.SelectTracksFunction; -import tim.prune.function.browser.BrowserLauncher; -import tim.prune.function.browser.UrlGenerator; import tim.prune.function.edit.FieldEditList; import tim.prune.function.edit.PointEditor; +import tim.prune.function.settings.SaveConfig; 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; @@ -61,6 +60,7 @@ public class App private JpegLoader _jpegLoader = null; private FileSaver _fileSaver = null; private UndoStack _undoStack = null; + private ColourerCaretaker _colCaretaker = null; private boolean _mangleTimestampsConfirmed = false; private Viewport _viewport = null; private ArrayList _dataFiles = null; @@ -83,6 +83,9 @@ public class App _track = new Track(); _trackInfo = new TrackInfo(_track); FunctionLibrary.initialise(this); + _colCaretaker = new ColourerCaretaker(this); + UpdateMessageBroker.addSubscriber(_colCaretaker); + _colCaretaker.setColourer(Config.getPointColourer()); } @@ -115,11 +118,29 @@ public class App /** * @return the undo stack */ - public Stack getUndoStack() + public UndoStack getUndoStack() { 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 @@ -279,7 +300,7 @@ public class App // pass to track for completion if (_track.editPoint(currentPoint, inEditList, false)) { - _undoStack.push(undo); + _undoStack.add(undo); // Confirm point edit UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.point.edit")); } @@ -319,13 +340,15 @@ 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()) { // Delete was successful so add undo info to stack - _undoStack.push(undo); + _undoStack.add(undo); if (currentPhoto != null) { // delete photo if necessary @@ -352,27 +375,6 @@ public class App } - /** - * Finish the compression by deleting the marked points - */ - public void finishCompressTrack() - { - UndoDeleteMarked undo = new UndoDeleteMarked(_track); - // call track to do compress - int numPointsDeleted = _trackInfo.deleteMarkedPoints(); - // add to undo stack if successful - if (numPointsDeleted > 0) - { - undo.setNumPointsDeleted(numPointsDeleted); - _undoStack.add(undo); - UpdateMessageBroker.informSubscribers("" + numPointsDeleted + " " - + (numPointsDeleted==1?I18nManager.getText("confirm.deletepoint.single"):I18nManager.getText("confirm.deletepoint.multi"))); - } - else { - showErrorMessage("function.compress", "dialog.deletemarked.nonefound"); - } - } - /** * Reverse the currently selected section of the track */ @@ -400,16 +402,16 @@ public class App } /** - * Complete the add time offset function with the specified offset + * Complete the add time offset function with the specified offset in seconds * @param inTimeOffset time offset to add (+ve for add, -ve for subtract) */ - public void finishAddTimeOffset(long inTimeOffset) + public void finishAddTimeOffsetSeconds(long inTimeOffset) { // Construct undo information int selStart = _trackInfo.getSelection().getStart(); int selEnd = _trackInfo.getSelection().getEnd(); UndoAddTimeOffset undo = new UndoAddTimeOffset(selStart, selEnd, inTimeOffset); - if (_trackInfo.getTrack().addTimeOffset(selStart, selEnd, inTimeOffset, false)) + if (_trackInfo.getTrack().addTimeOffsetSeconds(selStart, selEnd, inTimeOffset, false)) { _undoStack.add(undo); UpdateMessageBroker.informSubscribers(DataSubscriber.DATA_EDITED); @@ -498,12 +500,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 +542,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); @@ -855,7 +867,7 @@ public class App } else { - new UndoManager(this, _frame); + new UndoManager(this, _frame).show(); } } @@ -895,7 +907,7 @@ public class App { for (int i=0; i