/******************************************************************************* * Copyright (c) MOBAC developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package mobac.gui.actions; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import mobac.data.gpx.gpx11.WptType; import mobac.gui.MainGUI; import mobac.gui.gpxtree.GpxEntry; import mobac.gui.gpxtree.GpxRootEntry; import mobac.gui.gpxtree.RteEntry; import mobac.gui.gpxtree.TrkEntry; import mobac.gui.gpxtree.TrksegEntry; import mobac.gui.gpxtree.WptEntry; import mobac.gui.mapview.PreviewMap; import mobac.gui.mapview.controller.GpxMapController; import mobac.utilities.I18nUtils; /** * Listener for the gpx editor tree elements. * * @author lhoeppner * @author r_x * */ public class GpxElementListener implements MouseListener { public static final String MENU_NAME_RENAME = I18nUtils.localizedStringForKey("rp_gpx_menu_rename"); public static final String MENU_NAME_DELETE = I18nUtils.localizedStringForKey("rp_gpx_menu_delete"); private final GpxEntry gpxEntry; private GpxMapController mapController = null; private GpxEditor editor = GpxEditor.getInstance(); public GpxElementListener(GpxEntry gpxEntry) { this.gpxEntry = gpxEntry; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { handleClick(e); } public void mouseReleased(MouseEvent e) { handleClick(e); } private void handleClick(MouseEvent e) { JMenuItem item = (JMenuItem) e.getSource(); if (item == null) return; if (MENU_NAME_RENAME.equals(item.getName())) { renameEntry(); } else if (MENU_NAME_DELETE.equals(item.getName())) { removeEntry(); } } /** * Removes an entry (wpt, trk, trkseg, rte) from a gpx file (and the displayed layer) Currently only works for * waypoints. * */ private void removeEntry() { int answer = JOptionPane.showConfirmDialog(null, I18nUtils.localizedStringForKey("rp_gpx_msg_confim_delete"), I18nUtils.localizedStringForKey("rp_gpx_msg_confim_delete_title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (answer == JOptionPane.YES_OPTION) { PreviewMap map = MainGUI.getMainGUI().previewMap; map.getMapSelectionController().disable(); if (mapController == null) mapController = new GpxMapController(map, gpxEntry.getLayer().getPanel(), false); mapController.enable(); if (gpxEntry.getClass().equals(RteEntry.class)) { // RteEntry rte = (RteEntry) gpxEntry; } else if (gpxEntry.getClass().equals(TrkEntry.class)) { // TrkEntry trk = (TrkEntry) gpxEntry; } else if (gpxEntry.getClass().equals(WptEntry.class)) { WptEntry wptEntry = (WptEntry) gpxEntry; WptType wpt = wptEntry.getWpt(); editor.findWptAndDelete(wpt, gpxEntry); wptEntry.getLayer().getPanel().removeWpt(wptEntry); mapController.repaint(); } else if (gpxEntry.getClass().equals(GpxRootEntry.class)) { // GpxRootEntry root = (GpxRootEntry) gpxEntry; } } else { return; } } /** * Renames (if possible) the entry according to user input. * */ private void renameEntry() { if (gpxEntry.getClass().equals(TrksegEntry.class)) { JOptionPane.showMessageDialog(null, I18nUtils.localizedStringForKey("rp_gpx_msg_can_not_rename_track"), I18nUtils.localizedStringForKey("Error"), JOptionPane.INFORMATION_MESSAGE); return; } else { if (gpxEntry.getClass().equals(RteEntry.class)) { RteEntry rte = (RteEntry) gpxEntry; String name = JOptionPane.showInputDialog(null, I18nUtils.localizedStringForKey("rp_gpx_rename_element_title"), rte.getRte().getName()); if (name == null) { return; } rte.getRte().setName(name); } else if (gpxEntry.getClass().equals(TrkEntry.class)) { TrkEntry trk = (TrkEntry) gpxEntry; String name = JOptionPane.showInputDialog(null, I18nUtils.localizedStringForKey("rp_gpx_rename_element_title"), trk.getTrk().getName()); if (name == null) { return; } trk.getTrk().setName(name); } else if (gpxEntry.getClass().equals(WptEntry.class)) { WptEntry wpt = (WptEntry) gpxEntry; String name = JOptionPane.showInputDialog(null, I18nUtils.localizedStringForKey("rp_gpx_rename_element_title"), wpt.getWpt().getName()); if (name == null) { return; } wpt.getWpt().setName(name); } else if (gpxEntry.getClass().equals(GpxRootEntry.class)) { GpxRootEntry root = (GpxRootEntry) gpxEntry; String initialValue = root.getMetaDataName(); String name = JOptionPane.showInputDialog(null, I18nUtils.localizedStringForKey("rp_gpx_rename_element_title"), initialValue); if (name == null) { return; } root.setMetaDataName(name); } } } }