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

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