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

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

close #2160. patch by xeen

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