KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > debugger > gui > AJMenuBar


1 /* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the debugger and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  */

22
23 package org.aspectj.debugger.gui;
24
25 import org.aspectj.debugger.base.*;
26 import org.aspectj.debugger.request.*;
27
28 import java.awt.*;
29 import java.awt.event.*;
30 import java.util.List JavaDoc;
31 import java.util.*;
32 import javax.swing.*;
33 import javax.swing.event.*;
34 import com.sun.jdi.event.*;
35
36 public class AJMenuBar
37     extends JMenuBar
38     implements AJActionsConsts {
39
40     private JMenu menu;
41     private JMenuItem item;
42     private GUIDebugger guiDebugger;
43
44
45     public AJMenuBar(GUIDebugger guiDebugger) {
46         super();
47         this.guiDebugger = guiDebugger;
48         mainMenu();
49         breakMenu();
50         threadMenu();
51         objectMenu();
52         monitorMenu();
53         aspects();
54         helpMenu();
55     }
56
57     void aspects() {
58         // Aspects can advise this
59
}
60
61     void mainMenu() {
62         menu("Main",KeyEvent.VK_M);
63         item(new RunAction(guiDebugger),
64              KeyEvent.VK_R);
65         item(new UseAction(guiDebugger),
66              KeyEvent.VK_U);
67         item(new DisconnectAction(guiDebugger),
68              KeyEvent.VK_D);
69         sep();
70         item(new QuitAction(guiDebugger),
71              KeyEvent.VK_Q);
72         add(menu);
73     }
74
75     void breakMenu() {
76         menu("Breakpoints", KeyEvent.VK_B);
77         item(new BreakpointAction(guiDebugger), KeyEvent.VK_B);
78         item(new CatchAction(guiDebugger), KeyEvent.VK_A);
79         item(new ClearAction(guiDebugger), KeyEvent.VK_C);
80         sep();
81         item(new ContAction(guiDebugger), KeyEvent.VK_O);
82         item(new NextAction(guiDebugger), KeyEvent.VK_N);
83         item(new StepAction(guiDebugger), KeyEvent.VK_S);
84         item(new StepUpAction(guiDebugger), KeyEvent.VK_U);
85         item(new StepIAction(guiDebugger), KeyEvent.VK_I);
86         add(menu);
87     }
88
89     void threadMenu() {
90         menu("Threads",
91              KeyEvent.VK_T);
92         item(new SuspendAction(guiDebugger, threadGetterToSuspend()),
93              KeyEvent.VK_S);
94         item(new ResumeAction(guiDebugger, threadGetterToResume()),
95              KeyEvent.VK_R);
96         item(new WhereAction(guiDebugger, threadGetterToWhere()),
97              KeyEvent.VK_W);
98         add(menu);
99     }
100
101     void objectMenu() {
102         menu("Objects", KeyEvent.VK_T);
103         item(new DumpAction(guiDebugger), KeyEvent.VK_D);
104         item(new EvalAction(guiDebugger), KeyEvent.VK_E);
105         item(new FieldsAction(guiDebugger), KeyEvent.VK_F);
106         item(new LocalsAction(guiDebugger), KeyEvent.VK_L);
107         item(new PrintAction(guiDebugger), KeyEvent.VK_P);
108         add(menu);
109     }
110
111     void monitorMenu() {
112         menu("Monitor", KeyEvent.VK_N);
113         check("where");
114         check("locals");
115         check("list");
116         add(menu);
117     }
118
119     void check(final String JavaDoc command) {
120         boolean present = false;
121         final Debugger debugger = guiDebugger.getDebugger();
122         Iterator iter = debugger.getMonitorRequests().iterator();
123         while (iter.hasNext()) {
124             MonitorRequest request = (MonitorRequest) iter.next();
125             if (request.getCommand().equals(command)) {
126                 present = true;
127             }
128         }
129         final JCheckBoxMenuItem item =
130             new JCheckBoxMenuItem(command, present);
131         item.setMnemonic(mnemonic(command));
132         item.addActionListener(new ActionListener() {
133             public void actionPerformed(ActionEvent e) {
134                 if (item.isSelected()) {
135                     try {
136                         debugger.monitorCommand(command);
137                     } catch (Exception JavaDoc ee) {
138                         item.setSelected(false);
139                     }
140                 } else {
141                     unmonitorCommand(command);
142                 }
143             }
144             void unmonitorCommand(String JavaDoc _command) {
145                 Iterator _iter = debugger.getMonitorRequests().iterator();
146                 while (_iter.hasNext()) {
147                     MonitorRequest request = (MonitorRequest)_iter.next();
148                     if (request.getCommand().equals(_command)) {
149                         try {
150                             debugger.unmonitorCommand(request.getNumber());
151                         } catch (Exception JavaDoc ee) {
152                             item.setSelected(true);
153                         }
154                         return;
155                     }
156                 }
157             }
158         });
159         menu.add(item);
160     }
161
162     int mnemonic(String JavaDoc command) {
163         int N = command.length();
164         int M = menu.getItemCount();
165         for (int i = 0; i < N; i++) {
166             int c = (int) command.charAt(i);
167             boolean there = false;
168             for (int j = 0; j < M; j++) {
169                 if (menu.getItem(j).getMnemonic() == c) {
170                     there = true;
171                 }
172             }
173             if (!there) {
174                 return c;
175             }
176         }
177         return -1;
178     }
179
180     void helpMenu() {
181         menu("Help", KeyEvent.VK_T);
182         add(Box.createHorizontalGlue());
183         item(new HelpAction(guiDebugger), KeyEvent.VK_F1);
184         item(new AboutAction(guiDebugger), KeyEvent.VK_F2);
185         add(menu);
186     }
187
188     ThreadGetter threadGetterToSuspend() {
189         return new ThreadGetter() {
190             public String JavaDoc getThread() {
191                 return Dialogs.showSuspendDialog();
192             }
193         };
194     }
195
196     ThreadGetter threadGetterToResume() {
197         return new ThreadGetter() {
198             public String JavaDoc getThread() {
199                 return Dialogs.showResumeDialog();
200             }
201         };
202     }
203
204     ThreadGetter threadGetterToWhere() {
205         return new ThreadGetter() {
206             public String JavaDoc getThread() {
207                 return Dialogs.showWhereDialog();
208             }
209         };
210     }
211
212
213     void sep() {
214         menu.addSeparator();
215     }
216
217
218     void menu(String JavaDoc title, int mnemonic) {
219         menu = new JMenu(title);
220         menu.setMnemonic(mnemonic);
221     }
222
223     final static String JavaDoc jdk = "1.2";
224
225     void item(AbstractActionStruct a, int key) {
226         String JavaDoc title = a.getValue(LABEL) + "";
227         int mnemonic = key;
228         KeyStroke keyStroke = KeyStroke.getKeyStroke(a.key(), a.mask());
229         if (jdk.equals("1.3")) {
230             //item = new JMenuItem(a);
231
} else {
232             item = new JMenuItem((String JavaDoc) a.getValue(LABEL),
233                                  (Icon) a.getValue(ICON));
234             item.addActionListener(a);
235         }
236         item.setText(title);
237         item.setMnemonic(mnemonic);
238         item.setAccelerator(keyStroke);
239         menu.add(item);
240
241     }
242
243     public static void main(String JavaDoc[] args) {
244         JFrame f = new JFrame("Menu Test");
245         f.setJMenuBar(new AJMenuBar(null));
246         f.addWindowListener(new WindowAdapter() {
247             public void windowClosing(WindowEvent e) {
248                 System.out.println("Exiting...");
249                 System.exit(0);
250         }});
251         f.pack();
252         f.setVisible(true);
253     }
254
255     public String JavaDoc toString() { return d(); }
256     public static String JavaDoc d() { return "Menu Bar"; }
257 }
258
Popular Tags