]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/gui/MenuManager.java
Version 16, February 2014
[GpsPrune.git] / tim / prune / gui / MenuManager.java
index c5501eee75dd653b3a72685bdd71867e14df7cc4..d2be8adbe7544f4684a46ab479d20316b84abacd 100644 (file)
@@ -21,6 +21,7 @@ import tim.prune.I18nManager;
 import tim.prune.UpdateMessageBroker;
 import tim.prune.config.Config;
 import tim.prune.data.AudioClip;
+import tim.prune.data.Field;
 import tim.prune.data.Photo;
 import tim.prune.data.RecentFile;
 import tim.prune.data.RecentFileList;
@@ -47,6 +48,7 @@ public class MenuManager implements DataSubscriber
        private JMenuItem _exportGpxItem = null;
        private JMenuItem _exportPovItem = null;
        private JMenuItem _exportSvgItem = null;
+       private JMenuItem _exportImageItem = null;
        private JMenu     _recentFileMenu = null;
        private JMenuItem _undoItem = null;
        private JMenuItem _clearUndoItem = null;
@@ -71,6 +73,8 @@ public class MenuManager implements DataSubscriber
        private JMenuItem _addAltitudeOffsetItem = null;
        private JMenuItem _mergeSegmentsItem = null;
        private JMenu     _rearrangeMenu = null;
+       private JMenuItem _splitSegmentsItem = null;
+       private JMenuItem _sewSegmentsItem = null;
        private JMenuItem _cutAndMoveItem = null;
        private JMenuItem _convertNamesToTimesItem = null;
        private JMenuItem _deleteFieldValuesItem = null;
@@ -81,10 +85,14 @@ public class MenuManager implements DataSubscriber
        private JMenuItem _getGpsiesItem = null;
        private JMenuItem _uploadGpsiesItem = null;
        private JMenuItem _lookupSrtmItem = null;
+       private JMenuItem _downloadSrtmItem = null;
        private JMenuItem _lookupWikipediaItem = null;
        private JMenuItem _downloadOsmItem = null;
+       private JMenuItem _getWeatherItem = null;
        private JMenuItem _distanceItem = null;
        private JMenuItem _fullRangeDetailsItem = null;
+       private JMenuItem _estimateTimeItem = null;
+       private JMenuItem _learnEstimationParams = null;
        private JMenuItem _saveExifItem = null;
        private JMenuItem _photoPopupItem = null;
        private JMenuItem _selectNoPhotoItem = null;
@@ -217,7 +225,11 @@ public class MenuManager implements DataSubscriber
                // Svg
                _exportSvgItem = makeMenuItem(FunctionLibrary.FUNCTION_SVGEXPORT, false);
                fileMenu.add(_exportSvgItem);
+               // Image
+               _exportImageItem = makeMenuItem(FunctionLibrary.FUNCTION_IMAGEEXPORT, false);
+               fileMenu.add(_exportImageItem);
                fileMenu.addSeparator();
+               // Exit
                JMenuItem exitMenuItem = new JMenuItem(I18nManager.getText("menu.file.exit"));
                exitMenuItem.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
@@ -227,6 +239,34 @@ public class MenuManager implements DataSubscriber
                fileMenu.add(exitMenuItem);
                menubar.add(fileMenu);
 
+               ////////////////////////////////////////////////////
+               // Online menu
+               JMenu onlineMenu = new JMenu(I18nManager.getText("menu.online"));
+               setAltKey(onlineMenu, "altkey.menu.online");
+               // SRTM
+               _lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM, false);
+               onlineMenu.add(_lookupSrtmItem);
+               _downloadSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_DOWNLOAD_SRTM, false);
+               onlineMenu.add(_downloadSrtmItem);
+               // Get gpsies tracks
+               _getGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_GPSIES, false);
+               onlineMenu.add(_getGpsiesItem);
+               // Upload to gpsies
+               _uploadGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_UPLOAD_GPSIES, false);
+               onlineMenu.add(_uploadGpsiesItem);
+               onlineMenu.addSeparator();
+               _lookupWikipediaItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_WIKIPEDIA, false);
+               onlineMenu.add(_lookupWikipediaItem);
+               JMenuItem searchWikipediaNamesItem = makeMenuItem(FunctionLibrary.FUNCTION_SEARCH_WIKIPEDIA);
+               onlineMenu.add(searchWikipediaNamesItem);
+               _downloadOsmItem = makeMenuItem(FunctionLibrary.FUNCTION_DOWNLOAD_OSM, false);
+               onlineMenu.add(_downloadOsmItem);
+               onlineMenu.addSeparator();
+               _getWeatherItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_WEATHER_FORECAST, false);
+               onlineMenu.add(_getWeatherItem);
+               menubar.add(onlineMenu);
+
+               ////////////////////////////////////////////////////
                // Track menu
                JMenu trackMenu = new JMenu(I18nManager.getText("menu.track"));
                setAltKey(trackMenu, "altkey.menu.track");
