1 | // License: GPL. For details, see LICENSE file.
|
---|
2 | package com.innovant.josm.plugin.routing.gui;
|
---|
3 |
|
---|
4 | import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
|
---|
5 | import static org.openstreetmap.josm.tools.I18n.tr;
|
---|
6 |
|
---|
7 | import java.awt.event.ItemEvent;
|
---|
8 | import java.awt.event.KeyEvent;
|
---|
9 |
|
---|
10 | import javax.swing.ButtonGroup;
|
---|
11 | import javax.swing.JCheckBoxMenuItem;
|
---|
12 | import javax.swing.JMenu;
|
---|
13 | import javax.swing.JMenuItem;
|
---|
14 | import javax.swing.JRadioButtonMenuItem;
|
---|
15 |
|
---|
16 | import com.innovant.josm.jrt.core.RoutingGraph.RouteType;
|
---|
17 | import com.innovant.josm.plugin.routing.RoutingLayer;
|
---|
18 | import com.innovant.josm.plugin.routing.RoutingModel;
|
---|
19 | import com.innovant.josm.plugin.routing.RoutingPlugin;
|
---|
20 | import org.openstreetmap.josm.gui.MainApplication;
|
---|
21 | import org.openstreetmap.josm.gui.MainMenu;
|
---|
22 |
|
---|
23 | /**
|
---|
24 | * The menu bar from this plugin
|
---|
25 | * @author jvidal
|
---|
26 | *
|
---|
27 | */
|
---|
28 | public class RoutingMenu extends JMenu {
|
---|
29 |
|
---|
30 | /**
|
---|
31 | * Default serial version UID
|
---|
32 | */
|
---|
33 | private static final long serialVersionUID = 3559922048225708480L;
|
---|
34 |
|
---|
35 | private final JMenuItem startMI;
|
---|
36 | private final JMenuItem reverseMI;
|
---|
37 | private final JMenuItem clearMI;
|
---|
38 | private final JMenuItem regraphMI;
|
---|
39 | private final JMenu criteriaM;
|
---|
40 | private final JMenu menu;
|
---|
41 |
|
---|
42 | /**
|
---|
43 | */
|
---|
44 | public RoutingMenu() {
|
---|
45 | MainMenu mm = MainApplication.getMenu();
|
---|
46 | menu = mm.addMenu("Routing", tr("Routing"), KeyEvent.VK_O, mm.getDefaultMenuPos(), ht("/Plugin/Routing"));
|
---|
47 |
|
---|
48 | startMI = new JMenuItem(tr("Add routing layer"));
|
---|
49 | startMI.addActionListener(e -> RoutingPlugin.getInstance().addLayer());
|
---|
50 | menu.add(startMI);
|
---|
51 |
|
---|
52 | menu.addSeparator();
|
---|
53 | ButtonGroup group = new ButtonGroup();
|
---|
54 |
|
---|
55 | criteriaM = new JMenu(tr("Criteria"));
|
---|
56 |
|
---|
57 | JRadioButtonMenuItem rshorter = new JRadioButtonMenuItem(tr("Shortest"));
|
---|
58 | rshorter.setSelected(true);
|
---|
59 | rshorter.addItemListener(e -> {
|
---|
60 | if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
|
---|
61 | RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
|
---|
62 | RoutingModel routingModel = layer.getRoutingModel();
|
---|
63 | if (e.getStateChange() == ItemEvent.SELECTED) {
|
---|
64 | routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST);
|
---|
65 | } else {
|
---|
66 | routingModel.routingGraph.setTypeRoute(RouteType.FASTEST);
|
---|
67 | }
|
---|
68 | // routingModel.routingGraph.resetGraph();
|
---|
69 | // routingModel.routingGraph.createGraph();
|
---|
70 | //TODO: Change this way
|
---|
71 | //FIXME: do not change node but recalculate routing.
|
---|
72 | routingModel.setNodesChanged();
|
---|
73 | MainApplication.getMap().repaint();
|
---|
74 | }
|
---|
75 | });
|
---|
76 |
|
---|
77 | JRadioButtonMenuItem rfaster = new JRadioButtonMenuItem(tr("Fastest"));
|
---|
78 | group.add(rshorter);
|
---|
79 | group.add(rfaster);
|
---|
80 | criteriaM.add(rshorter);
|
---|
81 | criteriaM.add(rfaster);
|
---|
82 |
|
---|
83 | criteriaM.addSeparator();
|
---|
84 | JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(tr("Ignore oneways"));
|
---|
85 | cbmi.addItemListener(e -> {
|
---|
86 | if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
|
---|
87 | RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
|
---|
88 | RoutingModel routingModel = layer.getRoutingModel();
|
---|
89 | routingModel.routingGraph.getRoutingProfile().setOnewayUse(e.getStateChange() != ItemEvent.SELECTED);
|
---|
90 | routingModel.setNodesChanged();
|
---|
91 | routingModel.setOnewayChanged();
|
---|
92 | MainApplication.getMap().repaint();
|
---|
93 | }
|
---|
94 | });
|
---|
95 | criteriaM.add(cbmi);
|
---|
96 | menu.add(criteriaM);
|
---|
97 |
|
---|
98 | menu.addSeparator();
|
---|
99 | reverseMI = new JMenuItem(tr("Reverse route"));
|
---|
100 | reverseMI.addActionListener(e -> {
|
---|
101 | if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
|
---|
102 | RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
|
---|
103 | RoutingModel routingModel = layer.getRoutingModel();
|
---|
104 | routingModel.reverseNodes();
|
---|
105 | MainApplication.getMap().repaint();
|
---|
106 | }
|
---|
107 | });
|
---|
108 | menu.add(reverseMI);
|
---|
109 |
|
---|
110 | clearMI = new JMenuItem(tr("Clear route"));
|
---|
111 | clearMI.addActionListener(e -> {
|
---|
112 | if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
|
---|
113 | RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
|
---|
114 | RoutingModel routingModel = layer.getRoutingModel();
|
---|
115 | // Reset routing nodes and paths
|
---|
116 | routingModel.reset();
|
---|
117 | RoutingPlugin.getInstance().getRoutingDialog().clearNodes();
|
---|
118 | MainApplication.getMap().repaint();
|
---|
119 | }
|
---|
120 | });
|
---|
121 | menu.add(clearMI);
|
---|
122 |
|
---|
123 | regraphMI = new JMenuItem(tr("Reconstruct Graph"));
|
---|
124 | regraphMI.addActionListener(e -> {
|
---|
125 | if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) {
|
---|
126 | RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer();
|
---|
127 | RoutingModel routingModel = layer.getRoutingModel();
|
---|
128 | routingModel.routingGraph.resetGraph();
|
---|
129 | routingModel.routingGraph.createGraph();
|
---|
130 | }
|
---|
131 | });
|
---|
132 | menu.add(regraphMI);
|
---|
133 |
|
---|
134 | // Initially disabled
|
---|
135 | disableAllItems();
|
---|
136 | }
|
---|
137 |
|
---|
138 | public void disableAllItems() {
|
---|
139 | startMI.setEnabled(false);
|
---|
140 | reverseMI.setEnabled(false);
|
---|
141 | clearMI.setEnabled(false);
|
---|
142 | criteriaM.setEnabled(false);
|
---|
143 | regraphMI.setEnabled(false);
|
---|
144 | }
|
---|
145 |
|
---|
146 | public void enableStartItem() {
|
---|
147 | startMI.setEnabled(true);
|
---|
148 | }
|
---|
149 |
|
---|
150 | public void enableRestOfItems() {
|
---|
151 | reverseMI.setEnabled(true);
|
---|
152 | clearMI.setEnabled(true);
|
---|
153 | criteriaM.setEnabled(true);
|
---|
154 | regraphMI.setEnabled(true);
|
---|
155 | }
|
---|
156 |
|
---|
157 | public void disableRestOfItems() {
|
---|
158 | reverseMI.setEnabled(false);
|
---|
159 | clearMI.setEnabled(false);
|
---|
160 | criteriaM.setEnabled(false);
|
---|
161 | regraphMI.setEnabled(false);
|
---|
162 | }
|
---|
163 | }
|
---|