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;
import tim.prune.load.TrackNameList;
import tim.prune.save.ExifSaver;
import tim.prune.save.FileSaver;
+import tim.prune.tips.TipManager;
import tim.prune.undo.*;
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
+ * @param inTipNumber tip number from TipManager
+ */
+ public void showTip(int inTipNumber)
+ {
+ String key = TipManager.fireTipTrigger(inTipNumber);
+ if (key != null && !key.equals(""))
+ {
+ JOptionPane.showMessageDialog(_frame, I18nManager.getText(key),
+ I18nManager.getText("tip.title"), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
+
+
/**
* Load the specified data files one by one
* @param inDataFiles arraylist containing File objects to load
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());
// ensure track's field list contains point's fields
_track.extendFieldList(inPoint.getFieldList());
_trackInfo.selectPoint(inIndex);
+ final int selStart = _trackInfo.getSelection().getStart();
+ final int selEnd = _trackInfo.getSelection().getEnd();
+ if (selStart < inIndex && selEnd >= inIndex)
+ {
+ // Extend end of selection by 1
+ _trackInfo.getSelection().selectRange(selStart, selEnd+1);
+ }
// update listeners
UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.createpoint"));
}
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