source: subversion/applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java

Last change on this file was 33794, checked in by donvip, 18 months ago

update to JOSM 12840

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