X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fgui%2FMenuManager.java;h=d2be8adbe7544f4684a46ab479d20316b84abacd;hb=326f489e36aa7f235bc19409a57bf4955cd50f24;hp=8229aa322fb58458db950de8eabdb27f9e16ddeb;hpb=649c5da6ee1bbc590699e11a92316ece2ea8512d;p=GpsPrune.git diff --git a/tim/prune/gui/MenuManager.java b/tim/prune/gui/MenuManager.java index 8229aa3..d2be8ad 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.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; @@ -54,7 +56,9 @@ public class MenuManager implements DataSubscriber private JMenuItem _editWaypointNameItem = null; private JMenuItem _deletePointItem = null; private JMenuItem _deleteRangeItem = null; + private JMenuItem _cropTrackItem = null; private JMenuItem _compressItem = null; + private JMenuItem _markRectangleItem = null; private JMenuItem _deleteMarkedPointsItem = null; private JMenuItem _interpolateItem = null; private JMenuItem _averageItem = null; @@ -69,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; @@ -79,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; @@ -109,7 +119,6 @@ public class MenuManager implements DataSubscriber private ActionListener _undoAction = null; private ActionListener _editPointAction = null; private ActionListener _deletePointAction = null; - private ActionListener _deleteRangeAction = null; private ActionListener _selectStartAction = null; private ActionListener _selectEndAction = null; @@ -119,6 +128,7 @@ public class MenuManager implements DataSubscriber private JButton _editPointButton = null; private JButton _deletePointButton = null; private JButton _deleteRangeButton = null; + private JButton _cutAndMoveButton = null; private JButton _selectStartButton = null; private JButton _selectEndButton = null; private JButton _connectButton = null; @@ -215,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) { @@ -225,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"); @@ -250,6 +292,15 @@ public class MenuManager implements DataSubscriber _compressItem = makeMenuItem(FunctionLibrary.FUNCTION_COMPRESS, false); setShortcut(_compressItem, "shortcut.menu.edit.compress"); trackMenu.add(_compressItem); + _markRectangleItem = new JMenuItem(I18nManager.getText("menu.track.markrectangle")); + _markRectangleItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + _app.setCurrentMode(App.AppMode.DRAWRECT); + UpdateMessageBroker.informSubscribers(); + } + }); + _markRectangleItem.setEnabled(false); + trackMenu.add(_markRectangleItem); _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.track.deletemarked")); _deleteMarkedPointsItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -287,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 @@ -343,15 +389,10 @@ public class MenuManager implements DataSubscriber _selectEndItem.addActionListener(_selectEndAction); rangeMenu.add(_selectEndItem); rangeMenu.addSeparator(); - _deleteRangeItem = new JMenuItem(I18nManager.getText("menu.range.deleterange")); - _deleteRangeAction = new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.deleteSelectedRange(); - } - }; - _deleteRangeItem.addActionListener(_deleteRangeAction); - _deleteRangeItem.setEnabled(false); + _deleteRangeItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_RANGE, false); rangeMenu.add(_deleteRangeItem); + _cropTrackItem = makeMenuItem(FunctionLibrary.FUNCTION_CROP_TRACK, false); + rangeMenu.add(_cropTrackItem); _reverseItem = new JMenuItem(I18nManager.getText("menu.range.reverse")); _reverseItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -375,13 +416,7 @@ public class MenuManager implements DataSubscriber _deleteFieldValuesItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_FIELD_VALUES, false); rangeMenu.add(_deleteFieldValuesItem); rangeMenu.addSeparator(); - _interpolateItem = new JMenuItem(I18nManager.getText("menu.range.interpolate")); - _interpolateItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - _app.interpolateSelection(); - } - }); - _interpolateItem.setEnabled(false); + _interpolateItem = makeMenuItem(FunctionLibrary.FUNCTION_INTERPOLATE, false); rangeMenu.add(_interpolateItem); _averageItem = new JMenuItem(I18nManager.getText("menu.range.average")); _averageItem.addActionListener(new ActionListener() { @@ -449,7 +484,7 @@ public class MenuManager implements DataSubscriber _mapCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Config.setConfigBoolean(Config.KEY_SHOW_MAP, _mapCheckbox.isSelected()); - UpdateMessageBroker.informSubscribers(); + UpdateMessageBroker.informSubscribers(MAPSERVER_CHANGED); } }); viewMenu.add(_mapCheckbox); @@ -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 @@ -761,10 +798,24 @@ public class MenuManager implements DataSubscriber toolbar.add(_deletePointButton); // Delete range _deleteRangeButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_RANGE)); - _deleteRangeButton.setToolTipText(I18nManager.getText("menu.range.deleterange")); - _deleteRangeButton.addActionListener(_deleteRangeAction); + _deleteRangeButton.setToolTipText(I18nManager.getText("function.deleterange")); + _deleteRangeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + FunctionLibrary.FUNCTION_DELETE_RANGE.begin(); + } + }); _deleteRangeButton.setEnabled(false); toolbar.add(_deleteRangeButton); + // Cut and move + _cutAndMoveButton = new JButton(IconManager.getImageIcon(IconManager.CUT_AND_MOVE)); + _cutAndMoveButton.setToolTipText(I18nManager.getText("menu.range.cutandmove")); + _cutAndMoveButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + _app.cutAndMoveSelection(); + } + }); + _cutAndMoveButton.setEnabled(false); + toolbar.add(_cutAndMoveButton); // Select start, end _selectStartButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_START)); _selectStartButton.setToolTipText(I18nManager.getText("menu.range.start")); @@ -811,21 +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); @@ -834,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); @@ -867,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); @@ -884,8 +945,8 @@ public class MenuManager implements DataSubscriber boolean hasRange = (hasData && _selection.hasRangeSelected()); _deleteRangeItem.setEnabled(hasRange); _deleteRangeButton.setEnabled(hasRange); - _interpolateItem.setEnabled(hasRange - && (_selection.getEnd() - _selection.getStart()) == 1); + _cropTrackItem.setEnabled(hasRange); + _interpolateItem.setEnabled(hasRange); _averageItem.setEnabled(hasRange); _mergeSegmentsItem.setEnabled(hasRange); _reverseItem.setEnabled(hasRange); @@ -894,10 +955,15 @@ 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? - _cutAndMoveItem.setEnabled(hasRange && hasPoint && + boolean canCutAndMove = hasRange && hasPoint && (_selection.getCurrentPointIndex() < _selection.getStart() - || _selection.getCurrentPointIndex() > (_selection.getEnd()+1))); + || _selection.getCurrentPointIndex() > (_selection.getEnd()+1)); + _cutAndMoveItem.setEnabled(canCutAndMove); + _cutAndMoveButton.setEnabled(canCutAndMove); // Has the map been switched on/off? boolean mapsOn = Config.getConfigBoolean(Config.KEY_SHOW_MAP); if (_mapCheckbox.isSelected() != mapsOn) {