3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5 import java.awt.event.InputEvent;
6 import java.awt.event.KeyEvent;
7 import javax.swing.JButton;
8 import javax.swing.JMenu;
9 import javax.swing.JMenuBar;
10 import javax.swing.JMenuItem;
11 import javax.swing.JToolBar;
12 import javax.swing.KeyStroke;
15 import tim.prune.DataSubscriber;
16 import tim.prune.FunctionLibrary;
17 import tim.prune.GenericFunction;
18 import tim.prune.I18nManager;
19 import tim.prune.data.PhotoList;
20 import tim.prune.data.Selection;
21 import tim.prune.data.Track;
22 import tim.prune.data.TrackInfo;
23 import tim.prune.function.RearrangeWaypointsFunction.Rearrange;
24 import tim.prune.function.browser.UrlGenerator;
27 * Class to manage the menu bar and tool bar,
28 * including enabling and disabling the items
30 public class MenuManager implements DataSubscriber
32 private App _app = null;
33 private Track _track = null;
34 private Selection _selection = null;
35 private PhotoList _photos = null;
37 // Menu items which need enabling/disabling
38 private JMenuItem _sendGpsItem = null;
39 private JMenuItem _saveItem = null;
40 private JMenuItem _exportKmlItem = null;
41 private JMenuItem _exportGpxItem = null;
42 private JMenuItem _exportPovItem = null;
43 private JMenuItem _undoItem = null;
44 private JMenuItem _clearUndoItem = null;
45 private JMenuItem _editPointItem = null;
46 private JMenuItem _editWaypointNameItem = null;
47 private JMenuItem _deletePointItem = null;
48 private JMenuItem _deleteRangeItem = null;
49 private JMenuItem _compressItem = null;
50 private JMenuItem _deleteMarkedPointsItem = null;
51 private JMenuItem _interpolateItem = null;
52 private JMenuItem _averageItem = null;
53 private JMenuItem _selectAllItem = null;
54 private JMenuItem _selectNoneItem = null;
55 private JMenuItem _selectStartItem = null;
56 private JMenuItem _selectEndItem = null;
57 private JMenuItem _reverseItem = null;
58 private JMenuItem _addTimeOffsetItem = null;
59 private JMenuItem _mergeSegmentsItem = null;
60 private JMenu _rearrangeMenu = null;
61 private JMenuItem _cutAndMoveItem = null;
62 private JMenuItem _show3dItem = null;
63 private JMenu _browserMapMenu = null;
64 private JMenuItem _chartItem = null;
65 private JMenuItem _distanceItem = null;
66 private JMenuItem _saveExifItem = null;
67 private JMenuItem _connectPhotoItem = null;
68 private JMenuItem _deletePhotoItem = null;
69 private JMenuItem _disconnectPhotoItem = null;
70 private JMenuItem _correlatePhotosItem = null;
72 // ActionListeners for reuse by menu and toolbar
73 private ActionListener _openFileAction = null;
74 private ActionListener _addPhotoAction = null;
75 private ActionListener _saveAction = null;
76 private ActionListener _undoAction = null;
77 private ActionListener _editPointAction = null;
78 private ActionListener _deletePointAction = null;
79 private ActionListener _deleteRangeAction = null;
80 private ActionListener _selectStartAction = null;
81 private ActionListener _selectEndAction = null;
82 private ActionListener _connectPhotoAction = null;
84 // Toolbar buttons which need enabling/disabling
85 private JButton _saveButton = null;
86 private JButton _undoButton = null;
87 private JButton _editPointButton = null;
88 private JButton _deletePointButton = null;
89 private JButton _deleteRangeButton = null;
90 private JButton _selectStartButton = null;
91 private JButton _selectEndButton = null;
92 private JButton _connectPhotoButton = null;
97 * @param inApp application to call on menu actions
98 * @param inTrackInfo track info object
100 public MenuManager(App inApp, TrackInfo inTrackInfo)
103 _track = inTrackInfo.getTrack();
104 _selection = inTrackInfo.getSelection();
105 _photos = inTrackInfo.getPhotoList();
110 * Create a JMenuBar containing all menu items
113 public JMenuBar createMenuBar()
115 JMenuBar menubar = new JMenuBar();
116 JMenu fileMenu = new JMenu(I18nManager.getText("menu.file"));
118 JMenuItem openMenuItem = new JMenuItem(I18nManager.getText("menu.file.open"));
119 openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
120 _openFileAction = new ActionListener() {
121 public void actionPerformed(ActionEvent e)
126 openMenuItem.addActionListener(_openFileAction);
127 fileMenu.add(openMenuItem);
129 JMenuItem addPhotosMenuItem = new JMenuItem(I18nManager.getText("menu.file.addphotos"));
130 _addPhotoAction = new ActionListener() {
131 public void actionPerformed(ActionEvent e)
136 addPhotosMenuItem.addActionListener(_addPhotoAction);
137 fileMenu.add(addPhotosMenuItem);
138 fileMenu.addSeparator();
140 JMenuItem loadFromGpsMenuItem = makeMenuItem(FunctionLibrary.FUNCTION_GPSLOAD);
141 loadFromGpsMenuItem.addActionListener(new ActionListener() {
142 public void actionPerformed(ActionEvent e)
144 FunctionLibrary.FUNCTION_GPSLOAD.begin();
147 fileMenu.add(loadFromGpsMenuItem);
149 _sendGpsItem = makeMenuItem(FunctionLibrary.FUNCTION_GPSSAVE);
150 _sendGpsItem.addActionListener(new ActionListener() {
151 public void actionPerformed(ActionEvent e)
153 FunctionLibrary.FUNCTION_GPSSAVE.begin();
156 _sendGpsItem.setEnabled(false);
157 fileMenu.add(_sendGpsItem);
158 fileMenu.addSeparator();
160 _saveItem = new JMenuItem(I18nManager.getText("menu.file.save"), KeyEvent.VK_S);
161 _saveAction = new ActionListener() {
162 public void actionPerformed(ActionEvent e)
167 _saveItem.addActionListener(_saveAction);
168 _saveItem.setEnabled(false);
169 fileMenu.add(_saveItem);
171 _exportKmlItem = makeMenuItem(FunctionLibrary.FUNCTION_KMLEXPORT);
172 _exportKmlItem.addActionListener(new ActionListener() {
173 public void actionPerformed(ActionEvent e)
175 FunctionLibrary.FUNCTION_KMLEXPORT.begin();
178 _exportKmlItem.setEnabled(false);
179 fileMenu.add(_exportKmlItem);
181 _exportGpxItem = makeMenuItem(FunctionLibrary.FUNCTION_GPXEXPORT);
182 _exportGpxItem.addActionListener(new ActionListener() {
183 public void actionPerformed(ActionEvent e)
185 FunctionLibrary.FUNCTION_GPXEXPORT.begin();
188 _exportGpxItem.setEnabled(false);
189 fileMenu.add(_exportGpxItem);
191 _exportPovItem = makeMenuItem(FunctionLibrary.FUNCTION_POVEXPORT);
192 _exportPovItem.addActionListener(new ActionListener() {
193 public void actionPerformed(ActionEvent e)
195 FunctionLibrary.FUNCTION_POVEXPORT.begin();
198 _exportPovItem.setEnabled(false);
199 fileMenu.add(_exportPovItem);
200 fileMenu.addSeparator();
201 JMenuItem exitMenuItem = new JMenuItem(I18nManager.getText("menu.file.exit"));
202 exitMenuItem.addActionListener(new ActionListener() {
203 public void actionPerformed(ActionEvent e)
208 fileMenu.add(exitMenuItem);
209 menubar.add(fileMenu);
211 JMenu editMenu = new JMenu(I18nManager.getText("menu.edit"));
212 editMenu.setMnemonic(KeyEvent.VK_E);
213 _undoItem = new JMenuItem(I18nManager.getText("menu.edit.undo"));
214 _undoAction = new ActionListener() {
215 public void actionPerformed(ActionEvent e)
220 _undoItem.addActionListener(_undoAction);
221 _undoItem.setEnabled(false);
222 editMenu.add(_undoItem);
223 _clearUndoItem = new JMenuItem(I18nManager.getText("menu.edit.clearundo"));
224 _clearUndoItem.addActionListener(new ActionListener() {
225 public void actionPerformed(ActionEvent e)
230 _clearUndoItem.setEnabled(false);
231 editMenu.add(_clearUndoItem);
232 editMenu.addSeparator();
233 _editPointItem = new JMenuItem(I18nManager.getText("menu.edit.editpoint"));
234 _editPointAction = new ActionListener() {
235 public void actionPerformed(ActionEvent e)
237 _app.editCurrentPoint();
240 _editPointItem.addActionListener(_editPointAction);
241 _editPointItem.setEnabled(false);
242 editMenu.add(_editPointItem);
243 _editWaypointNameItem = new JMenuItem(I18nManager.getText("menu.edit.editwaypointname"));
244 _editWaypointNameItem.addActionListener(new ActionListener() {
245 public void actionPerformed(ActionEvent e)
247 _app.editCurrentPointName();
250 _editWaypointNameItem.setEnabled(false);
251 editMenu.add(_editWaypointNameItem);
252 _deletePointItem = new JMenuItem(I18nManager.getText("menu.edit.deletepoint"));
253 _deletePointAction = new ActionListener() {
254 public void actionPerformed(ActionEvent e)
256 _app.deleteCurrentPoint();
259 _deletePointItem.addActionListener(_deletePointAction);
260 _deletePointItem.setEnabled(false);
261 editMenu.add(_deletePointItem);
262 _deleteRangeItem = new JMenuItem(I18nManager.getText("menu.edit.deleterange"));
263 _deleteRangeAction = new ActionListener() {
264 public void actionPerformed(ActionEvent e)
266 _app.deleteSelectedRange();
269 _deleteRangeItem.addActionListener(_deleteRangeAction);
270 _deleteRangeItem.setEnabled(false);
271 editMenu.add(_deleteRangeItem);
272 editMenu.addSeparator();
273 _compressItem = makeMenuItem(FunctionLibrary.FUNCTION_COMPRESS);
274 _compressItem.addActionListener(new ActionListener() {
275 public void actionPerformed(ActionEvent e)
277 FunctionLibrary.FUNCTION_COMPRESS.begin();
280 _compressItem.setEnabled(false);
281 editMenu.add(_compressItem);
282 _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.edit.deletemarked"));
283 _deleteMarkedPointsItem.addActionListener(new ActionListener() {
284 public void actionPerformed(ActionEvent e)
286 _app.finishCompressTrack();
289 _deleteMarkedPointsItem.setEnabled(false);
290 editMenu.add(_deleteMarkedPointsItem);
291 editMenu.addSeparator();
292 _interpolateItem = new JMenuItem(I18nManager.getText("menu.edit.interpolate"));
293 _interpolateItem.addActionListener(new ActionListener() {
294 public void actionPerformed(ActionEvent e)
296 _app.interpolateSelection();
299 _interpolateItem.setEnabled(false);
300 editMenu.add(_interpolateItem);
301 _averageItem = new JMenuItem(I18nManager.getText("menu.edit.average"));
302 _averageItem.addActionListener(new ActionListener() {
303 public void actionPerformed(ActionEvent e)
305 _app.averageSelection();
308 _averageItem.setEnabled(false);
309 editMenu.add(_averageItem);
310 _reverseItem = new JMenuItem(I18nManager.getText("menu.edit.reverse"));
311 _reverseItem.addActionListener(new ActionListener() {
312 public void actionPerformed(ActionEvent e)
317 _reverseItem.setEnabled(false);
318 editMenu.add(_reverseItem);
319 _addTimeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_TIME_OFFSET);
320 _addTimeOffsetItem.addActionListener(new ActionListener() {
321 public void actionPerformed(ActionEvent e)
323 FunctionLibrary.FUNCTION_ADD_TIME_OFFSET.begin();
326 _addTimeOffsetItem.setEnabled(false);
327 editMenu.add(_addTimeOffsetItem);
328 _mergeSegmentsItem = new JMenuItem(I18nManager.getText("menu.edit.mergetracksegments"));
329 _mergeSegmentsItem.addActionListener(new ActionListener() {
330 public void actionPerformed(ActionEvent e)
332 _app.mergeTrackSegments();
335 _mergeSegmentsItem.setEnabled(false);
336 editMenu.add(_mergeSegmentsItem);
337 // Rearrange waypoints
338 _rearrangeMenu = new JMenu(I18nManager.getText("menu.edit.rearrange"));
339 _rearrangeMenu.setEnabled(false);
340 JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.start"));
341 rearrangeStartItem.addActionListener(new ActionListener() {
342 public void actionPerformed(ActionEvent e)
344 FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_START);
347 rearrangeStartItem.setEnabled(true);
348 _rearrangeMenu.add(rearrangeStartItem);
349 JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.end"));
350 rearrangeEndItem.addActionListener(new ActionListener() {
351 public void actionPerformed(ActionEvent e)
353 FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_END);
356 rearrangeEndItem.setEnabled(true);
357 _rearrangeMenu.add(rearrangeEndItem);
358 JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.nearest"));
359 rearrangeNearestItem.addActionListener(new ActionListener() {
360 public void actionPerformed(ActionEvent e)
362 FunctionLibrary.FUNCTION_REARRANGE_WAYPOINTS.rearrangeWaypoints(Rearrange.TO_NEAREST);
365 rearrangeNearestItem.setEnabled(true);
366 _rearrangeMenu.add(rearrangeNearestItem);
367 editMenu.add(_rearrangeMenu);
368 _cutAndMoveItem = new JMenuItem(I18nManager.getText("menu.edit.cutandmove"));
369 _cutAndMoveItem.addActionListener(new ActionListener() {
370 public void actionPerformed(ActionEvent e)
372 _app.cutAndMoveSelection();
375 _cutAndMoveItem.setEnabled(false);
376 editMenu.add(_cutAndMoveItem);
377 menubar.add(editMenu);
380 JMenu selectMenu = new JMenu(I18nManager.getText("menu.select"));
381 _selectAllItem = new JMenuItem(I18nManager.getText("menu.select.all"));
382 _selectAllItem.setEnabled(false);
383 _selectAllItem.addActionListener(new ActionListener() {
384 public void actionPerformed(ActionEvent e)
389 selectMenu.add(_selectAllItem);
390 _selectNoneItem = new JMenuItem(I18nManager.getText("menu.select.none"));
391 _selectNoneItem.setEnabled(false);
392 _selectNoneItem.addActionListener(new ActionListener() {
393 public void actionPerformed(ActionEvent e)
398 selectMenu.add(_selectNoneItem);
399 selectMenu.addSeparator();
400 _selectStartItem = new JMenuItem(I18nManager.getText("menu.select.start"));
401 _selectStartItem.setEnabled(false);
402 _selectStartAction = new ActionListener() {
403 public void actionPerformed(ActionEvent e)
405 _selection.selectRangeStart();
408 _selectStartItem.addActionListener(_selectStartAction);
409 selectMenu.add(_selectStartItem);
410 _selectEndItem = new JMenuItem(I18nManager.getText("menu.select.end"));
411 _selectEndItem.setEnabled(false);
412 _selectEndAction = new ActionListener() {
413 public void actionPerformed(ActionEvent e)
415 _selection.selectRangeEnd();
418 _selectEndItem.addActionListener(_selectEndAction);
419 selectMenu.add(_selectEndItem);
420 menubar.add(selectMenu);
423 JMenu viewMenu = new JMenu(I18nManager.getText("menu.view"));
424 _show3dItem = makeMenuItem(FunctionLibrary.FUNCTION_3D);
425 _show3dItem.addActionListener(new ActionListener() {
426 public void actionPerformed(ActionEvent e)
428 FunctionLibrary.FUNCTION_3D.begin();
431 _show3dItem.setEnabled(false);
432 viewMenu.add(_show3dItem);
434 _browserMapMenu = new JMenu(I18nManager.getText("menu.view.browser"));
435 _browserMapMenu.setEnabled(false);
436 JMenuItem googleMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.google"));
437 googleMapsItem.addActionListener(new ActionListener() {
438 public void actionPerformed(ActionEvent e)
440 _app.showExternalMap(UrlGenerator.MAP_SOURCE_GOOGLE);
443 _browserMapMenu.add(googleMapsItem);
444 JMenuItem openMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.openstreetmap"));
445 openMapsItem.addActionListener(new ActionListener() {
446 public void actionPerformed(ActionEvent e)
448 _app.showExternalMap(UrlGenerator.MAP_SOURCE_OSM);
451 _browserMapMenu.add(openMapsItem);
452 JMenuItem mapquestMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.mapquest"));
453 mapquestMapsItem.addActionListener(new ActionListener() {
454 public void actionPerformed(ActionEvent e)
456 _app.showExternalMap(UrlGenerator.MAP_SOURCE_MAPQUEST);
459 _browserMapMenu.add(mapquestMapsItem);
460 JMenuItem yahooMapsItem = new JMenuItem(I18nManager.getText("menu.view.browser.yahoo"));
461 yahooMapsItem.addActionListener(new ActionListener() {
462 public void actionPerformed(ActionEvent e)
464 _app.showExternalMap(UrlGenerator.MAP_SOURCE_YAHOO);
467 _browserMapMenu.add(yahooMapsItem);
468 viewMenu.add(_browserMapMenu);
470 _chartItem = makeMenuItem(FunctionLibrary.FUNCTION_CHARTS);
471 _chartItem.addActionListener(new ActionListener() {
472 public void actionPerformed(ActionEvent e)
474 FunctionLibrary.FUNCTION_CHARTS.begin();
477 _chartItem.setEnabled(false);
478 viewMenu.add(_chartItem);
480 _distanceItem = makeMenuItem(FunctionLibrary.FUNCTION_DISTANCES);
481 _distanceItem.setEnabled(false);
482 _distanceItem.addActionListener(new ActionListener() {
483 public void actionPerformed(ActionEvent e) {
484 FunctionLibrary.FUNCTION_DISTANCES.begin();
487 viewMenu.add(_distanceItem);
488 // Set the map background
489 JMenuItem mapBgItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_MAP_BG);
490 mapBgItem.addActionListener(new ActionListener() {
491 public void actionPerformed(ActionEvent arg0) {
492 FunctionLibrary.FUNCTION_SET_MAP_BG.begin();
495 viewMenu.add(mapBgItem);
496 menubar.add(viewMenu);
499 JMenu photoMenu = new JMenu(I18nManager.getText("menu.photo"));
500 addPhotosMenuItem = new JMenuItem(I18nManager.getText("menu.file.addphotos"));
501 addPhotosMenuItem.addActionListener(_addPhotoAction);
502 photoMenu.add(addPhotosMenuItem);
503 _saveExifItem = new JMenuItem(I18nManager.getText("menu.photo.saveexif"));
504 _saveExifItem.addActionListener(new ActionListener() {
505 public void actionPerformed(ActionEvent e)
510 _saveExifItem.setEnabled(false);
511 photoMenu.add(_saveExifItem);
512 _connectPhotoItem = new JMenuItem(I18nManager.getText("menu.photo.connect"));
513 _connectPhotoAction = new ActionListener() {
514 public void actionPerformed(ActionEvent e)
516 _app.connectPhotoToPoint();
519 _connectPhotoItem.addActionListener(_connectPhotoAction);
520 _connectPhotoItem.setEnabled(false);
521 photoMenu.addSeparator();
522 photoMenu.add(_connectPhotoItem);
524 _disconnectPhotoItem = new JMenuItem(I18nManager.getText("menu.photo.disconnect"));
525 _disconnectPhotoItem.addActionListener(new ActionListener() {
526 public void actionPerformed(ActionEvent e)
528 _app.disconnectPhotoFromPoint();
531 _disconnectPhotoItem.setEnabled(false);
532 photoMenu.add(_disconnectPhotoItem);
533 _deletePhotoItem = new JMenuItem(I18nManager.getText("menu.photo.delete"));
534 _deletePhotoItem.addActionListener(new ActionListener() {
535 public void actionPerformed(ActionEvent e)
537 _app.deleteCurrentPhoto();
540 _deletePhotoItem.setEnabled(false);
541 photoMenu.add(_deletePhotoItem);
542 photoMenu.addSeparator();
543 // correlate all photos
544 _correlatePhotosItem = makeMenuItem(FunctionLibrary.FUNCTION_CORRELATE_PHOTOS);
545 _correlatePhotosItem.addActionListener(new ActionListener() {
546 public void actionPerformed(ActionEvent e)
548 FunctionLibrary.FUNCTION_CORRELATE_PHOTOS.begin();
551 _correlatePhotosItem.setEnabled(false);
552 photoMenu.add(_correlatePhotosItem);
553 menubar.add(photoMenu);
556 JMenu helpMenu = new JMenu(I18nManager.getText("menu.help"));
557 JMenuItem helpItem = makeMenuItem(FunctionLibrary.FUNCTION_HELP);
558 helpItem.addActionListener(new ActionListener() {
559 public void actionPerformed(ActionEvent e)
561 FunctionLibrary.FUNCTION_HELP.begin();
564 helpMenu.add(helpItem);
565 JMenuItem aboutItem = makeMenuItem(FunctionLibrary.FUNCTION_ABOUT);
566 aboutItem.addActionListener(new ActionListener() {
567 public void actionPerformed(ActionEvent e)
569 FunctionLibrary.FUNCTION_ABOUT.begin();
572 helpMenu.add(aboutItem);
573 JMenuItem checkVersionItem = makeMenuItem(FunctionLibrary.FUNCTION_CHECK_VERSION);
574 checkVersionItem.addActionListener(new ActionListener() {
575 public void actionPerformed(ActionEvent e)
577 FunctionLibrary.FUNCTION_CHECK_VERSION.begin();
580 helpMenu.add(checkVersionItem);
581 menubar.add(helpMenu);
587 * Convenience method for making a menu item using a function
588 * @param inFunction function
589 * @return menu item using localized name of function
591 private static JMenuItem makeMenuItem(GenericFunction inFunction)
593 return new JMenuItem(I18nManager.getText(inFunction.getNameKey()));
597 * Create a JToolBar containing all toolbar buttons
598 * @return toolbar containing buttons
600 public JToolBar createToolBar()
602 JToolBar toolbar = new JToolBar();
604 JButton openFileButton = new JButton(IconManager.getImageIcon(IconManager.OPEN_FILE));
605 openFileButton.setToolTipText(I18nManager.getText("menu.file.open"));
606 openFileButton.addActionListener(_openFileAction);
607 toolbar.add(openFileButton);
609 JButton addPhotoButton = new JButton(IconManager.getImageIcon(IconManager.ADD_PHOTO));
610 addPhotoButton.setToolTipText(I18nManager.getText("menu.file.addphotos"));
611 addPhotoButton.addActionListener(_addPhotoAction);
612 toolbar.add(addPhotoButton);
614 _saveButton = new JButton(IconManager.getImageIcon(IconManager.SAVE_FILE));
615 _saveButton.setToolTipText(I18nManager.getText("menu.file.save"));
616 _saveButton.addActionListener(_saveAction);
617 _saveButton.setEnabled(false);
618 toolbar.add(_saveButton);
620 _undoButton = new JButton(IconManager.getImageIcon(IconManager.UNDO));
621 _undoButton.setToolTipText(I18nManager.getText("menu.edit.undo"));
622 _undoButton.addActionListener(_undoAction);
623 _undoButton.setEnabled(false);
624 toolbar.add(_undoButton);
626 _editPointButton = new JButton(IconManager.getImageIcon(IconManager.EDIT_POINT));
627 _editPointButton.setToolTipText(I18nManager.getText("menu.edit.editpoint"));
628 _editPointButton.addActionListener(_editPointAction);
629 _editPointButton.setEnabled(false);
630 toolbar.add(_editPointButton);
632 _deletePointButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_POINT));
633 _deletePointButton.setToolTipText(I18nManager.getText("menu.edit.deletepoint"));
634 _deletePointButton.addActionListener(_deletePointAction);
635 _deletePointButton.setEnabled(false);
636 toolbar.add(_deletePointButton);
638 _deleteRangeButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_RANGE));
639 _deleteRangeButton.setToolTipText(I18nManager.getText("menu.edit.deleterange"));
640 _deleteRangeButton.addActionListener(_deleteRangeAction);
641 _deleteRangeButton.setEnabled(false);
642 toolbar.add(_deleteRangeButton);
644 _selectStartButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_START));
645 _selectStartButton.setToolTipText(I18nManager.getText("menu.select.start"));
646 _selectStartButton.addActionListener(_selectStartAction);
647 _selectStartButton.setEnabled(false);
648 toolbar.add(_selectStartButton);
649 _selectEndButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_END));
650 _selectEndButton.setToolTipText(I18nManager.getText("menu.select.end"));
651 _selectEndButton.addActionListener(_selectEndAction);
652 _selectEndButton.setEnabled(false);
653 toolbar.add(_selectEndButton);
654 _connectPhotoButton = new JButton(IconManager.getImageIcon(IconManager.CONNECT_PHOTO));
655 _connectPhotoButton.setToolTipText(I18nManager.getText("menu.photo.connect"));
656 _connectPhotoButton.addActionListener(_connectPhotoAction);
657 _connectPhotoButton.setEnabled(false);
658 toolbar.add(_connectPhotoButton);
660 toolbar.setFloatable(false);
666 * Method to update menu when file loaded
668 public void informFileLoaded()
670 // save, undo, delete enabled
671 _sendGpsItem.setEnabled(true);
672 _saveItem.setEnabled(true);
673 _undoItem.setEnabled(true);
674 _compressItem.setEnabled(true);
675 _deleteMarkedPointsItem.setEnabled(false);
680 * @see tim.prune.DataSubscriber#dataUpdated(tim.prune.data.Track)
682 public void dataUpdated(byte inUpdateType)
684 boolean hasData = (_track != null && _track.getNumPoints() > 0);
685 // set functions which require data
686 _sendGpsItem.setEnabled(hasData);
687 _saveItem.setEnabled(hasData);
688 _saveButton.setEnabled(hasData);
689 _exportKmlItem.setEnabled(hasData);
690 _exportGpxItem.setEnabled(hasData);
691 _exportPovItem.setEnabled(hasData);
692 _compressItem.setEnabled(hasData);
693 _deleteMarkedPointsItem.setEnabled(hasData && _track.hasMarkedPoints());
694 _rearrangeMenu.setEnabled(hasData && _track.hasMixedData());
695 _selectAllItem.setEnabled(hasData);
696 _selectNoneItem.setEnabled(hasData);
697 _show3dItem.setEnabled(hasData);
698 _chartItem.setEnabled(hasData);
699 _browserMapMenu.setEnabled(hasData);
700 _distanceItem.setEnabled(hasData);
701 // is undo available?
702 boolean hasUndo = !_app.getUndoStack().isEmpty();
703 _undoItem.setEnabled(hasUndo);
704 _undoButton.setEnabled(hasUndo);
705 _clearUndoItem.setEnabled(hasUndo);
706 // is there a current point?
707 boolean hasPoint = (hasData && _selection.getCurrentPointIndex() >= 0);
708 _editPointItem.setEnabled(hasPoint);
709 _editPointButton.setEnabled(hasPoint);
710 _editWaypointNameItem.setEnabled(hasPoint);
711 _deletePointItem.setEnabled(hasPoint);
712 _deletePointButton.setEnabled(hasPoint);
713 _selectStartItem.setEnabled(hasPoint);
714 _selectStartButton.setEnabled(hasPoint);
715 _selectEndItem.setEnabled(hasPoint);
716 _selectEndButton.setEnabled(hasPoint);
717 // are there any photos?
718 boolean anyPhotos = _photos != null && _photos.getNumPhotos() > 0;
719 _saveExifItem.setEnabled(anyPhotos);
720 // is there a current photo?
721 boolean hasPhoto = anyPhotos && _selection.getCurrentPhotoIndex() >= 0;
722 // connect is available if photo and point selected, and photo has no point
723 boolean connectAvailable = hasPhoto && hasPoint && _photos.getPhoto(_selection.getCurrentPhotoIndex()) != null
724 && _photos.getPhoto(_selection.getCurrentPhotoIndex()).getDataPoint() == null;
725 _connectPhotoItem.setEnabled(connectAvailable);
726 _connectPhotoButton.setEnabled(connectAvailable);
727 _disconnectPhotoItem.setEnabled(hasPhoto && _photos.getPhoto(_selection.getCurrentPhotoIndex()) != null
728 && _photos.getPhoto(_selection.getCurrentPhotoIndex()).getDataPoint() != null);
729 _correlatePhotosItem.setEnabled(anyPhotos && hasData);
730 _deletePhotoItem.setEnabled(hasPhoto);
731 // is there a current range?
732 boolean hasRange = (hasData && _selection.hasRangeSelected());
733 _deleteRangeItem.setEnabled(hasRange);
734 _deleteRangeButton.setEnabled(hasRange);
735 _interpolateItem.setEnabled(hasRange
736 && (_selection.getEnd() - _selection.getStart()) == 1);
737 _averageItem.setEnabled(hasRange);
738 _mergeSegmentsItem.setEnabled(hasRange);
739 _reverseItem.setEnabled(hasRange);
740 _addTimeOffsetItem.setEnabled(hasRange);
741 // Is the currently selected point outside the current range?
742 _cutAndMoveItem.setEnabled(hasRange && hasPoint &&
743 (_selection.getCurrentPointIndex() < _selection.getStart()
744 || _selection.getCurrentPointIndex() > (_selection.getEnd()+1)));
749 * Ignore action completed signals
750 * @see tim.prune.DataSubscriber#actionCompleted(java.lang.String)
752 public void actionCompleted(String inMessage)