1 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 ; 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 } 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 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 ee) { 138 item.setSelected(false); 139 } 140 } else { 141 unmonitorCommand(command); 142 } 143 } 144 void unmonitorCommand(String _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 ee) { 152 item.setSelected(true); 153 } 154 return; 155 } 156 } 157 } 158 }); 159 menu.add(item); 160 } 161 162 int mnemonic(String 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 getThread() { 191 return Dialogs.showSuspendDialog(); 192 } 193 }; 194 } 195 196 ThreadGetter threadGetterToResume() { 197 return new ThreadGetter() { 198 public String getThread() { 199 return Dialogs.showResumeDialog(); 200 } 201 }; 202 } 203 204 ThreadGetter threadGetterToWhere() { 205 return new ThreadGetter() { 206 public String getThread() { 207 return Dialogs.showWhereDialog(); 208 } 209 }; 210 } 211 212 213 void sep() { 214 menu.addSeparator(); 215 } 216 217 218 void menu(String title, int mnemonic) { 219 menu = new JMenu(title); 220 menu.setMnemonic(mnemonic); 221 } 222 223 final static String jdk = "1.2"; 224 225 void item(AbstractActionStruct a, int key) { 226 String title = a.getValue(LABEL) + ""; 227 int mnemonic = key; 228 KeyStroke keyStroke = KeyStroke.getKeyStroke(a.key(), a.mask()); 229 if (jdk.equals("1.3")) { 230 } else { 232 item = new JMenuItem((String ) 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 [] 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 toString() { return d(); } 256 public static String d() { return "Menu Bar"; } 257 } 258 | Popular Tags |