X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fgui%2FMenuManager.java;h=588b49e2e81ca3e5e318e2ef65d7decd93e8f9e7;hb=6814c830d470f73c7ec57c71235de333f5ea4279;hp=cbf25af7df581e91940ff1a64b76da3fbc487b83;hpb=112bb0c9b46894adca9a33ed8c99ea712b253185;p=GpsPrune.git diff --git a/tim/prune/gui/MenuManager.java b/tim/prune/gui/MenuManager.java index cbf25af..588b49e 100644 --- a/tim/prune/gui/MenuManager.java +++ b/tim/prune/gui/MenuManager.java @@ -1,8 +1,8 @@ package tim.prune.gui; +import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.JButton; @@ -14,12 +14,13 @@ import javax.swing.JToolBar; import javax.swing.KeyStroke; import tim.prune.App; -import tim.prune.Config; import tim.prune.DataSubscriber; import tim.prune.FunctionLibrary; import tim.prune.GenericFunction; import tim.prune.I18nManager; import tim.prune.UpdateMessageBroker; +import tim.prune.config.Config; +import tim.prune.data.Photo; import tim.prune.data.PhotoList; import tim.prune.data.Selection; import tim.prune.data.Track; @@ -44,6 +45,7 @@ public class MenuManager implements DataSubscriber private JMenuItem _exportKmlItem = null; private JMenuItem _exportGpxItem = null; private JMenuItem _exportPovItem = null; + private JMenuItem _exportSvgItem = null; private JMenuItem _undoItem = null; private JMenuItem _clearUndoItem = null; private JMenuItem _editPointItem = null; @@ -59,23 +61,35 @@ public class MenuManager implements DataSubscriber private JMenuItem _selectStartItem = null; private JMenuItem _selectEndItem = null; private JMenuItem _findWaypointItem = null; + private JMenuItem _duplicatePointItem = null; private JMenuItem _reverseItem = null; private JMenuItem _addTimeOffsetItem = null; private JMenuItem _addAltitudeOffsetItem = null; private JMenuItem _mergeSegmentsItem = null; private JMenu _rearrangeMenu = null; private JMenuItem _cutAndMoveItem = null; + private JMenuItem _convertNamesToTimesItem = null; + private JMenuItem _deleteFieldValuesItem = null; + private JCheckBoxMenuItem _mapCheckbox = null; private JMenuItem _show3dItem = null; private JMenu _browserMapMenu = null; private JMenuItem _chartItem = null; - private JCheckBoxMenuItem _paceCheckbox = null; private JMenuItem _getGpsiesItem = null; + private JMenuItem _uploadGpsiesItem = null; + private JMenuItem _lookupSrtmItem = null; private JMenuItem _distanceItem = null; + private JMenuItem _fullRangeDetailsItem = null; private JMenuItem _saveExifItem = null; + private JMenuItem _selectNoPhotoItem = null; private JMenuItem _connectPhotoItem = null; private JMenuItem _deletePhotoItem = null; private JMenuItem _disconnectPhotoItem = null; private JMenuItem _correlatePhotosItem = null; + private JMenuItem _rearrangePhotosItem = null; + private JMenuItem _rotatePhotoLeft = null; + private JMenuItem _rotatePhotoRight = null; + private JMenuItem _ignoreExifThumb = null; + private JCheckBoxMenuItem _onlineCheckbox = null; // ActionListeners for reuse by menu and toolbar private ActionListener _openFileAction = null; @@ -132,7 +146,7 @@ public class MenuManager implements DataSubscriber JMenu fileMenu = new JMenu(I18nManager.getText("menu.file")); setAltKey(fileMenu, "altkey.menu.file"); // Open file - JMenuItem openMenuItem = new JMenuItem(I18nManager.getText("menu.file.open")); + JMenuItem openMenuItem = new JMenuItem(I18nManager.getText("function.open")); setShortcut(openMenuItem, "shortcut.menu.file.open"); _openFileAction = new ActionListener() { public void actionPerformed(ActionEvent e) @@ -186,6 +200,10 @@ public class MenuManager implements DataSubscriber _exportPovItem = makeMenuItem(FunctionLibrary.FUNCTION_POVEXPORT); _exportPovItem.setEnabled(false); fileMenu.add(_exportPovItem); + // Svg + _exportSvgItem = makeMenuItem(FunctionLibrary.FUNCTION_SVGEXPORT); + _exportSvgItem.setEnabled(false); + fileMenu.add(_exportSvgItem); fileMenu.addSeparator(); JMenuItem exitMenuItem = new JMenuItem(I18nManager.getText("menu.file.exit")); exitMenuItem.addActionListener(new ActionListener() { @@ -196,11 +214,11 @@ public class MenuManager implements DataSubscriber }); fileMenu.add(exitMenuItem); menubar.add(fileMenu); - // Edit menu - JMenu editMenu = new JMenu(I18nManager.getText("menu.edit")); - setAltKey(editMenu, "altkey.menu.edit"); - _undoItem = new JMenuItem(I18nManager.getText("menu.edit.undo")); - setShortcut(_undoItem, "shortcut.menu.edit.undo"); + // Track menu + JMenu trackMenu = new JMenu(I18nManager.getText("menu.track")); + setAltKey(trackMenu, "altkey.menu.track"); + _undoItem = new JMenuItem(I18nManager.getText("menu.track.undo")); + setShortcut(_undoItem, "shortcut.menu.track.undo"); _undoAction = new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -209,8 +227,8 @@ public class MenuManager implements DataSubscriber }; _undoItem.addActionListener(_undoAction); _undoItem.setEnabled(false); - editMenu.add(_undoItem); - _clearUndoItem = new JMenuItem(I18nManager.getText("menu.edit.clearundo")); + trackMenu.add(_undoItem); + _clearUndoItem = new JMenuItem(I18nManager.getText("menu.track.clearundo")); _clearUndoItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -218,47 +236,13 @@ public class MenuManager implements DataSubscriber } }); _clearUndoItem.setEnabled(false); - editMenu.add(_clearUndoItem); - editMenu.addSeparator(); - _editPointItem = new JMenuItem(I18nManager.getText("menu.edit.editpoint")); - _editPointAction = new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.editCurrentPoint(); - } - }; - _editPointItem.addActionListener(_editPointAction); - _editPointItem.setEnabled(false); - editMenu.add(_editPointItem); - _editWaypointNameItem = makeMenuItem(FunctionLibrary.FUNCTION_EDIT_WAYPOINT_NAME); - _editWaypointNameItem.setEnabled(false); - editMenu.add(_editWaypointNameItem); - _deletePointItem = new JMenuItem(I18nManager.getText("menu.edit.deletepoint")); - _deletePointAction = new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.deleteCurrentPoint(); - } - }; - _deletePointItem.addActionListener(_deletePointAction); - _deletePointItem.setEnabled(false); - editMenu.add(_deletePointItem); - _deleteRangeItem = new JMenuItem(I18nManager.getText("menu.edit.deleterange")); - _deleteRangeAction = new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.deleteSelectedRange(); - } - }; - _deleteRangeItem.addActionListener(_deleteRangeAction); - _deleteRangeItem.setEnabled(false); - editMenu.add(_deleteRangeItem); - editMenu.addSeparator(); + trackMenu.add(_clearUndoItem); + trackMenu.addSeparator(); _compressItem = makeMenuItem(FunctionLibrary.FUNCTION_COMPRESS); setShortcut(_compressItem, "shortcut.menu.edit.compress"); _compressItem.setEnabled(false); - editMenu.add(_compressItem); - _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.edit.deletemarked")); + trackMenu.add(_compressItem); + _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.track.deletemarked")); _deleteMarkedPointsItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -266,54 +250,12 @@ public class MenuManager implements DataSubscriber } }); _deleteMarkedPointsItem.setEnabled(false); - editMenu.add(_deleteMarkedPointsItem); - editMenu.addSeparator(); - _interpolateItem = new JMenuItem(I18nManager.getText("menu.edit.interpolate")); - _interpolateItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.interpolateSelection(); - } - }); - _interpolateItem.setEnabled(false); - editMenu.add(_interpolateItem); - _averageItem = new JMenuItem(I18nManager.getText("menu.edit.average")); - _averageItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.averageSelection(); - } - }); - _averageItem.setEnabled(false); - editMenu.add(_averageItem); - _reverseItem = new JMenuItem(I18nManager.getText("menu.edit.reverse")); - _reverseItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.reverseRange(); - } - }); - _reverseItem.setEnabled(false); - editMenu.add(_reverseItem); - _addTimeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_TIME_OFFSET); - _addTimeOffsetItem.setEnabled(false); - editMenu.add(_addTimeOffsetItem); - _addAltitudeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_ALTITUDE_OFFSET); - _addAltitudeOffsetItem.setEnabled(false); - editMenu.add(_addAltitudeOffsetItem); - _mergeSegmentsItem = new JMenuItem(I18nManager.getText("menu.edit.mergetracksegments")); - _mergeSegmentsItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.mergeTrackSegments(); - } - }); - _mergeSegmentsItem.setEnabled(false); - editMenu.add(_mergeSegmentsItem); + trackMenu.add(_deleteMarkedPointsItem); + trackMenu.addSeparator(); // Rearrange waypoints - _rearrangeMenu = new JMenu(I18nManager.getText("menu.edit.rearrange")); + _rearrangeMenu = new JMenu(I18nManager.getText("menu.track.rearrange")); _rearrangeMenu.setEnabled(false); - JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.start")); + JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.start")); rearrangeStartItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -322,7 +264,7 @@ public class MenuManager implements DataSubscriber }); rearrangeStartItem.setEnabled(true); _rearrangeMenu.add(rearrangeStartItem); - JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.end")); + JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.end")); rearrangeEndItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -331,7 +273,7 @@ public class MenuManager implements DataSubscriber }); rearrangeEndItem.setEnabled(true); _rearrangeMenu.add(rearrangeEndItem); - JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.nearest")); + JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.nearest")); rearrangeNearestItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -340,23 +282,25 @@ public class MenuManager implements DataSubscriber }); rearrangeNearestItem.setEnabled(true); _rearrangeMenu.add(rearrangeNearestItem); - editMenu.add(_rearrangeMenu); - _cutAndMoveItem = new JMenuItem(I18nManager.getText("menu.edit.cutandmove")); - _cutAndMoveItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) - { - _app.cutAndMoveSelection(); - } - }); - _cutAndMoveItem.setEnabled(false); - editMenu.add(_cutAndMoveItem); - menubar.add(editMenu); + trackMenu.add(_rearrangeMenu); + // Get gpsies tracks + _getGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_GPSIES); + _getGpsiesItem.setEnabled(false); + trackMenu.add(_getGpsiesItem); + // Upload to gpsies + _uploadGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_UPLOAD_GPSIES); + _uploadGpsiesItem.setEnabled(false); + trackMenu.add(_uploadGpsiesItem); + _lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM); + _lookupSrtmItem.setEnabled(false); + trackMenu.add(_lookupSrtmItem); + menubar.add(trackMenu); - // Select menu - JMenu selectMenu = new JMenu(I18nManager.getText("menu.select")); - setAltKey(selectMenu, "altkey.menu.select"); - _selectAllItem = new JMenuItem(I18nManager.getText("menu.select.all")); - setShortcut(_selectAllItem, "shortcut.menu.select.all"); + // Range menu + JMenu rangeMenu = new JMenu(I18nManager.getText("menu.range")); + setAltKey(rangeMenu, "altkey.menu.range"); + _selectAllItem = new JMenuItem(I18nManager.getText("menu.range.all")); + setShortcut(_selectAllItem, "shortcut.menu.range.all"); _selectAllItem.setEnabled(false); _selectAllItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -364,8 +308,8 @@ public class MenuManager implements DataSubscriber _selection.selectRange(0, _track.getNumPoints()-1); } }); - selectMenu.add(_selectAllItem); - _selectNoneItem = new JMenuItem(I18nManager.getText("menu.select.none")); + rangeMenu.add(_selectAllItem); + _selectNoneItem = new JMenuItem(I18nManager.getText("menu.range.none")); _selectNoneItem.setEnabled(false); _selectNoneItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -373,9 +317,9 @@ public class MenuManager implements DataSubscriber _app.selectNone(); } }); - selectMenu.add(_selectNoneItem); - selectMenu.addSeparator(); - _selectStartItem = new JMenuItem(I18nManager.getText("menu.select.start")); + rangeMenu.add(_selectNoneItem); + rangeMenu.addSeparator(); + _selectStartItem = new JMenuItem(I18nManager.getText("menu.range.start")); _selectStartItem.setEnabled(false); _selectStartAction = new ActionListener() { public void actionPerformed(ActionEvent e) @@ -384,8 +328,8 @@ public class MenuManager implements DataSubscriber } }; _selectStartItem.addActionListener(_selectStartAction); - selectMenu.add(_selectStartItem); - _selectEndItem = new JMenuItem(I18nManager.getText("menu.select.end")); + rangeMenu.add(_selectStartItem); + _selectEndItem = new JMenuItem(I18nManager.getText("menu.range.end")); _selectEndItem.setEnabled(false); _selectEndAction = new ActionListener() { public void actionPerformed(ActionEvent e) @@ -394,16 +338,142 @@ public class MenuManager implements DataSubscriber } }; _selectEndItem.addActionListener(_selectEndAction); - selectMenu.add(_selectEndItem); - selectMenu.addSeparator(); + 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); + rangeMenu.add(_deleteRangeItem); + _reverseItem = new JMenuItem(I18nManager.getText("menu.range.reverse")); + _reverseItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.reverseRange(); + } + }); + _reverseItem.setEnabled(false); + rangeMenu.add(_reverseItem); + _addTimeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_TIME_OFFSET); + _addTimeOffsetItem.setEnabled(false); + rangeMenu.add(_addTimeOffsetItem); + _addAltitudeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_ALTITUDE_OFFSET); + _addAltitudeOffsetItem.setEnabled(false); + rangeMenu.add(_addAltitudeOffsetItem); + _mergeSegmentsItem = new JMenuItem(I18nManager.getText("menu.range.mergetracksegments")); + _mergeSegmentsItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.mergeTrackSegments(); + } + }); + _mergeSegmentsItem.setEnabled(false); + rangeMenu.add(_mergeSegmentsItem); + _deleteFieldValuesItem = makeMenuItem(FunctionLibrary.FUNCTION_DELETE_FIELD_VALUES); + _deleteFieldValuesItem.setEnabled(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); + rangeMenu.add(_interpolateItem); + _averageItem = new JMenuItem(I18nManager.getText("menu.range.average")); + _averageItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.averageSelection(); + } + }); + _averageItem.setEnabled(false); + rangeMenu.add(_averageItem); + _cutAndMoveItem = new JMenuItem(I18nManager.getText("menu.range.cutandmove")); + _cutAndMoveItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.cutAndMoveSelection(); + } + }); + _cutAndMoveItem.setEnabled(false); + rangeMenu.add(_cutAndMoveItem); + _convertNamesToTimesItem = makeMenuItem(FunctionLibrary.FUNCTION_CONVERT_NAMES_TO_TIMES); + _convertNamesToTimesItem.setEnabled(false); + rangeMenu.add(_convertNamesToTimesItem); + menubar.add(rangeMenu); + + // Point menu + JMenu pointMenu = new JMenu(I18nManager.getText("menu.point")); + setAltKey(pointMenu, "altkey.menu.point"); + _editPointItem = new JMenuItem(I18nManager.getText("menu.point.editpoint")); + _editPointAction = new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.editCurrentPoint(); + } + }; + _editPointItem.addActionListener(_editPointAction); + _editPointItem.setEnabled(false); + pointMenu.add(_editPointItem); + _editWaypointNameItem = makeMenuItem(FunctionLibrary.FUNCTION_EDIT_WAYPOINT_NAME); + _editWaypointNameItem.setEnabled(false); + pointMenu.add(_editWaypointNameItem); + _deletePointItem = new JMenuItem(I18nManager.getText("menu.point.deletepoint")); + _deletePointAction = new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.deleteCurrentPoint(); + } + }; + _deletePointItem.addActionListener(_deletePointAction); + _deletePointItem.setEnabled(false); + _deletePointItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); + pointMenu.add(_deletePointItem); + pointMenu.addSeparator(); + // find a waypoint _findWaypointItem = makeMenuItem(FunctionLibrary.FUNCTION_FIND_WAYPOINT); _findWaypointItem.setEnabled(false); - selectMenu.add(_findWaypointItem); - menubar.add(selectMenu); + pointMenu.add(_findWaypointItem); + // duplicate current point + _duplicatePointItem = makeMenuItem(FunctionLibrary.FUNCTION_DUPLICATE_POINT); + _duplicatePointItem.setEnabled(false); + pointMenu.add(_duplicatePointItem); + // paste coordinates function + JMenuItem pasteCoordsItem = makeMenuItem(FunctionLibrary.FUNCTION_PASTE_COORDINATES); + pointMenu.add(pasteCoordsItem); + menubar.add(pointMenu); // Add view menu JMenu viewMenu = new JMenu(I18nManager.getText("menu.view")); setAltKey(viewMenu, "altkey.menu.view"); + // Turn map display on/off + _mapCheckbox = new JCheckBoxMenuItem( + I18nManager.getText("menu.map.showmap"), false); + _mapCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + Config.setConfigBoolean(Config.KEY_SHOW_MAP, _mapCheckbox.isSelected()); + UpdateMessageBroker.informSubscribers(); + } + }); + viewMenu.add(_mapCheckbox); + // Turn off the sidebars + JCheckBoxMenuItem sidebarsCheckbox = new JCheckBoxMenuItem(I18nManager.getText("menu.view.showsidebars")); + sidebarsCheckbox.setSelected(true); + sidebarsCheckbox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + _app.toggleSidebars(); + } + }); + viewMenu.add(sidebarsCheckbox); + // 3d _show3dItem = makeMenuItem(FunctionLibrary.FUNCTION_3D); _show3dItem.setEnabled(false); viewMenu.add(_show3dItem); @@ -442,6 +512,14 @@ public class MenuManager implements DataSubscriber } }); _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); @@ -451,10 +529,10 @@ public class MenuManager implements DataSubscriber _distanceItem = makeMenuItem(FunctionLibrary.FUNCTION_DISTANCES); _distanceItem.setEnabled(false); viewMenu.add(_distanceItem); - // Get gpsies tracks - _getGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_GPSIES); - _getGpsiesItem.setEnabled(false); - viewMenu.add(_getGpsiesItem); + // full range details + _fullRangeDetailsItem = makeMenuItem(FunctionLibrary.FUNCTION_FULL_RANGE_DETAILS); + _fullRangeDetailsItem.setEnabled(false); + viewMenu.add(_fullRangeDetailsItem); menubar.add(viewMenu); // Add photo menu @@ -502,11 +580,34 @@ public class MenuManager implements DataSubscriber }); _deletePhotoItem.setEnabled(false); photoMenu.add(_deletePhotoItem); + // Rotate current photo + _rotatePhotoLeft = makeMenuItem(FunctionLibrary.FUNCTION_ROTATE_PHOTO_LEFT); + _rotatePhotoLeft.setEnabled(false); + photoMenu.add(_rotatePhotoLeft); + _rotatePhotoRight = makeMenuItem(FunctionLibrary.FUNCTION_ROTATE_PHOTO_RIGHT); + _rotatePhotoRight.setEnabled(false); + photoMenu.add(_rotatePhotoRight); + _ignoreExifThumb = makeMenuItem(FunctionLibrary.FUNCTION_IGNORE_EXIF_THUMB); + _ignoreExifThumb.setEnabled(false); + photoMenu.add(_ignoreExifThumb); + _selectNoPhotoItem = new JMenuItem(I18nManager.getText("menu.range.none")); + _selectNoPhotoItem.setEnabled(false); + _selectNoPhotoItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.getTrackInfo().selectPhoto(-1); + } + }); + photoMenu.add(_selectNoPhotoItem); photoMenu.addSeparator(); // correlate all photos _correlatePhotosItem = makeMenuItem(FunctionLibrary.FUNCTION_CORRELATE_PHOTOS); _correlatePhotosItem.setEnabled(false); photoMenu.add(_correlatePhotosItem); + // rearrange photo points + _rearrangePhotosItem = makeMenuItem(FunctionLibrary.FUNCTION_REARRANGE_PHOTOS); + _rearrangePhotosItem.setEnabled(false); + photoMenu.add(_rearrangePhotosItem); menubar.add(photoMenu); // Settings menu @@ -515,26 +616,29 @@ public class MenuManager implements DataSubscriber // Set the map background JMenuItem mapBgItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_MAP_BG); settingsMenu.add(mapBgItem); - // Turn pace display on/off - _paceCheckbox = new JCheckBoxMenuItem( - I18nManager.getText("menu.settings.showpace"), false); - _paceCheckbox.addActionListener(new ActionListener() { + _onlineCheckbox = new JCheckBoxMenuItem(I18nManager.getText("menu.settings.onlinemode")); + _onlineCheckbox.setSelected(Config.getConfigBoolean(Config.KEY_ONLINE_MODE)); + _onlineCheckbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - Config.setConfigBoolean(Config.KEY_SHOW_PACE, _paceCheckbox.isSelected()); - UpdateMessageBroker.informSubscribers(); + boolean isOnline = _onlineCheckbox.isSelected(); + Config.setConfigBoolean(Config.KEY_ONLINE_MODE, isOnline); + if (isOnline) {UpdateMessageBroker.informSubscribers();} } }); - settingsMenu.add(_paceCheckbox); + settingsMenu.add(_onlineCheckbox); + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_DISK_CACHE)); + settingsMenu.addSeparator(); // Set kmz image size - JMenuItem setKmzImageSizeItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_KMZ_IMAGE_SIZE); - settingsMenu.add(setKmzImageSizeItem); + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_KMZ_IMAGE_SIZE)); // Set program paths - JMenuItem setPathsItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS); - settingsMenu.add(setPathsItem); + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS)); + // Set colours + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_COLOURS)); + // Set language + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_LANGUAGE)); settingsMenu.addSeparator(); // Save configuration - JMenuItem saveConfigMenuItem = makeMenuItem(FunctionLibrary.FUNCTION_SAVECONFIG); - settingsMenu.add(saveConfigMenuItem); + settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SAVECONFIG)); menubar.add(settingsMenu); // Help menu @@ -543,12 +647,9 @@ public class MenuManager implements DataSubscriber JMenuItem helpItem = makeMenuItem(FunctionLibrary.FUNCTION_HELP); setShortcut(helpItem, "shortcut.menu.help.help"); helpMenu.add(helpItem); - JMenuItem showKeysItem = makeMenuItem(FunctionLibrary.FUNCTION_SHOW_KEYS); - helpMenu.add(showKeysItem); - JMenuItem aboutItem = makeMenuItem(FunctionLibrary.FUNCTION_ABOUT); - helpMenu.add(aboutItem); - JMenuItem checkVersionItem = makeMenuItem(FunctionLibrary.FUNCTION_CHECK_VERSION); - helpMenu.add(checkVersionItem); + helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SHOW_KEYS)); + helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_ABOUT)); + helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_CHECK_VERSION)); menubar.add(helpMenu); return menubar; @@ -601,7 +702,9 @@ public class MenuManager implements DataSubscriber if (code >= 0 && code < 26) { // Found a valid code between A and Z - inMenuItem.setAccelerator(KeyStroke.getKeyStroke(KEY_EVENTS[code], InputEvent.CTRL_DOWN_MASK)); + inMenuItem.setAccelerator(KeyStroke.getKeyStroke(KEY_EVENTS[code], + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + // use platform-specific key mask so Ctrl on Linux/Win, Clover on Mac } } } @@ -615,7 +718,7 @@ public class MenuManager implements DataSubscriber JToolBar toolbar = new JToolBar(); // Add text file JButton openFileButton = new JButton(IconManager.getImageIcon(IconManager.OPEN_FILE)); - openFileButton.setToolTipText(I18nManager.getText("menu.file.open")); + openFileButton.setToolTipText(I18nManager.getText("function.open")); openFileButton.addActionListener(_openFileAction); toolbar.add(openFileButton); // Add photo @@ -631,36 +734,36 @@ public class MenuManager implements DataSubscriber toolbar.add(_saveButton); // Undo _undoButton = new JButton(IconManager.getImageIcon(IconManager.UNDO)); - _undoButton.setToolTipText(I18nManager.getText("menu.edit.undo")); + _undoButton.setToolTipText(I18nManager.getText("menu.track.undo")); _undoButton.addActionListener(_undoAction); _undoButton.setEnabled(false); toolbar.add(_undoButton); // Edit point _editPointButton = new JButton(IconManager.getImageIcon(IconManager.EDIT_POINT)); - _editPointButton.setToolTipText(I18nManager.getText("menu.edit.editpoint")); + _editPointButton.setToolTipText(I18nManager.getText("menu.point.editpoint")); _editPointButton.addActionListener(_editPointAction); _editPointButton.setEnabled(false); toolbar.add(_editPointButton); // Delete point _deletePointButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_POINT)); - _deletePointButton.setToolTipText(I18nManager.getText("menu.edit.deletepoint")); + _deletePointButton.setToolTipText(I18nManager.getText("menu.point.deletepoint")); _deletePointButton.addActionListener(_deletePointAction); _deletePointButton.setEnabled(false); toolbar.add(_deletePointButton); // Delete range _deleteRangeButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_RANGE)); - _deleteRangeButton.setToolTipText(I18nManager.getText("menu.edit.deleterange")); + _deleteRangeButton.setToolTipText(I18nManager.getText("menu.range.deleterange")); _deleteRangeButton.addActionListener(_deleteRangeAction); _deleteRangeButton.setEnabled(false); toolbar.add(_deleteRangeButton); // Select start, end _selectStartButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_START)); - _selectStartButton.setToolTipText(I18nManager.getText("menu.select.start")); + _selectStartButton.setToolTipText(I18nManager.getText("menu.range.start")); _selectStartButton.addActionListener(_selectStartAction); _selectStartButton.setEnabled(false); toolbar.add(_selectStartButton); _selectEndButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_END)); - _selectEndButton.setToolTipText(I18nManager.getText("menu.select.end")); + _selectEndButton.setToolTipText(I18nManager.getText("menu.range.end")); _selectEndButton.addActionListener(_selectEndAction); _selectEndButton.setEnabled(false); toolbar.add(_selectEndButton); @@ -702,6 +805,7 @@ public class MenuManager implements DataSubscriber _exportKmlItem.setEnabled(hasData); _exportGpxItem.setEnabled(hasData); _exportPovItem.setEnabled(hasData); + _exportSvgItem.setEnabled(hasData); _compressItem.setEnabled(hasData); _deleteMarkedPointsItem.setEnabled(hasData && _track.hasMarkedPoints()); _rearrangeMenu.setEnabled(hasData && _track.hasTrackPoints() && _track.hasWaypoints()); @@ -712,6 +816,8 @@ public class MenuManager implements DataSubscriber _browserMapMenu.setEnabled(hasData); _distanceItem.setEnabled(hasData); _getGpsiesItem.setEnabled(hasData); + _uploadGpsiesItem.setEnabled(hasData && _track.hasTrackPoints()); + _lookupSrtmItem.setEnabled(hasData); _findWaypointItem.setEnabled(hasData && _track.hasWaypoints()); // is undo available? boolean hasUndo = !_app.getUndoStack().isEmpty(); @@ -729,20 +835,26 @@ public class MenuManager implements DataSubscriber _selectStartButton.setEnabled(hasPoint); _selectEndItem.setEnabled(hasPoint); _selectEndButton.setEnabled(hasPoint); + _duplicatePointItem.setEnabled(hasPoint); // are there any photos? boolean anyPhotos = _photos != null && _photos.getNumPhotos() > 0; _saveExifItem.setEnabled(anyPhotos); // is there a current photo? boolean hasPhoto = anyPhotos && _selection.getCurrentPhotoIndex() >= 0; // connect is available if photo and point selected, and photo has no point - boolean connectAvailable = hasPhoto && hasPoint && _photos.getPhoto(_selection.getCurrentPhotoIndex()) != null - && _photos.getPhoto(_selection.getCurrentPhotoIndex()).getDataPoint() == null; + Photo currentPhoto = _photos.getPhoto(_selection.getCurrentPhotoIndex()); + boolean connectAvailable = hasPhoto && hasPoint && currentPhoto != null + && currentPhoto.getDataPoint() == null; _connectPhotoItem.setEnabled(connectAvailable); _connectPhotoButton.setEnabled(connectAvailable); - _disconnectPhotoItem.setEnabled(hasPhoto && _photos.getPhoto(_selection.getCurrentPhotoIndex()) != null - && _photos.getPhoto(_selection.getCurrentPhotoIndex()).getDataPoint() != null); + _disconnectPhotoItem.setEnabled(hasPhoto && currentPhoto != null && currentPhoto.getDataPoint() != null); _correlatePhotosItem.setEnabled(anyPhotos && hasData); + _rearrangePhotosItem.setEnabled(anyPhotos && hasData && _track.getNumPoints() > 1); _deletePhotoItem.setEnabled(hasPhoto); + _rotatePhotoLeft.setEnabled(hasPhoto); + _rotatePhotoRight.setEnabled(hasPhoto); + _ignoreExifThumb.setEnabled(hasPhoto && currentPhoto != null && currentPhoto.getExifThumbnail() != null); + _selectNoPhotoItem.setEnabled(hasPhoto); // is there a current range? boolean hasRange = (hasData && _selection.hasRangeSelected()); _deleteRangeItem.setEnabled(hasRange); @@ -754,10 +866,18 @@ public class MenuManager implements DataSubscriber _reverseItem.setEnabled(hasRange); _addTimeOffsetItem.setEnabled(hasRange); _addAltitudeOffsetItem.setEnabled(hasRange); + _convertNamesToTimesItem.setEnabled(hasRange && _track.hasWaypoints()); + _deleteFieldValuesItem.setEnabled(hasRange); + _fullRangeDetailsItem.setEnabled(hasRange); // Is the currently selected point outside the current range? _cutAndMoveItem.setEnabled(hasRange && hasPoint && (_selection.getCurrentPointIndex() < _selection.getStart() || _selection.getCurrentPointIndex() > (_selection.getEnd()+1))); + // Has the map been switched on/off? + boolean mapsOn = Config.getConfigBoolean(Config.KEY_SHOW_MAP); + if (_mapCheckbox.isSelected() != mapsOn) { + _mapCheckbox.setSelected(mapsOn); + } }