source: josm/trunk/src/org/openstreetmap/josm/gui/MainMenu.java@ 1415

Last change on this file since 1415 was 1415, checked in by stoecker, 15 years ago

applied patch #2185 by bruce89

  • Property svn:eol-style set to native
File size: 11.3 KB
Line 
1// License: GPL. See LICENSE file for details.
2
3package org.openstreetmap.josm.gui;
4
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.awt.event.ActionListener;
9
10import javax.swing.JCheckBoxMenuItem;
11import javax.swing.JMenu;
12import javax.swing.JMenuBar;
13import javax.swing.JMenuItem;
14import javax.swing.KeyStroke;
15import java.awt.event.KeyEvent;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.actions.AboutAction;
19import org.openstreetmap.josm.actions.AddNodeAction;
20import org.openstreetmap.josm.actions.AlignInCircleAction;
21import org.openstreetmap.josm.actions.AlignInLineAction;
22import org.openstreetmap.josm.actions.OpenLocationAction;
23import org.openstreetmap.josm.actions.OrthogonalizeAction;
24import org.openstreetmap.josm.actions.AutoScaleAction;
25import org.openstreetmap.josm.actions.CombineWayAction;
26import org.openstreetmap.josm.actions.CopyAction;
27import org.openstreetmap.josm.actions.CreateCircleAction;
28import org.openstreetmap.josm.actions.DeleteAction;
29import org.openstreetmap.josm.actions.DistributeAction;
30import org.openstreetmap.josm.actions.DownloadAction;
31import org.openstreetmap.josm.actions.DuplicateAction;
32import org.openstreetmap.josm.actions.ExitAction;
33import org.openstreetmap.josm.actions.GpxExportAction;
34import org.openstreetmap.josm.actions.HelpAction;
35import org.openstreetmap.josm.actions.HistoryInfoAction;
36import org.openstreetmap.josm.actions.JoinNodeWayAction;
37import org.openstreetmap.josm.actions.JosmAction;
38import org.openstreetmap.josm.actions.MergeNodesAction;
39import org.openstreetmap.josm.actions.NewAction;
40import org.openstreetmap.josm.actions.OpenFileAction;
41import org.openstreetmap.josm.actions.PasteAction;
42import org.openstreetmap.josm.actions.PasteTagsAction;
43import org.openstreetmap.josm.actions.PreferencesAction;
44import org.openstreetmap.josm.actions.RedoAction;
45import org.openstreetmap.josm.actions.ReverseWayAction;
46import org.openstreetmap.josm.actions.SaveAction;
47import org.openstreetmap.josm.actions.SaveAsAction;
48import org.openstreetmap.josm.actions.SelectAllAction;
49import org.openstreetmap.josm.actions.SplitWayAction;
50import org.openstreetmap.josm.actions.UnGlueAction;
51import org.openstreetmap.josm.actions.UndoAction;
52import org.openstreetmap.josm.actions.UnselectAllAction;
53import org.openstreetmap.josm.actions.UploadAction;
54import org.openstreetmap.josm.actions.ZoomInAction;
55import org.openstreetmap.josm.actions.ZoomOutAction;
56import org.openstreetmap.josm.actions.audio.AudioBackAction;
57import org.openstreetmap.josm.actions.audio.AudioFasterAction;
58import org.openstreetmap.josm.actions.audio.AudioFwdAction;
59import org.openstreetmap.josm.actions.audio.AudioNextAction;
60import org.openstreetmap.josm.actions.audio.AudioPlayPauseAction;
61import org.openstreetmap.josm.actions.audio.AudioPrevAction;
62import org.openstreetmap.josm.actions.audio.AudioSlowerAction;
63import org.openstreetmap.josm.actions.search.SearchAction;
64import org.openstreetmap.josm.actions.ToggleGPXLinesAction;
65import org.openstreetmap.josm.tools.Shortcut;
66
67/**
68 * This is the JOSM main menu bar. It is overwritten to initialize itself and provide all menu
69 * entries as member variables (sort of collect them).
70 *
71 * It also provides possibilities to attach new menu entries (used by plugins).
72 *
73 * @author Immanuel.Scholz
74 */
75public class MainMenu extends JMenuBar {
76
77 /* File menu */
78 public final NewAction newAction = new NewAction();
79 public final OpenFileAction openFile = new OpenFileAction();
80 public final OpenLocationAction openLocation = new OpenLocationAction();
81 public final JosmAction save = new SaveAction(null);
82 public final JosmAction saveAs = new SaveAsAction(null);
83 public final JosmAction gpxExport = new GpxExportAction(null);
84 public final DownloadAction download = new DownloadAction();
85 public final JosmAction upload = new UploadAction();
86 public final JosmAction exit = new ExitAction();
87
88 /* Edit menu */
89 public final UndoAction undo = new UndoAction();
90 public final RedoAction redo = new RedoAction();
91 public final JosmAction copy = new CopyAction();
92 public final JosmAction paste = new PasteAction();
93 public final JosmAction pasteTags = new PasteTagsAction(copy);
94 public final JosmAction duplicate = new DuplicateAction();
95 public final JosmAction delete = new DeleteAction();
96 public final JosmAction selectAll = new SelectAllAction();
97 public final JosmAction unselectAll = new UnselectAllAction();
98 /* crashes when loading data, if using JosmAction for search */
99 public final JosmAction search = new SearchAction();
100 public final JosmAction preferences = new PreferencesAction();
101
102 /* View menu */
103 public final JosmAction toggleGPXLines = new ToggleGPXLinesAction();
104
105 /* Tools menu */
106 public final JosmAction splitWay = new SplitWayAction();
107 public final JosmAction combineWay = new CombineWayAction();
108 public final JosmAction reverseWay = new ReverseWayAction();
109 public final JosmAction alignInCircle = new AlignInCircleAction();
110 public final JosmAction alignInLine = new AlignInLineAction();
111 public final JosmAction distribute = new DistributeAction();
112 public final JosmAction ortho = new OrthogonalizeAction();
113 public final AddNodeAction addnode = new AddNodeAction();
114 public final JosmAction createCircle = new CreateCircleAction();
115 public final JosmAction mergeNodes = new MergeNodesAction();
116 public final JosmAction joinNodeWay = new JoinNodeWayAction();
117 public final JosmAction unglueNodes = new UnGlueAction();
118 public final HistoryInfoAction historyinfo = new HistoryInfoAction();
119
120 /* Audio menu */
121 public final JosmAction audioPlayPause = new AudioPlayPauseAction();
122 public final JosmAction audioNext = new AudioNextAction();
123 public final JosmAction audioPrev = new AudioPrevAction();
124 public final JosmAction audioFwd = new AudioFwdAction();
125 public final JosmAction audioBack = new AudioBackAction();
126 public final JosmAction audioFaster = new AudioFasterAction();
127 public final JosmAction audioSlower = new AudioSlowerAction();
128
129 /* Help menu */
130 public final HelpAction help = new HelpAction();
131 public final JosmAction about = new AboutAction();
132
133 public final JMenu fileMenu = new JMenu(tr("File"));
134 public final JMenu editMenu = new JMenu(tr("Edit"));
135 public final JMenu viewMenu = new JMenu(tr("View"));
136 public final JMenu toolsMenu = new JMenu(tr("Tools"));
137 public final JMenu audioMenu = new JMenu(tr("Audio"));
138 public final JMenu presetsMenu = new JMenu(tr("Presets"));
139 public final JMenu helpMenu = new JMenu(tr("Help"));
140
141 /**
142 * Add a JosmAction to a menu.
143 *
144 * This method handles all the shortcut handling. It also makes sure that actions that are
145 * handled by the OS are not duplicated on the menu.
146 */
147 public static JMenuItem add(JMenu menu, JosmAction action) {
148 JMenuItem menuitem = null;
149 if (!action.getShortcut().getAutomatic()) {
150 menuitem = menu.add(action);
151 KeyStroke ks = action.getShortcut().getKeyStroke();
152 if (ks != null) {
153 menuitem.setAccelerator(ks);
154 }
155 }
156 return menuitem;
157 }
158
159 /**
160 * Add a menu to the main menu.
161 *
162 * This method handles all the shortcut handling.
163 */
164 public void add(JMenu menu, int mnemonicKey, String shortName) {
165 Shortcut.registerShortcut("menu:" + shortName, tr("Menu: {0}", menu.getText()), mnemonicKey,
166 Shortcut.GROUP_MNEMONIC).setMnemonic(menu);
167 add(menu);
168 }
169
170 public MainMenu() {
171 JMenuItem current;
172
173 add(fileMenu, newAction);
174 add(fileMenu, openFile);
175 add(fileMenu, openLocation);
176 fileMenu.addSeparator();
177 add(fileMenu, save);
178 add(fileMenu, saveAs);
179 add(fileMenu, gpxExport);
180 fileMenu.addSeparator();
181 add(fileMenu, download);
182 add(fileMenu, upload);
183 fileMenu.addSeparator();
184 add(fileMenu, exit);
185 add(fileMenu, KeyEvent.VK_F, "file");
186
187 add(editMenu, undo);
188 add(editMenu, redo);
189 editMenu.addSeparator();
190 add(editMenu, copy);
191 add(editMenu, paste);
192 add(editMenu, pasteTags);
193 add(editMenu, duplicate);
194 add(editMenu, delete);
195 editMenu.addSeparator();
196 add(editMenu, selectAll);
197 add(editMenu, unselectAll);
198 editMenu.addSeparator();
199 add(editMenu, search);
200 editMenu.addSeparator();
201 add(editMenu, preferences);
202 add(editMenu, KeyEvent.VK_E, "edit");
203
204 // TODO move code to an "action" like the others?
205 final JCheckBoxMenuItem wireframe = new JCheckBoxMenuItem(tr("Wireframe View"));
206 wireframe.setSelected(Main.pref.getBoolean("draw.wireframe", false));
207 wireframe.setAccelerator(Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"),
208 KeyEvent.VK_W, Shortcut.GROUP_MENU).getKeyStroke());
209 wireframe.addActionListener(new ActionListener() {
210 public void actionPerformed(ActionEvent ev) {
211 Main.pref.put("draw.wireframe", wireframe.isSelected());
212 if (Main.map != null) {
213 Main.map.mapView.repaint();
214 }
215 }
216 });
217 viewMenu.add(wireframe);
218 viewMenu.addSeparator();
219 add(viewMenu, new ZoomInAction());
220 add(viewMenu, new ZoomOutAction());
221 viewMenu.addSeparator();
222 for (String mode : AutoScaleAction.modes) {
223 JosmAction autoScaleAction = new AutoScaleAction(mode);
224 add(viewMenu, autoScaleAction);
225 }
226 add(viewMenu, KeyEvent.VK_V, "view");
227
228 add(toolsMenu, splitWay);
229 add(toolsMenu, combineWay);
230 toolsMenu.addSeparator();
231 add(toolsMenu, reverseWay);
232 toolsMenu.addSeparator();
233 add(toolsMenu, alignInCircle);
234 add(toolsMenu, alignInLine);
235 add(toolsMenu, distribute);
236 add(toolsMenu, ortho);
237 toolsMenu.addSeparator();
238 add(toolsMenu, addnode);
239 add(toolsMenu, createCircle);
240 toolsMenu.addSeparator();
241 add(toolsMenu, mergeNodes);
242 add(toolsMenu, joinNodeWay);
243 add(toolsMenu, unglueNodes);
244 toolsMenu.addSeparator();
245 add(toolsMenu, historyinfo);
246 add(toolsMenu, KeyEvent.VK_T, "tools");
247
248 add(presetsMenu, KeyEvent.VK_P, "presets");
249
250 if (!Main.pref.getBoolean("audio.menuinvisible", false)) {
251 add(audioMenu, audioPlayPause);
252 add(audioMenu, audioNext);
253 add(audioMenu, audioPrev);
254 add(audioMenu, audioFwd);
255 add(audioMenu, audioBack);
256 add(audioMenu, audioSlower);
257 add(audioMenu, audioFaster);
258 add(audioMenu, KeyEvent.VK_A, "audio");
259 }
260
261 /* TODO: Anyone really using this feature? */
262 /*JMenuItem check = new JMenuItem("DEBUG: Check Dataset");
263 check.addActionListener(new ActionListener() {
264 public void actionPerformed(ActionEvent e) {
265 DataSetChecker.check();
266 }
267 });
268 helpMenu.add(check);*/
269 current = helpMenu.add(help); // why is help not a JosmAction?
270 current.setAccelerator(Shortcut.registerShortcut("system:help", tr("Help"), KeyEvent.VK_F1,
271 Shortcut.GROUP_DIRECT).getKeyStroke());
272 add(helpMenu, about);
273 add(helpMenu, KeyEvent.VK_H, "help");
274 }
275}
Note: See TracBrowser for help on using the repository browser.