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;
private FileLoader _fileLoader = null;
private JpegLoader _jpegLoader = null;
private FileSaver _fileSaver = null;
- private Stack<UndoOperation> _undoStack = null;
+ private UndoStack _undoStack = null;
+ private ColourerCaretaker _colCaretaker = null;
private boolean _mangleTimestampsConfirmed = false;
private Viewport _viewport = null;
private ArrayList<File> _dataFiles = null;
public App(JFrame inFrame)
{
_frame = inFrame;
- _undoStack = new Stack<UndoOperation>();
+ _undoStack = new UndoStack();
_track = new Track();
_trackInfo = new TrackInfo(_track);
FunctionLibrary.initialise(this);
+ _colCaretaker = new ColourerCaretaker(this);
+ UpdateMessageBroker.addSubscriber(_colCaretaker);
+ _colCaretaker.setColourer(Config.getPointColourer());
}
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
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())
{
* @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());
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