// License: GPL. For details, see LICENSE file. package com.innovant.josm.plugin.routing.gui; import static org.openstreetmap.josm.gui.help.HelpUtil.ht; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JRadioButtonMenuItem; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.MainMenu; import com.innovant.josm.jrt.core.RoutingGraph.RouteType; import com.innovant.josm.plugin.routing.RoutingLayer; import com.innovant.josm.plugin.routing.RoutingModel; import com.innovant.josm.plugin.routing.RoutingPlugin; /** * The menu bar from this plugin * @author jvidal * */ public class RoutingMenu extends JMenu { /** * Default serial version UID */ private static final long serialVersionUID = 3559922048225708480L; private final JMenuItem startMI; private final JMenuItem reverseMI; private final JMenuItem clearMI; private final JMenuItem regraphMI; private final JMenu criteriaM; private final JMenu menu; /** */ public RoutingMenu() { MainMenu mm = Main.main.menu; menu = mm.addMenu("Routing", tr("Routing"), KeyEvent.VK_O, mm.getDefaultMenuPos(), ht("/Plugin/Routing")); startMI = new JMenuItem(tr("Add routing layer")); startMI.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { RoutingPlugin.getInstance().addLayer(); } }); menu.add(startMI); menu.addSeparator(); ButtonGroup group = new ButtonGroup(); criteriaM = new JMenu(tr("Criteria")); JRadioButtonMenuItem rshorter = new JRadioButtonMenuItem(tr("Shortest")); rshorter.setSelected(true); rshorter.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (Main.getLayerManager().getActiveLayer() instanceof RoutingLayer) { RoutingLayer layer = (RoutingLayer) Main.getLayerManager().getActiveLayer(); RoutingModel routingModel = layer.getRoutingModel(); if (e.getStateChange() == ItemEvent.SELECTED) { routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST); } else { routingModel.routingGraph.setTypeRoute(RouteType.FASTEST); } // routingModel.routingGraph.resetGraph(); // routingModel.routingGraph.createGraph(); //TODO: Change this way //FIXME: do not change node but recalculate routing. routingModel.setNodesChanged(); Main.map.repaint(); } } }); JRadioButtonMenuItem rfaster = new JRadioButtonMenuItem(tr("Fastest")); group.add(rshorter); group.add(rfaster); criteriaM.add(rshorter); criteriaM.add(rfaster); criteriaM.addSeparator(); JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(tr("Ignore oneways")); cbmi.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if (Main.getLayerManager().getActiveLayer() instanceof RoutingLayer) { RoutingLayer layer = (RoutingLayer) Main.getLayerManager().getActiveLayer(); RoutingModel routingModel = layer.getRoutingModel(); if (e.getStateChange() == ItemEvent.SELECTED) routingModel.routingGraph.getRoutingProfile().setOnewayUse(false); else routingModel.routingGraph.getRoutingProfile().setOnewayUse(true); routingModel.setNodesChanged(); routingModel.setOnewayChanged(); Main.map.repaint(); } } }); criteriaM.add(cbmi); menu.add(criteriaM); menu.addSeparator(); reverseMI = new JMenuItem(tr("Reverse route")); reverseMI.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (Main.getLayerManager().getActiveLayer() instanceof RoutingLayer) { RoutingLayer layer = (RoutingLayer) Main.getLayerManager().getActiveLayer(); RoutingModel routingModel = layer.getRoutingModel(); routingModel.reverseNodes(); Main.map.repaint(); } } }); menu.add(reverseMI); clearMI = new JMenuItem(tr("Clear route")); clearMI.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (Main.getLayerManager().getActiveLayer() instanceof RoutingLayer) { RoutingLayer layer = (RoutingLayer) Main.getLayerManager().getActiveLayer(); RoutingModel routingModel = layer.getRoutingModel(); // Reset routing nodes and paths routingModel.reset(); RoutingPlugin.getInstance().getRoutingDialog().clearNodes(); Main.map.repaint(); } } }); menu.add(clearMI); regraphMI = new JMenuItem(tr("Reconstruct Graph")); regraphMI.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (Main.getLayerManager().getActiveLayer() instanceof RoutingLayer) { RoutingLayer layer = (RoutingLayer) Main.getLayerManager().getActiveLayer(); RoutingModel routingModel = layer.getRoutingModel(); routingModel.routingGraph.resetGraph(); routingModel.routingGraph.createGraph(); } } }); menu.add(regraphMI); // Initially disabled disableAllItems(); } public void disableAllItems() { startMI.setEnabled(false); reverseMI.setEnabled(false); clearMI.setEnabled(false); criteriaM.setEnabled(false); regraphMI.setEnabled(false); } public void enableStartItem() { startMI.setEnabled(true); } public void enableRestOfItems() { reverseMI.setEnabled(true); clearMI.setEnabled(true); criteriaM.setEnabled(true); regraphMI.setEnabled(true); } public void disableRestOfItems() { reverseMI.setEnabled(false); clearMI.setEnabled(false); criteriaM.setEnabled(false); regraphMI.setEnabled(false); } }