X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2FApp.java;h=8189ffb6b4aafff66d62d60906961ebaf1ea3e67;hp=6fab5833af1c56ecddb5b506a9c4b03a2de31bbd;hb=649c5da6ee1bbc590699e11a92316ece2ea8512d;hpb=eebbb64b5d63f9eea43a0dff908c30361a376768 diff --git a/tim/prune/App.java b/tim/prune/App.java index 6fab583..8189ffb 100644 --- a/tim/prune/App.java +++ b/tim/prune/App.java @@ -9,31 +9,34 @@ import java.util.Stack; import javax.swing.JFrame; import javax.swing.JOptionPane; +import tim.prune.config.Config; import tim.prune.data.Altitude; -import tim.prune.data.AudioFile; import tim.prune.data.Checker; import tim.prune.data.DataPoint; import tim.prune.data.Field; import tim.prune.data.LatLonRectangle; -import tim.prune.data.MediaFile; import tim.prune.data.NumberUtils; import tim.prune.data.Photo; import tim.prune.data.PhotoList; +import tim.prune.data.RecentFile; import tim.prune.data.SourceInfo; import tim.prune.data.Track; import tim.prune.data.TrackInfo; +import tim.prune.data.SourceInfo.FILE_TYPE; +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.gui.SidebarController; import tim.prune.gui.MenuManager; +import tim.prune.gui.SidebarController; import tim.prune.gui.UndoManager; import tim.prune.gui.Viewport; import tim.prune.load.FileLoader; import tim.prune.load.JpegLoader; -import tim.prune.load.MediaHelper; +import tim.prune.load.MediaLinkInfo; import tim.prune.load.TrackNameList; import tim.prune.save.ExifSaver; import tim.prune.save.FileSaver; @@ -60,6 +63,7 @@ public class App private Viewport _viewport = null; private ArrayList _dataFiles = null; private boolean _firstDataFile = true; + private boolean _busyLoading = false; /** @@ -209,6 +213,10 @@ public class App JOptionPane.WARNING_MESSAGE, null, buttonTexts, buttonTexts[1]) == JOptionPane.YES_OPTION) { + // save settings + if (Config.getConfigBoolean(Config.KEY_AUTOSAVE_SETTINGS)) { + new SaveConfig(this).silentSave(); + } System.exit(0); } } @@ -270,7 +278,7 @@ public class App { // Confirm deletion of photo or decoupling int response = JOptionPane.showConfirmDialog(_frame, - I18nManager.getText("dialog.deletepoint.deletephoto") + " " + currentPhoto.getFile().getName(), + I18nManager.getText("dialog.deletepoint.deletephoto") + " " + currentPhoto.getName(), I18nManager.getText("dialog.deletepoint.title"), JOptionPane.YES_NO_CANCEL_OPTION); if (response == JOptionPane.CANCEL_OPTION || response == JOptionPane.CLOSED_OPTION) @@ -304,6 +312,7 @@ public class App // decouple photo from point currentPhoto.setDataPoint(null); } + UpdateMessageBroker.informSubscribers(); } // Confirm UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.deletepoint.single")); @@ -317,82 +326,80 @@ public class App */ public void deleteSelectedRange() { - if (_track != null) + if (_track == null) return; + // Find out if photos should be deleted or not + int selStart = _trackInfo.getSelection().getStart(); + int selEnd = _trackInfo.getSelection().getEnd(); + if (selStart >= 0 && selEnd >= selStart) { - // Find out if photos should be deleted or not - int selStart = _trackInfo.getSelection().getStart(); - int selEnd = _trackInfo.getSelection().getEnd(); - if (selStart >= 0 && selEnd >= selStart) + int numToDelete = selEnd - selStart + 1; + boolean[] deletePhotos = new boolean[numToDelete]; + Photo[] photosToDelete = new Photo[numToDelete]; + boolean deleteAll = false; + boolean deleteNone = false; + String[] questionOptions = {I18nManager.getText("button.yes"), I18nManager.getText("button.no"), + I18nManager.getText("button.yestoall"), I18nManager.getText("button.notoall"), + I18nManager.getText("button.cancel")}; + DataPoint point = null; + for (int i=0; i 1) { // Launch a dialog to let the user choose which tracks to load, then continue - new SelectTracksFunction(this, inFieldArray, inDataArray, inAltFormat, inSourceInfo, - inTrackNameList).begin(); + new SelectTracksFunction(this, loadedTrack, inSourceInfo, inTrackNameList).begin(); } else { // go directly to load @@ -747,9 +747,6 @@ public class App undo.setNumPhotosAudios(_trackInfo.getPhotoList().getNumPhotos(), _trackInfo.getAudioList().getNumAudios()); _undoStack.add(undo); _track.combine(inLoadedTrack); - // Add photos and audios (if any in loaded track) to list(s) - MediaHelper.addMediaFromTrack(_track, _trackInfo.getPhotoList(), Photo.class); - MediaHelper.addMediaFromTrack(_track, _trackInfo.getAudioList(), AudioFile.class); // set source information inSourceInfo.populatePointObjects(_track, inLoadedTrack.getNumPoints()); _trackInfo.getFileInfo().addSource(inSourceInfo); @@ -771,9 +768,6 @@ public class App _trackInfo.getFileInfo().replaceSource(inSourceInfo); _trackInfo.getPhotoList().removeCorrelatedPhotos(); _trackInfo.getAudioList().removeCorrelatedAudios(); - // Add photos and audios (if any in loaded track) to list(s) - MediaHelper.addMediaFromTrack(_track, _trackInfo.getPhotoList(), Photo.class); - MediaHelper.addMediaFromTrack(_track, _trackInfo.getAudioList(), AudioFile.class); } } else @@ -787,16 +781,18 @@ public class App _track.load(inLoadedTrack); inSourceInfo.populatePointObjects(_track, _track.getNumPoints()); _trackInfo.getFileInfo().addSource(inSourceInfo); - // Add photos and audios (if any in loaded track) to list(s) - MediaHelper.addMediaFromTrack(_track, _trackInfo.getPhotoList(), Photo.class); - MediaHelper.addMediaFromTrack(_track, _trackInfo.getAudioList(), AudioFile.class); } + // Update config before subscribers are told + boolean isRegularLoad = (inSourceInfo.getFileType() != FILE_TYPE.GPSBABEL); + Config.getRecentFileList().addFile(new RecentFile(inSourceInfo.getFile(), isRegularLoad)); UpdateMessageBroker.informSubscribers(); // Update status bar UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.loadfile") + " '" + inSourceInfo.getName() + "'"); // update menu _menuManager.informFileLoaded(); + // Remove busy lock + _busyLoading = false; // load next file if there's a queue loadNextFile(); } @@ -1034,4 +1030,9 @@ public class App { _sidebarController.toggle(); } + + /** @return true if App is currently busy with loading data */ + public boolean isBusyLoading() { + return _busyLoading; + } }