X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2FApp.java;h=cb532dbf9d6bcb10a0dfb72ea756b1ac26f1a2b3;hp=18a2e79a60fa737cde270045cb0d3b6263dc278f;hb=ca9bdb3916f9c39adbbf95d06ac95c21dafbb4e6;hpb=63f178fd6c6b30b99a01f2a2d700963ea2dfef8b diff --git a/tim/prune/App.java b/tim/prune/App.java index 18a2e79..cb532db 100644 --- a/tim/prune/App.java +++ b/tim/prune/App.java @@ -7,6 +7,8 @@ import java.util.Stack; import javax.swing.JFrame; import javax.swing.JOptionPane; +import tim.prune.browser.BrowserLauncher; +import tim.prune.browser.UrlGenerator; import tim.prune.correlate.PhotoCorrelator; import tim.prune.correlate.PointPair; import tim.prune.data.DataPoint; @@ -20,6 +22,7 @@ import tim.prune.edit.PointEditor; import tim.prune.edit.PointNameEditor; import tim.prune.gui.MenuManager; import tim.prune.gui.UndoManager; +import tim.prune.gui.map.MapWindow; import tim.prune.load.FileLoader; import tim.prune.load.JpegLoader; import tim.prune.save.ExifSaver; @@ -43,6 +46,7 @@ import tim.prune.undo.UndoException; import tim.prune.undo.UndoInsert; import tim.prune.undo.UndoLoad; import tim.prune.undo.UndoLoadPhotos; +import tim.prune.undo.UndoMergeTrackSegments; import tim.prune.undo.UndoOperation; import tim.prune.undo.UndoRearrangeWaypoints; import tim.prune.undo.UndoReverseSection; @@ -65,8 +69,8 @@ public class App private KmlExporter _kmlExporter = null; private GpxExporter _gpxExporter = null; private PovExporter _povExporter = null; + private BrowserLauncher _browserLauncher = null; private Stack _undoStack = null; - private UpdateMessageBroker _broker = null; private boolean _reversePointsConfirmed = false; // Constants @@ -78,15 +82,13 @@ public class App /** * Constructor * @param inFrame frame object for application - * @param inBroker message broker */ - public App(JFrame inFrame, UpdateMessageBroker inBroker) + public App(JFrame inFrame) { _frame = inFrame; _undoStack = new Stack(); - _broker = inBroker; - _track = new Track(_broker); - _trackInfo = new TrackInfo(_track, _broker); + _track = new Track(); + _trackInfo = new TrackInfo(_track); } @@ -138,13 +140,13 @@ public class App /** - * Add a photo or a directory of photos which are already correlated + * Add a photo or a directory of photos */ public void addPhotos() { if (_jpegLoader == null) _jpegLoader = new JpegLoader(this, _frame); - _jpegLoader.openFile(); + _jpegLoader.openDialog(); } @@ -322,6 +324,8 @@ public class App if (_track.editPoint(currentPoint, inEditList)) { _undoStack.push(undo); + // Confirm point edit + UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.point.edit")); } } } @@ -350,50 +354,53 @@ public class App */ public void deleteCurrentPoint() { - if (_track != null) + if (_track == null) {return;} + DataPoint currentPoint = _trackInfo.getCurrentPoint(); + if (currentPoint != null) { - DataPoint currentPoint = _trackInfo.getCurrentPoint(); - if (currentPoint != null) + boolean deletePhoto = false; + Photo currentPhoto = currentPoint.getPhoto(); + if (currentPhoto != null) + { + // Confirm deletion of photo or decoupling + int response = JOptionPane.showConfirmDialog(_frame, + I18nManager.getText("dialog.deletepoint.deletephoto") + " " + currentPhoto.getFile().getName(), + I18nManager.getText("dialog.deletepoint.title"), + JOptionPane.YES_NO_CANCEL_OPTION); + if (response == JOptionPane.CANCEL_OPTION || response == JOptionPane.CLOSED_OPTION) + { + // cancel pressed- abort delete + return; + } + if (response == JOptionPane.YES_OPTION) {deletePhoto = true;} + } + // store necessary information to undo it later + int pointIndex = _trackInfo.getSelection().getCurrentPointIndex(); + int photoIndex = _trackInfo.getPhotoList().getPhotoIndex(currentPhoto); + DataPoint nextTrackPoint = _trackInfo.getTrack().getNextTrackPoint(pointIndex + 1); + // Construct Undo object + UndoOperation undo = new UndoDeletePoint(pointIndex, currentPoint, photoIndex, + nextTrackPoint != null && nextTrackPoint.getSegmentStart()); + // call track to delete point + if (_trackInfo.deletePoint()) { - boolean deletePhoto = false; - Photo currentPhoto = currentPoint.getPhoto(); + // Delete was successful so add undo info to stack + _undoStack.push(undo); if (currentPhoto != null) { - // Confirm deletion of photo or decoupling - int response = JOptionPane.showConfirmDialog(_frame, - I18nManager.getText("dialog.deletepoint.deletephoto") + " " + currentPhoto.getFile().getName(), - I18nManager.getText("dialog.deletepoint.title"), - JOptionPane.YES_NO_CANCEL_OPTION); - if (response == JOptionPane.CANCEL_OPTION || response == JOptionPane.CLOSED_OPTION) + // delete photo if necessary + if (deletePhoto) { - // cancel pressed- abort delete - return; + _trackInfo.getPhotoList().deletePhoto(photoIndex); } - if (response == JOptionPane.YES_OPTION) {deletePhoto = true;} - } - // add information to undo stack - int pointIndex = _trackInfo.getSelection().getCurrentPointIndex(); - int photoIndex = _trackInfo.getPhotoList().getPhotoIndex(currentPhoto); - // Undo object needs to know index of photo in list (if any) to restore - UndoOperation undo = new UndoDeletePoint(pointIndex, currentPoint, photoIndex); - // call track to delete point - if (_trackInfo.deletePoint()) - { - _undoStack.push(undo); - if (currentPhoto != null) + else { - // delete photo if necessary - if (deletePhoto) - { - _trackInfo.getPhotoList().deletePhoto(photoIndex); - } - else - { - // decouple photo from point - currentPhoto.setDataPoint(null); - } + // decouple photo from point + currentPhoto.setDataPoint(null); } } + // Confirm + UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.deletepoint.single")); } } } @@ -453,7 +460,7 @@ public class App } } // add information to undo stack - UndoOperation undo = new UndoDeleteRange(_trackInfo); + UndoDeleteRange undo = new UndoDeleteRange(_trackInfo); // delete requested photos for (int i=0; i