X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fgui%2FMenuManager.java;h=08ecf18677ed08ad8c2eb3023f5daec0c6c0b33b;hb=92dad5df664287acb51728e9ea599f150765d34a;hp=d2be8adbe7544f4684a46ab479d20316b84abacd;hpb=326f489e36aa7f235bc19409a57bf4955cd50f24;p=GpsPrune.git diff --git a/tim/prune/gui/MenuManager.java b/tim/prune/gui/MenuManager.java index d2be8ad..08ecf18 100644 --- a/tim/prune/gui/MenuManager.java +++ b/tim/prune/gui/MenuManager.java @@ -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.DataPoint; import tim.prune.data.Field; import tim.prune.data.Photo; import tim.prune.data.RecentFile; @@ -28,8 +29,11 @@ import tim.prune.data.RecentFileList; import tim.prune.data.Selection; import tim.prune.data.Track; import tim.prune.data.TrackInfo; -import tim.prune.function.RearrangeWaypointsFunction.Rearrange; +import tim.prune.function.ChooseSingleParameter; +import tim.prune.function.SearchOpenCachingDeFunction; import tim.prune.function.browser.UrlGenerator; +import tim.prune.function.browser.WebMapFunction; +import tim.prune.function.search.SearchMapillaryFunction; /** * Class to manage the menu bar and tool bar, @@ -47,7 +51,6 @@ public class MenuManager implements DataSubscriber private JMenuItem _exportKmlItem = null; private JMenuItem _exportGpxItem = null; private JMenuItem _exportPovItem = null; - private JMenuItem _exportSvgItem = null; private JMenuItem _exportImageItem = null; private JMenu _recentFileMenu = null; private JMenuItem _undoItem = null; @@ -59,11 +62,14 @@ public class MenuManager implements DataSubscriber private JMenuItem _cropTrackItem = null; private JMenuItem _compressItem = null; private JMenuItem _markRectangleItem = null; + private JMenuItem _markUphillLiftsItem = null; private JMenuItem _deleteMarkedPointsItem = null; + private JMenuItem _deleteByDateItem = null; private JMenuItem _interpolateItem = null; private JMenuItem _averageItem = null; private JMenuItem _selectAllItem = null; private JMenuItem _selectNoneItem = null; + private JMenuItem _selectSegmentItem = null; private JMenuItem _selectStartItem = null; private JMenuItem _selectEndItem = null; private JMenuItem _findWaypointItem = null; @@ -72,9 +78,10 @@ public class MenuManager implements DataSubscriber private JMenuItem _addTimeOffsetItem = null; private JMenuItem _addAltitudeOffsetItem = null; private JMenuItem _mergeSegmentsItem = null; - private JMenu _rearrangeMenu = null; + private JMenuItem _rearrangeWaypointsItem = null; private JMenuItem _splitSegmentsItem = null; private JMenuItem _sewSegmentsItem = null; + private JMenuItem _createMarkerWaypointsItem = null; private JMenuItem _cutAndMoveItem = null; private JMenuItem _convertNamesToTimesItem = null; private JMenuItem _deleteFieldValuesItem = null; @@ -86,13 +93,19 @@ public class MenuManager implements DataSubscriber private JMenuItem _uploadGpsiesItem = null; private JMenuItem _lookupSrtmItem = null; private JMenuItem _downloadSrtmItem = null; - private JMenuItem _lookupWikipediaItem = null; + private JMenuItem _nearbyWikipediaItem = null; + private JMenuItem _nearbyOsmPoiItem = null; + private JMenuItem _showPeakfinderItem = null; + private JMenuItem _showGeohackItem = null; + private JMenuItem _searchOpencachingDeItem = null; + private JMenuItem _searchMapillaryItem = 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 _autoplayTrack = null; private JMenuItem _saveExifItem = null; private JMenuItem _photoPopupItem = null; private JMenuItem _selectNoPhotoItem = null; @@ -222,9 +235,6 @@ public class MenuManager implements DataSubscriber // Pov _exportPovItem = makeMenuItem(FunctionLibrary.FUNCTION_POVEXPORT, false); fileMenu.add(_exportPovItem); - // Svg - _exportSvgItem = makeMenuItem(FunctionLibrary.FUNCTION_SVGEXPORT, false); - fileMenu.add(_exportSvgItem); // Image _exportImageItem = makeMenuItem(FunctionLibrary.FUNCTION_IMAGEEXPORT, false); fileMenu.add(_exportImageItem); @@ -254,14 +264,41 @@ public class MenuManager implements DataSubscriber // 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); + // browser submenu + _browserMapMenu = new JMenu(I18nManager.getText("menu.view.browser")); + _browserMapMenu.setEnabled(false); + JMenuItem googleMapsItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_GOOGLE, "menu.view.browser.google")); + _browserMapMenu.add(googleMapsItem); + JMenuItem openMapsItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_OSM, "menu.view.browser.openstreetmap")); + _browserMapMenu.add(openMapsItem); + JMenuItem mapquestMapsItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_MAPQUEST, "menu.view.browser.mapquest")); + _browserMapMenu.add(mapquestMapsItem); + JMenuItem yahooMapsItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_YAHOO, "menu.view.browser.yahoo")); + _browserMapMenu.add(yahooMapsItem); + JMenuItem bingMapsItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_BING, "menu.view.browser.bing")); + _browserMapMenu.add(bingMapsItem); + onlineMenu.add(_browserMapMenu); + // wikipedia + _nearbyWikipediaItem = makeMenuItem(FunctionLibrary.FUNCTION_NEARBY_WIKIPEDIA, false); + onlineMenu.add(_nearbyWikipediaItem); JMenuItem searchWikipediaNamesItem = makeMenuItem(FunctionLibrary.FUNCTION_SEARCH_WIKIPEDIA); onlineMenu.add(searchWikipediaNamesItem); + _nearbyOsmPoiItem = makeMenuItem(FunctionLibrary.FUNCTION_SEARCH_OSMPOIS); + onlineMenu.add(_nearbyOsmPoiItem); + _showPeakfinderItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_PEAKFINDER, "webservice.peakfinder"), false); + onlineMenu.add(_showPeakfinderItem); + _showGeohackItem = makeMenuItem(new WebMapFunction(_app, UrlGenerator.WebService.MAP_SOURCE_GEOHACK, "webservice.geohack"), false); + onlineMenu.add(_showGeohackItem); + + onlineMenu.addSeparator(); + _searchOpencachingDeItem = makeMenuItem(new SearchOpenCachingDeFunction(_app), false); + onlineMenu.add(_searchOpencachingDeItem); + _searchMapillaryItem = makeMenuItem(new SearchMapillaryFunction(_app), false); + onlineMenu.add(_searchMapillaryItem); _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); @@ -301,49 +338,25 @@ public class MenuManager implements DataSubscriber }); _markRectangleItem.setEnabled(false); trackMenu.add(_markRectangleItem); - _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.track.deletemarked")); - _deleteMarkedPointsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.finishCompressTrack(); - } - }); - _deleteMarkedPointsItem.setEnabled(false); + _markUphillLiftsItem = makeMenuItem(FunctionLibrary.FUNCTION_MARK_LIFTS, false); + trackMenu.add(_markUphillLiftsItem); + _deleteMarkedPointsItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_MARKED_POINTS, false); trackMenu.add(_deleteMarkedPointsItem); + _deleteByDateItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_BY_DATE, false); + trackMenu.add(_deleteByDateItem); trackMenu.addSeparator(); // Rearrange waypoints - _rearrangeMenu = new JMenu(I18nManager.getText("menu.track.rearrange")); - _rearrangeMenu.setEnabled(false); - JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.start")); - rearrangeStartItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_START); - } - }); - rearrangeStartItem.setEnabled(true); - _rearrangeMenu.add(rearrangeStartItem); - JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.end")); - rearrangeEndItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_END); - } - }); - rearrangeEndItem.setEnabled(true); - _rearrangeMenu.add(rearrangeEndItem); - JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.nearest")); - rearrangeNearestItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_NEAREST); - } - }); - rearrangeNearestItem.setEnabled(true); - _rearrangeMenu.add(rearrangeNearestItem); - trackMenu.add(_rearrangeMenu); + _rearrangeWaypointsItem = makeMenuItem(FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS, false); + trackMenu.add(_rearrangeWaypointsItem); // 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); + // Create marker waypoints + _createMarkerWaypointsItem = makeMenuItem(FunctionLibrary.FUNCTION_CREATE_MARKER_WAYPOINTS, false); + trackMenu.add(_createMarkerWaypointsItem); trackMenu.addSeparator(); _learnEstimationParams = makeMenuItem(FunctionLibrary.FUNCTION_LEARN_ESTIMATION_PARAMS, false); trackMenu.add(_learnEstimationParams); @@ -369,6 +382,8 @@ public class MenuManager implements DataSubscriber } }); rangeMenu.add(_selectNoneItem); + _selectSegmentItem = makeMenuItem(FunctionLibrary.FUNCTION_SELECT_SEGMENT); + rangeMenu.add(_selectSegmentItem); rangeMenu.addSeparator(); _selectStartItem = new JMenuItem(I18nManager.getText("menu.range.start")); _selectStartItem.setEnabled(false); @@ -416,7 +431,7 @@ public class MenuManager implements DataSubscriber _deleteFieldValuesItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_FIELD_VALUES, false); rangeMenu.add(_deleteFieldValuesItem); rangeMenu.addSeparator(); - _interpolateItem = makeMenuItem(FunctionLibrary.FUNCTION_INTERPOLATE, false); + _interpolateItem = makeMenuItem(new ChooseSingleParameter(_app, FunctionLibrary.FUNCTION_INTERPOLATE), false); rangeMenu.add(_interpolateItem); _averageItem = new JMenuItem(I18nManager.getText("menu.range.average")); _averageItem.addActionListener(new ActionListener() { @@ -501,45 +516,6 @@ public class MenuManager implements DataSubscriber // 3d _show3dItem = makeMenuItem(FunctionLibrary.FUNCTION_3D, false); viewMenu.add(_show3dItem); - // browser submenu - _browserMapMenu = new JMenu(I18nManager.getText("menu.view.browser")); - _browserMapMenu.setEnabled(false); - JMenuItem googleMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.google")); - googleMapsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.showExternalMap(UrlGenerator.MAP_SOURCE_GOOGLE); - } - }); - _browserMapMenu.add(googleMapsItem); - JMenuItem openMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.openstreetmap")); - openMapsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.showExternalMap(UrlGenerator.MAP_SOURCE_OSM); - } - }); - _browserMapMenu.add(openMapsItem); - JMenuItem mapquestMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.mapquest")); - mapquestMapsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.showExternalMap(UrlGenerator.MAP_SOURCE_MAPQUEST); - } - }); - _browserMapMenu.add(mapquestMapsItem); - JMenuItem yahooMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.yahoo")); - yahooMapsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.showExternalMap(UrlGenerator.MAP_SOURCE_YAHOO); - } - }); - _browserMapMenu.add(yahooMapsItem); - JMenuItem bingMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.bing")); - bingMapsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.showExternalMap(UrlGenerator.MAP_SOURCE_BING); - } - }); - _browserMapMenu.add(bingMapsItem); - viewMenu.add(_browserMapMenu); // Charts _chartItem = makeMenuItem(FunctionLibrary.FUNCTION_CHARTS, false); viewMenu.add(_chartItem); @@ -553,6 +529,10 @@ public class MenuManager implements DataSubscriber // estimate time _estimateTimeItem = makeMenuItem(FunctionLibrary.FUNCTION_ESTIMATE_TIME, false); viewMenu.add(_estimateTimeItem); + viewMenu.addSeparator(); + // autoplay + _autoplayTrack = makeMenuItem(FunctionLibrary.FUNCTION_AUTOPLAY_TRACK, false); + viewMenu.add(_autoplayTrack); menubar.add(viewMenu); // Add photo menu @@ -656,10 +636,15 @@ public class MenuManager implements DataSubscriber settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS)); // Set colours settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_COLOURS)); - // Set line width used for drawing - settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_LINE_WIDTH)); + // display settings + JMenuItem setDisplaySettingsItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_DISPLAY_SETTINGS); + settingsMenu.add(setDisplaySettingsItem); // Set language settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_LANGUAGE)); + // Set altitude tolerance + settingsMenu.add(makeMenuItem(new ChooseSingleParameter(_app, FunctionLibrary.FUNCTION_SET_ALTITUDE_TOLERANCE))); + // Set timezone + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_TIMEZONE)); settingsMenu.addSeparator(); // Save configuration settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SAVECONFIG)); @@ -872,29 +857,35 @@ public class MenuManager implements DataSubscriber _exportKmlItem.setEnabled(hasData); _exportGpxItem.setEnabled(hasData); _exportPovItem.setEnabled(hasMultiplePoints); - _exportSvgItem.setEnabled(hasMultiplePoints); _exportImageItem.setEnabled(hasMultiplePoints); _compressItem.setEnabled(hasData); _markRectangleItem.setEnabled(hasData); + _markUphillLiftsItem.setEnabled(hasData && _track.hasAltitudeData()); _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); + _rearrangeWaypointsItem.setEnabled(hasData && _track.hasTrackPoints() && _track.hasWaypoints()); + final boolean hasSeveralTrackPoints = hasData && _track.hasTrackPoints() && _track.getNumPoints() > 3; + _splitSegmentsItem.setEnabled(hasSeveralTrackPoints); + _sewSegmentsItem.setEnabled(hasSeveralTrackPoints); + _createMarkerWaypointsItem.setEnabled(hasSeveralTrackPoints); _selectAllItem.setEnabled(hasData); _selectNoneItem.setEnabled(hasData); _show3dItem.setEnabled(hasMultiplePoints); _chartItem.setEnabled(hasData); _browserMapMenu.setEnabled(hasData); _distanceItem.setEnabled(hasData); + _autoplayTrack.setEnabled(hasData && _track.getNumPoints() > 3); _getGpsiesItem.setEnabled(hasData); _uploadGpsiesItem.setEnabled(hasData && _track.hasTrackPoints()); _lookupSrtmItem.setEnabled(hasData); - _lookupWikipediaItem.setEnabled(hasData); + _nearbyWikipediaItem.setEnabled(hasData); + _nearbyOsmPoiItem.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); + // have we got any timestamps? + _deleteByDateItem.setEnabled(hasData && _track.hasData(Field.TIMESTAMP)); // is undo available? boolean hasUndo = !_app.getUndoStack().isEmpty(); @@ -902,7 +893,8 @@ public class MenuManager implements DataSubscriber _undoButton.setEnabled(hasUndo); _clearUndoItem.setEnabled(hasUndo); // is there a current point? - boolean hasPoint = (hasData && _selection.getCurrentPointIndex() >= 0); + DataPoint currPoint = _app.getTrackInfo().getCurrentPoint(); + boolean hasPoint = (currPoint != null); _editPointItem.setEnabled(hasPoint); _editPointButton.setEnabled(hasPoint); _editWaypointNameItem.setEnabled(hasPoint); @@ -913,6 +905,12 @@ public class MenuManager implements DataSubscriber _selectEndItem.setEnabled(hasPoint); _selectEndButton.setEnabled(hasPoint); _duplicatePointItem.setEnabled(hasPoint); + _showPeakfinderItem.setEnabled(hasPoint); + _showGeohackItem.setEnabled(hasPoint); + _searchOpencachingDeItem.setEnabled(hasPoint); + _searchMapillaryItem.setEnabled(hasPoint); + // is it a waypoint? + _selectSegmentItem.setEnabled(hasPoint && !currPoint.isWaypoint()); // are there any photos? boolean anyPhotos = _app.getTrackInfo().getPhotoList().getNumPhotos() > 0; _saveExifItem.setEnabled(anyPhotos && _app.getTrackInfo().getPhotoList().hasMediaWithFile()); @@ -939,7 +937,7 @@ public class MenuManager implements DataSubscriber _selectNoAudioItem.setEnabled(hasAudio); _removeAudioItem.setEnabled(hasAudio); _connectAudioItem.setEnabled(hasAudio && hasPoint && currentAudio.getDataPoint() == null); - _disconnectAudioItem.setEnabled(hasAudio && _app.getTrackInfo().getCurrentAudio().getDataPoint() != null); + _disconnectAudioItem.setEnabled(hasAudio && currentAudio.getDataPoint() != null); _correlateAudiosItem.setEnabled(anyAudios && hasData); // is there a current range? boolean hasRange = (hasData && _selection.hasRangeSelected()); @@ -983,8 +981,9 @@ public class MenuManager implements DataSubscriber for (int i=0; i