@@ -298,20 +338,15 @@ public class MenuManager implements DataSubscriber
                rearrangeNearestItem.setEnabled(true);
                _rearrangeMenu.add(rearrangeNearestItem);
                trackMenu.add(_rearrangeMenu);
-               // Get gpsies tracks
-               _getGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_GPSIES, false);
-               trackMenu.add(_getGpsiesItem);
-               // Upload to gpsies
-               _uploadGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_UPLOAD_GPSIES, false);
-               trackMenu.add(_uploadGpsiesItem);
-               _lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM, false);
-               trackMenu.add(_lookupSrtmItem);
-               _lookupWikipediaItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_WIKIPEDIA, false);
-               trackMenu.add(_lookupWikipediaItem);
-               JMenuItem searchWikipediaNamesItem = makeMenuItem(FunctionLibrary.FUNCTION_SEARCH_WIKIPEDIA);
-               trackMenu.add(searchWikipediaNamesItem);
-               _downloadOsmItem = makeMenuItem(FunctionLibrary.FUNCTION_DOWNLOAD_OSM, false);
-               trackMenu.add(_downloadOsmItem);
+               // Split track segments
+               _splitSegmentsItem = makeMenuItem(FunctionLibrary.FUNCTION_SPLIT_SEGMENTS, false);
+               trackMenu.add(_splitSegmentsItem);
+               // Sew track segments
+               _sewSegmentsItem = makeMenuItem(FunctionLibrary.FUNCTION_SEW_SEGMENTS, false);
+               trackMenu.add(_sewSegmentsItem);
+               trackMenu.addSeparator();
+               _learnEstimationParams = makeMenuItem(FunctionLibrary.FUNCTION_LEARN_ESTIMATION_PARAMS, false);
+               trackMenu.add(_learnEstimationParams);
                menubar.add(trackMenu);
 
                // Range menu
@@ -450,7 +485,7 @@ public class MenuManager implements DataSubscriber
                        public void actionPerformed(ActionEvent e) {
                                Config.setConfigBoolean(Config.KEY_SHOW_MAP, _mapCheckbox.isSelected());
                                UpdateMessageBroker.informSubscribers(MAPSERVER_CHANGED);
-                       }
+                       }
                });
                viewMenu.add(_mapCheckbox);
                // Turn off the sidebars
@@ -508,12 +543,16 @@ public class MenuManager implements DataSubscriber
                // Charts
                _chartItem = makeMenuItem(FunctionLibrary.FUNCTION_CHARTS, false);
                viewMenu.add(_chartItem);
+               viewMenu.addSeparator();
                // Distances
                _distanceItem = makeMenuItem(FunctionLibrary.FUNCTION_DISTANCES, false);
                viewMenu.add(_distanceItem);
                // full range details
                _fullRangeDetailsItem = makeMenuItem(FunctionLibrary.FUNCTION_FULL_RANGE_DETAILS, false);
                viewMenu.add(_fullRangeDetailsItem);
+               // estimate time
+               _estimateTimeItem = makeMenuItem(FunctionLibrary.FUNCTION_ESTIMATE_TIME, false);
+               viewMenu.add(_estimateTimeItem);
                menubar.add(viewMenu);
 
                // Add photo menu
@@ -613,8 +652,6 @@ public class MenuManager implements DataSubscriber
                settingsMenu.add(_onlineCheckbox);
                settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_DISK_CACHE));
                settingsMenu.addSeparator();
