X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fgui%2FMenuManager.java;h=4b752681244e03b80bd845f7a908c493a6357f57;hb=ca9bdb3916f9c39adbbf95d06ac95c21dafbb4e6;hp=5a4b009ada4d092265b337cc72234fd76ad934e4;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b;p=GpsPrune.git diff --git a/tim/prune/gui/MenuManager.java b/tim/prune/gui/MenuManager.java index 5a4b009..4b75268 100644 --- a/tim/prune/gui/MenuManager.java +++ b/tim/prune/gui/MenuManager.java @@ -17,6 +17,7 @@ import javax.swing.KeyStroke; import tim.prune.App; import tim.prune.DataSubscriber; import tim.prune.I18nManager; +import tim.prune.browser.UrlGenerator; import tim.prune.data.PhotoList; import tim.prune.data.Selection; import tim.prune.data.Track; @@ -37,6 +38,7 @@ public class MenuManager implements DataSubscriber // Menu items which need enabling/disabling private JMenuItem _saveItem = null; private JMenuItem _exportKmlItem = null; + private JMenuItem _exportGpxItem = null; private JMenuItem _exportPovItem = null; private JMenuItem _undoItem = null; private JMenuItem _clearUndoItem = null; @@ -52,15 +54,16 @@ public class MenuManager implements DataSubscriber private JMenuItem _selectStartItem = null; private JMenuItem _selectEndItem = null; private JMenuItem _reverseItem = null; + private JMenuItem _mergeSegmentsItem = null; private JMenu _rearrangeMenu = null; - private JMenuItem _rearrangeStartItem = null; - private JMenuItem _rearrangeEndItem = null; - private JMenuItem _rearrangeNearestItem = null; private JMenuItem _show3dItem = null; + private JMenuItem _showOsmMapItem = null; + private JMenu _browserMapMenu = null; private JMenuItem _saveExifItem = null; private JMenuItem _connectPhotoItem = null; private JMenuItem _deletePhotoItem = null; - // TODO: Does Photo menu require disconnect option? + private JMenuItem _disconnectPhotoItem = null; + private JMenuItem _correlatePhotosItem = null; // ActionListeners for reuse by menu and toolbar private ActionListener _openFileAction = null; @@ -85,6 +88,7 @@ public class MenuManager implements DataSubscriber * Constructor * @param inParent parent object for dialogs * @param inApp application to call on menu actions + * @param inTrackInfo track info object */ public MenuManager(JFrame inParent, App inApp, TrackInfo inTrackInfo) { @@ -136,7 +140,7 @@ public class MenuManager implements DataSubscriber _saveItem.addActionListener(_saveAction); _saveItem.setEnabled(false); fileMenu.add(_saveItem); - // Export + // Export - Kml _exportKmlItem = new JMenuItem(I18nManager.getText("menu.file.exportkml")); _exportKmlItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -146,6 +150,17 @@ public class MenuManager implements DataSubscriber }); _exportKmlItem.setEnabled(false); fileMenu.add(_exportKmlItem); + // Gpx + _exportGpxItem = new JMenuItem(I18nManager.getText("menu.file.exportgpx")); + _exportGpxItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.exportGpx(); + } + }); + _exportGpxItem.setEnabled(false); + fileMenu.add(_exportGpxItem); + // Pov _exportPovItem = new JMenuItem(I18nManager.getText("menu.file.exportpov")); _exportPovItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -261,36 +276,45 @@ public class MenuManager implements DataSubscriber }); _reverseItem.setEnabled(false); editMenu.add(_reverseItem); + _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); // Rearrange waypoints _rearrangeMenu = new JMenu(I18nManager.getText("menu.edit.rearrange")); _rearrangeMenu.setEnabled(false); - _rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.start")); - _rearrangeStartItem.addActionListener(new ActionListener() { + JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.start")); + rearrangeStartItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { _app.rearrangeWaypoints(App.REARRANGE_TO_START); } }); - _rearrangeStartItem.setEnabled(true); - _rearrangeMenu.add(_rearrangeStartItem); - _rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.end")); - _rearrangeEndItem.addActionListener(new ActionListener() { + rearrangeStartItem.setEnabled(true); + _rearrangeMenu.add(rearrangeStartItem); + JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.end")); + rearrangeEndItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { _app.rearrangeWaypoints(App.REARRANGE_TO_END); } }); - _rearrangeEndItem.setEnabled(true); - _rearrangeMenu.add(_rearrangeEndItem); - _rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.nearest")); - _rearrangeNearestItem.addActionListener(new ActionListener() { + rearrangeEndItem.setEnabled(true); + _rearrangeMenu.add(rearrangeEndItem); + JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.nearest")); + rearrangeNearestItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { _app.rearrangeWaypoints(App.REARRANGE_TO_NEAREST); } }); - _rearrangeNearestItem.setEnabled(true); - _rearrangeMenu.add(_rearrangeNearestItem); + rearrangeNearestItem.setEnabled(true); + _rearrangeMenu.add(rearrangeNearestItem); editMenu.add(_rearrangeMenu); menubar.add(editMenu); @@ -337,6 +361,49 @@ public class MenuManager implements DataSubscriber selectMenu.add(_selectEndItem); menubar.add(selectMenu); + // Add view menu + JMenu viewMenu = new JMenu(I18nManager.getText("menu.view")); + _show3dItem = new JMenuItem(I18nManager.getText("menu.view.show3d")); + _show3dItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.show3dWindow(); + } + }); + _show3dItem.setEnabled(false); + viewMenu.add(_show3dItem); + // Show OSM map + _showOsmMapItem = new JMenuItem(I18nManager.getText("menu.view.showmap")); + _showOsmMapItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.showOsmMap(); + } + }); + _showOsmMapItem.setEnabled(false); + viewMenu.add(_showOsmMapItem); + // 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); + viewMenu.add(_browserMapMenu); + menubar.add(viewMenu); + // Add photo menu JMenu photoMenu = new JMenu(I18nManager.getText("menu.photo")); addPhotosMenuItem = new JMenuItem(I18nManager.getText("menu.file.addphotos")); @@ -360,7 +427,18 @@ public class MenuManager implements DataSubscriber }; _connectPhotoItem.addActionListener(_connectPhotoAction); _connectPhotoItem.setEnabled(false); + photoMenu.addSeparator(); photoMenu.add(_connectPhotoItem); + // disconnect photo + _disconnectPhotoItem = new JMenuItem(I18nManager.getText("menu.photo.disconnect")); + _disconnectPhotoItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.disconnectPhotoFromPoint(); + } + }); + _disconnectPhotoItem.setEnabled(false); + photoMenu.add(_disconnectPhotoItem); _deletePhotoItem = new JMenuItem(I18nManager.getText("menu.photo.delete")); _deletePhotoItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -370,23 +448,29 @@ public class MenuManager implements DataSubscriber }); _deletePhotoItem.setEnabled(false); photoMenu.add(_deletePhotoItem); - menubar.add(photoMenu); - - // Add 3d menu (whether java3d available or not) - JMenu threeDMenu = new JMenu(I18nManager.getText("menu.3d")); - _show3dItem = new JMenuItem(I18nManager.getText("menu.3d.show3d")); - _show3dItem.addActionListener(new ActionListener() { + photoMenu.addSeparator(); + // correlate all photos + _correlatePhotosItem = new JMenuItem(I18nManager.getText("menu.photo.correlate")); + _correlatePhotosItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - _app.show3dWindow(); + _app.beginCorrelatePhotos(); } }); - _show3dItem.setEnabled(false); - threeDMenu.add(_show3dItem); - menubar.add(threeDMenu); + _correlatePhotosItem.setEnabled(false); + photoMenu.add(_correlatePhotosItem); + menubar.add(photoMenu); - // Help menu for About + // Help menu JMenu helpMenu = new JMenu(I18nManager.getText("menu.help")); + JMenuItem helpItem = new JMenuItem(I18nManager.getText("menu.help")); + helpItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + _app.showHelp(); + } + }); + helpMenu.add(helpItem); JMenuItem aboutItem = new JMenuItem(I18nManager.getText("menu.help.about")); aboutItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -481,6 +565,7 @@ public class MenuManager implements DataSubscriber _saveItem.setEnabled(hasData); _saveButton.setEnabled(hasData); _exportKmlItem.setEnabled(hasData); + _exportGpxItem.setEnabled(hasData); _exportPovItem.setEnabled(hasData); _deleteDuplicatesItem.setEnabled(hasData); _compressItem.setEnabled(hasData); @@ -489,6 +574,8 @@ public class MenuManager implements DataSubscriber _selectNoneItem.setEnabled(hasData); if (_show3dItem != null) _show3dItem.setEnabled(hasData); + _showOsmMapItem.setEnabled(hasData); + _browserMapMenu.setEnabled(hasData); // is undo available? boolean hasUndo = !_app.getUndoStack().isEmpty(); _undoItem.setEnabled(hasUndo); @@ -505,21 +592,33 @@ public class MenuManager implements DataSubscriber _selectEndItem.setEnabled(hasPoint); _selectEndButton.setEnabled(hasPoint); // are there any photos? - _saveExifItem.setEnabled(_photos != null && _photos.getNumPhotos() > 0); + boolean anyPhotos = _photos != null && _photos.getNumPhotos() > 0; + _saveExifItem.setEnabled(anyPhotos); // is there a current photo? - boolean hasPhoto = _photos != null && _photos.getNumPhotos() > 0 - && _selection.getCurrentPhotoIndex() >= 0; + boolean hasPhoto = anyPhotos && _selection.getCurrentPhotoIndex() >= 0; // connect is only available when current photo is not connected to current point boolean connectAvailable = hasPhoto && hasPoint && _track.getPoint(_selection.getCurrentPointIndex()).getPhoto() == null; _connectPhotoItem.setEnabled(connectAvailable); _connectPhotoButton.setEnabled(connectAvailable); + _disconnectPhotoItem.setEnabled(hasPhoto && _photos.getPhoto(_selection.getCurrentPhotoIndex()) != null + && _photos.getPhoto(_selection.getCurrentPhotoIndex()).getDataPoint() != null); + _correlatePhotosItem.setEnabled(anyPhotos && hasData); _deletePhotoItem.setEnabled(hasPhoto); // is there a current range? boolean hasRange = (hasData && _selection.hasRangeSelected()); _deleteRangeItem.setEnabled(hasRange); _interpolateItem.setEnabled(hasRange && (_selection.getEnd() - _selection.getStart()) == 1); + _mergeSegmentsItem.setEnabled(hasRange); _reverseItem.setEnabled(hasRange); } + + + /** + * Ignore action completed signals + * @see tim.prune.DataSubscriber#actionCompleted(java.lang.String) + */ + public void actionCompleted(String inMessage) + {} }