-               // Set kmz image size
-               settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_KMZ_IMAGE_SIZE));
                // Set program paths
                settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS));
                // Set colours
@@ -825,22 +862,27 @@ public class MenuManager implements DataSubscriber
         */
        public void dataUpdated(byte inUpdateType)
        {
-               boolean hasData = (_track != null && _track.getNumPoints() > 0);
+               final boolean hasData = _track != null && _track.getNumPoints() > 0;
+               final boolean hasMultiplePoints = hasData && _track.getNumPoints() > 1;
+
                // set functions which require data
                _sendGpsItem.setEnabled(hasData);
                _saveItem.setEnabled(hasData);
                _saveButton.setEnabled(hasData);
                _exportKmlItem.setEnabled(hasData);
                _exportGpxItem.setEnabled(hasData);
-               _exportPovItem.setEnabled(hasData);
-               _exportSvgItem.setEnabled(hasData);
+               _exportPovItem.setEnabled(hasMultiplePoints);
+               _exportSvgItem.setEnabled(hasMultiplePoints);
+               _exportImageItem.setEnabled(hasMultiplePoints);
                _compressItem.setEnabled(hasData);
                _markRectangleItem.setEnabled(hasData);
                _deleteMarkedPointsItem.setEnabled(hasData && _track.hasMarkedPoints());
                _rearrangeMenu.setEnabled(hasData && _track.hasTrackPoints() && _track.hasWaypoints());
+               _splitSegmentsItem.setEnabled(hasData && _track.hasTrackPoints() && _track.getNumPoints() > 3);
+               _sewSegmentsItem.setEnabled(hasData && _track.hasTrackPoints() && _track.getNumPoints() > 3);
                _selectAllItem.setEnabled(hasData);
                _selectNoneItem.setEnabled(hasData);
-               _show3dItem.setEnabled(hasData);
+               _show3dItem.setEnabled(hasMultiplePoints);
                _chartItem.setEnabled(hasData);
                _browserMapMenu.setEnabled(hasData);
                _distanceItem.setEnabled(hasData);
@@ -849,7 +891,11 @@ public class MenuManager implements DataSubscriber
                _lookupSrtmItem.setEnabled(hasData);
                _lookupWikipediaItem.setEnabled(hasData);
                _downloadOsmItem.setEnabled(hasData);
+               _getWeatherItem.setEnabled(hasData);
                _findWaypointItem.setEnabled(hasData && _track.hasWaypoints());
+               // have we got a cache?
+               _downloadSrtmItem.setEnabled(hasData && Config.getConfigString(Config.KEY_DISK_CACHE) != null);
+
                // is undo available?
                boolean hasUndo = !_app.getUndoStack().isEmpty();
                _undoItem.setEnabled(hasUndo);
@@ -882,7 +928,7 @@ public class MenuManager implements DataSubscriber
                _connectButton.setEnabled(connectAvailable);
                _disconnectPhotoItem.setEnabled(hasPhoto && currentPhoto.getDataPoint() != null);
                _correlatePhotosItem.setEnabled(anyPhotos && hasData);
-               _rearrangePhotosItem.setEnabled(anyPhotos && hasData && _track.getNumPoints() > 1);
+               _rearrangePhotosItem.setEnabled(anyPhotos && hasMultiplePoints);
                _removePhotoItem.setEnabled(hasPhoto);
                _rotatePhotoLeft.setEnabled(hasPhoto);
                _rotatePhotoRight.setEnabled(hasPhoto);
@@ -909,6 +955,9 @@ public class MenuManager implements DataSubscriber
                _convertNamesToTimesItem.setEnabled(hasRange && _track.hasWaypoints());
                _deleteFieldValuesItem.setEnabled(hasRange);
                _fullRangeDetailsItem.setEnabled(hasRange);
+               _estimateTimeItem.setEnabled(hasRange);
+               _learnEstimationParams.setEnabled(hasData && _track.hasTrackPoints() && _track.hasData(Field.TIMESTAMP)
+                       && _track.hasAltitudeData());
                // Is the currently selected point outside the current range?
                boolean canCutAndMove = hasRange && hasPoint &&
                        (_selection.getCurrentPointIndex() < _selection.getStart()