1 31 32 package org.antlr.works.editor; 33 34 import org.antlr.works.IDE; 35 import org.antlr.works.components.grammar.CEditorGrammar; 36 import org.antlr.works.menu.ContextualMenuFactory; 37 import org.antlr.works.prefs.AWPrefs; 38 import org.antlr.works.syntax.element.ElementGrammarName; 39 import org.antlr.xjlib.appkit.menu.*; 40 41 import javax.swing.*; 42 import java.awt.*; 43 import java.awt.event.KeyEvent ; 44 import java.util.ResourceBundle ; 45 46 public class EditorMenu implements XJMenuItemDelegate { 47 48 public static final int MI_PRINT = 5; 49 50 public static final int MI_TOGGLE_SYNTAX_COLORING = 6; 52 public static final int MI_TOGGLE_SYNTAX_DIAGRAM = 7; 53 public static final int MI_TOGGLE_NFA_OPTIMIZATION = 9; 54 public static final int MI_TOGGLE_AUTOINDENT = 10; 55 56 public static final int MI_EXPAND_COLLAPSE_RULE = 20; 58 public static final int MI_EXPAND_COLLAPSE_ACTION = 21; 59 60 public static final int MI_FIND = 30; 62 public static final int MI_FIND_NEXT = 31; 63 public static final int MI_FIND_PREV = 32; 64 public static final int MI_FIND_TOKEN = 33; 65 public static final int MI_FIND_USAGE = 34; 66 67 public static final int MI_GOTO_RULE = 40; 69 public static final int MI_GOTO_DECLARATION = 41; 70 public static final int MI_GOTO_LINE = 42; 71 public static final int MI_GOTO_CHARACTER = 43; 72 public static final int MI_GOTO_BACK = 44; 73 public static final int MI_GOTO_FORWARD = 45; 74 public static final int MI_PREV_BREAKPOINT = 46; 75 public static final int MI_NEXT_BREAKPOINT = 47; 76 77 public static final int MI_HIGHLIGHT_DECISION_DFA = 50; 79 public static final int MI_SHOW_DECISION_DFA = 51; 80 public static final int MI_SHOW_DEPENDENCY = 52; 81 public static final int MI_SHOW_TOKENS_SD = 53; 82 public static final int MI_SHOW_TOKENS_DFA = 54; 83 public static final int MI_INSERT_TEMPLATE = 55; 84 public static final int MI_GROUP_RULE = 56; 85 public static final int MI_UNGROUP_RULE = 57; 86 public static final int MI_IGNORE_RULE = 58; 87 public static final int MI_CHECK_GRAMMAR = 59; 88 89 public static final int MI_RENAME = 61; 91 public static final int MI_REPLACE_LITERAL_WITH_TOKEN_LABEL = 62; 92 public static final int MI_LITERAL_TO_SINGLEQUOTE = 63; 93 public static final int MI_LITERAL_TO_DOUBLEQUOTE = 64; 94 public static final int MI_LITERAL_TO_CSTYLEQUOTE = 65; 95 public static final int MI_REMOVE_LEFT_RECURSION = 66; 96 public static final int MI_REMOVE_ALL_LEFT_RECURSION = 67; 97 public static final int MI_EXTRACT_RULE = 68; 98 public static final int MI_INLINE_RULE = 69; 99 100 public static final int MI_GENERATE_CODE = 70; 102 public static final int MI_SHOW_GENERATED_PARSER_CODE = 71; 103 public static final int MI_SHOW_GENERATED_LEXER_CODE = 72; 104 public static final int MI_SHOW_RULE_GENCODE = 73; 105 106 public static final int MI_RUN_INTERPRETER = 80; 108 public static final int MI_DEBUG = 81; 109 public static final int MI_DEBUG_AGAIN = 82; 110 public static final int MI_DEBUG_REMOTE = 83; 111 public static final int MI_DEBUG_SHOW_INPUT_TOKENS = 86; 112 113 public static final int MI_P4_EDIT = 90; 115 public static final int MI_P4_ADD = 91; 116 public static final int MI_P4_DELETE = 92; 117 public static final int MI_P4_REVERT = 93; 118 public static final int MI_P4_SUBMIT = 94; 119 public static final int MI_P4_SYNC = 95; 120 121 public static final int MI_SUBMIT_STATS = 100; 123 public static final int MI_SEND_FEEDBACK = 101; 124 public static final int MI_CHECK_UPDATES = 102; 125 126 public static final int MI_EXPORT_AS_IMAGE = 110; 128 public static final int MI_EXPORT_AS_EPS = 111; 129 public static final int MI_EXPORT_ALL_AS_IMAGE = 112; 130 public static final int MI_EXPORT_ALL_AS_EPS = 113; 131 public static final int MI_EXPORT_AS_DOT = 114; 132 public static final int MI_EXPORT_EVENT = 115; 133 134 public static final int MI_PRIVATE_UNREGISTER = 200; 135 136 protected CEditorGrammar editor = null; 137 protected XJMenuItem ignoreRuleMenuItem; 138 139 public XJMenu menuGrammar; 140 141 142 protected static ResourceBundle resourceBundle = IDE.getMenusResourceBundle(); 143 144 public EditorMenu(CEditorGrammar editor) { 145 this.editor = editor; 146 } 147 148 public void close() { 149 } 150 151 public boolean isDebuggerRunning() { 152 return editor.debugger.isRunning(); 153 } 154 155 public void customizeFileMenu(XJMenu menu) { 156 menu.insertItemAfter(new XJMenuItem(resourceBundle.getString("menu.item.print"), KeyEvent.VK_P, MI_PRINT, this), XJMainMenuBar.MI_SAVEAS); 157 menu.insertSeparatorAfter(XJMainMenuBar.MI_SAVEAS); 158 159 XJMenu exportMenu = new XJMenu(); 160 exportMenu.setTitle(resourceBundle.getString("menu.title.exportEvents")); 161 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.asText"), MI_EXPORT_EVENT, this)); 162 163 menu.insertItemAfter(exportMenu, XJMainMenuBar.MI_SAVEAS); 164 165 exportMenu = new XJMenu(); 166 exportMenu.setTitle(resourceBundle.getString("menu.title.exportAllRules")); 167 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.exportAsEPS"), MI_EXPORT_ALL_AS_EPS, this)); 168 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.exportAsBitmap"), MI_EXPORT_ALL_AS_IMAGE, this)); 169 170 menu.insertItemAfter(exportMenu, XJMainMenuBar.MI_SAVEAS); 171 172 exportMenu = new XJMenu(); 173 exportMenu.setTitle(resourceBundle.getString("menu.title.export")); 174 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.exportAsEPS"), MI_EXPORT_AS_EPS, this)); 175 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.exportAsBitmap"), MI_EXPORT_AS_IMAGE, this)); 176 exportMenu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.exportAsDot"), MI_EXPORT_AS_DOT, this)); 177 178 menu.insertItemAfter(exportMenu, XJMainMenuBar.MI_SAVEAS); 179 180 menu.insertSeparatorAfter(XJMainMenuBar.MI_SAVEAS); 181 } 182 183 public void customizeMenuBar(XJMainMenuBar menubar) { 184 createFindMenu(menubar); 185 createGoToMenu(menubar); 186 createGrammarMenu(menubar); 187 createRefactorMenu(menubar); 188 createGenerateMenu(menubar); 189 createRunMenu(menubar); 190 if(!IDE.isPlugin()) 191 createSCMMenu(menubar); 192 createPrivateMenu(menubar); 193 } 194 195 private void createPrivateMenu(XJMainMenuBar menubar) { 196 XJMenu menu; 197 if(AWPrefs.getPrivateMenu()) { 198 menu = new XJMenu(); 199 menu.setTitle("*"); 200 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.unregisterUser"), MI_PRIVATE_UNREGISTER, this)); 201 202 menubar.addCustomMenu(menu); 203 } 204 } 205 206 private void createSCMMenu(XJMainMenuBar menubar) { 207 XJMenu menu; 208 menu = new XJMenu(); 209 menu.setTitle(resourceBundle.getString("menu.title.scm")); 210 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmOpenForEdit"), MI_P4_EDIT, this)); 211 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmMarkForAdd"), MI_P4_ADD, this)); 212 menu.addSeparator(); 213 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmMarkForDelete"), MI_P4_DELETE, this)); 214 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmRevert"), MI_P4_REVERT, this)); 215 menu.addSeparator(); 216 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmSubmit"), MI_P4_SUBMIT, this)); 217 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.scmSync"), MI_P4_SYNC, this)); 218 219 menubar.addCustomMenu(menu); 220 } 221 222 private void createRunMenu(XJMainMenuBar menubar) { 223 XJMenu menu; 224 menu = new XJMenu(); 225 menu.setTitle(resourceBundle.getString("menu.title.debugger")); 226 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.debug"), KeyEvent.VK_D, MI_DEBUG, this)); 227 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.debugAgain"), KeyEvent.VK_D, XJMenuItem.getKeyModifier() | Event.SHIFT_MASK, MI_DEBUG_AGAIN, this)); 228 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.debugRemote"), MI_DEBUG_REMOTE, this)); 229 menu.addSeparator(); 230 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showInputTokens"), MI_DEBUG_SHOW_INPUT_TOKENS, this)); 231 232 menubar.addCustomMenu(menu); 233 } 234 235 private void createGenerateMenu(XJMainMenuBar menubar) { 236 XJMenu menu; 237 menu = new XJMenu(); 238 menu.setTitle(resourceBundle.getString("menu.title.generate")); 239 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.generateCode"), KeyEvent.VK_G, XJMenuItem.getKeyModifier() | Event.SHIFT_MASK, MI_GENERATE_CODE, this)); 240 menu.addSeparator(); 241 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showParserCode"), MI_SHOW_GENERATED_PARSER_CODE, this)); 242 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showLexerCode"), MI_SHOW_GENERATED_LEXER_CODE, this)); 243 menu.addSeparator(); 244 menu.addItem(createMenuItem(MI_SHOW_RULE_GENCODE)); 245 246 menubar.addCustomMenu(menu); 247 } 248 249 private void createGoToMenu(XJMainMenuBar menubar) { 250 XJMenu menu; 251 menu = new XJMenu(); 252 menu.setTitle(resourceBundle.getString("menu.title.goto")); 253 254 menu.addItem(createMenuItem(MI_GOTO_RULE)); 255 menu.addItem(createMenuItem(MI_GOTO_DECLARATION)); 256 menu.addSeparator(); 257 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoLine"), KeyEvent.VK_G, MI_GOTO_LINE, this)); 258 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoCharacter"), MI_GOTO_CHARACTER, this)); 259 menu.addSeparator(); 260 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoBack"), KeyEvent.VK_LEFT, XJMenuItem.getKeyModifier() | Event.ALT_MASK, MI_GOTO_BACK, this)); 261 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoForward"), KeyEvent.VK_RIGHT, XJMenuItem.getKeyModifier() | Event.ALT_MASK, MI_GOTO_FORWARD, this)); 262 menu.addSeparator(); 263 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoPreviousBreakpoint"), MI_PREV_BREAKPOINT, this)); 264 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.gotoNextBreakpoint"), MI_NEXT_BREAKPOINT, this)); 265 266 menubar.addCustomMenu(menu); 267 } 268 269 private void createRefactorMenu(XJMainMenuBar menubar) { 270 XJMenu menu; 271 menu = new XJMenu(); 272 menu.setTitle(resourceBundle.getString("menu.title.refactor")); 273 menu.addItem(createMenuItem(MI_RENAME)); 274 menu.addItem(createMenuItem(MI_REPLACE_LITERAL_WITH_TOKEN_LABEL)); 275 menu.addSeparator(); 276 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.removeLeftRecursion"), MI_REMOVE_LEFT_RECURSION, this)); 277 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.removeAllLeftRecursion"), MI_REMOVE_ALL_LEFT_RECURSION, this)); 278 menu.addSeparator(); 279 menu.addItem(createMenuItem(MI_EXTRACT_RULE)); 280 menu.addItem(createMenuItem(MI_INLINE_RULE)); 281 menu.addSeparator(); 282 283 XJMenu literals = new XJMenu(); 284 literals.setTitle(resourceBundle.getString("menu.title.convertLiterals")); 285 literals.addItem(new XJMenuItem(resourceBundle.getString("menu.item.convertToSingleQuote"), MI_LITERAL_TO_SINGLEQUOTE, this)); 286 literals.addItem(new XJMenuItem(resourceBundle.getString("menu.item.convertToDoubleQuote"), MI_LITERAL_TO_DOUBLEQUOTE, this)); 287 literals.addItem(new XJMenuItem(resourceBundle.getString("menu.item.convertToCStyleQuote"), MI_LITERAL_TO_CSTYLEQUOTE, this)); 288 289 menu.addItem(literals); 290 291 menubar.addCustomMenu(menu); 292 } 293 294 private void createGrammarMenu(XJMainMenuBar menubar) { 295 menuGrammar = new XJMenu(); 296 menuGrammar.setTitle(resourceBundle.getString("menu.title.grammar")); 297 menuGrammar.addItem(new XJMenuItemCheck(resourceBundle.getString("menu.item.highlightDecisionDFA"), MI_HIGHLIGHT_DECISION_DFA, this, false)); 298 menuGrammar.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showRuleDependencyGraph"), MI_SHOW_DEPENDENCY, this)); 299 menuGrammar.addSeparator(); 300 menuGrammar.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showTokensSyntaxDiagram"), MI_SHOW_TOKENS_SD, this)); 301 menuGrammar.addItem(new XJMenuItem(resourceBundle.getString("menu.item.showTokensDFA"), MI_SHOW_TOKENS_DFA, this)); 302 menuGrammar.addSeparator(); 303 menuGrammar.addItem(new XJMenuItem(resourceBundle.getString("menu.item.insertRuleFromTemplate"), KeyEvent.VK_T, MI_INSERT_TEMPLATE, this)); 304 305 XJMenu rules = new XJMenu(); 306 rules.setTitle(resourceBundle.getString("menu.title.rules")); 307 rules.addItem(createMenuItem(MI_GROUP_RULE)); 308 rules.addItem(createMenuItem(MI_UNGROUP_RULE)); 309 rules.addSeparator(); 310 rules.addItem(ignoreRuleMenuItem = createMenuItem(MI_IGNORE_RULE)); 311 312 319 320 menuGrammar.addItem(rules); 321 menuGrammar.addSeparator(); 323 menuGrammar.addItem(new XJMenuItem(resourceBundle.getString("menu.item.checkGrammar"), KeyEvent.VK_R, MI_CHECK_GRAMMAR, this)); 324 325 menubar.addCustomMenu(menuGrammar); 326 } 327 328 private void createFindMenu(XJMainMenuBar menubar) { 329 XJMenu menu; 330 menu = new XJMenu(); 331 menu.setTitle(resourceBundle.getString("menu.title.find")); 332 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.find"), KeyEvent.VK_F, MI_FIND, this)); 333 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.findNext"), KeyEvent.VK_F3, 0, MI_FIND_NEXT, this)); 334 menu.addItem(new XJMenuItem(resourceBundle.getString("menu.item.findPrevious"), KeyEvent.VK_F3, Event.SHIFT_MASK, MI_FIND_PREV, this)); 335 menu.addItem(createMenuItem(MI_FIND_TOKEN)); 336 menu.addSeparator(); 337 menu.addItem(createMenuItem(MI_FIND_USAGE)); 338 339 menubar.addCustomMenu(menu); 340 } 341 342 public XJMenuItem createMenuItem(int tag) { 343 return createMenuItem(tag, false); 344 } 345 346 public XJMenuItem createMenuItem(int tag, boolean contextual) { 347 XJMenuItem item = null; 348 switch(tag) { 349 case MI_FIND_TOKEN: 350 item = new XJMenuItem(resourceBundle.getString("menu.item.findTextAtCaret"), KeyEvent.VK_F3, MI_FIND_TOKEN, this); 351 break; 352 case MI_FIND_USAGE: 353 item = new XJMenuItem(resourceBundle.getString("menu.item.findUsages"), KeyEvent.VK_F7, Event.ALT_MASK, MI_FIND_USAGE, this); 354 break; 355 356 case MI_SHOW_DECISION_DFA: 357 item = new XJMenuItem(resourceBundle.getString("menu.item.showDecisionDFA"), MI_SHOW_DECISION_DFA, this); 358 break; 359 360 case MI_SHOW_DEPENDENCY: 361 item = new XJMenuItem(resourceBundle.getString("menu.item.showRuleDependencyGraph"), MI_SHOW_DEPENDENCY, this); 362 break; 363 364 case MI_GOTO_RULE: 365 item = new XJMenuItem(contextual? resourceBundle.getString("contextual.item.gotoRule") : resourceBundle.getString("menu.item.gotoRule"), KeyEvent.VK_B, XJMenuItem.getKeyModifier() | Event.SHIFT_MASK, MI_GOTO_RULE, this); 366 break; 367 368 case MI_GOTO_DECLARATION: 369 item = new XJMenuItem(contextual? resourceBundle.getString("contextual.item.goToDeclaration") : resourceBundle.getString("menu.item.gotoDeclaration"), KeyEvent.VK_B, MI_GOTO_DECLARATION, this); 370 break; 371 372 case MI_RENAME: 373 item = new XJMenuItem(resourceBundle.getString("menu.item.rename"), KeyEvent.VK_F6, Event.SHIFT_MASK, MI_RENAME, this); 374 break; 375 376 case MI_REPLACE_LITERAL_WITH_TOKEN_LABEL: 377 item = new XJMenuItem(resourceBundle.getString("menu.item.replaceLiteralsWithTokenLabel"), MI_REPLACE_LITERAL_WITH_TOKEN_LABEL, this); 378 break; 379 380 case MI_EXTRACT_RULE: 381 item = new XJMenuItem(resourceBundle.getString("menu.item.extractRule"), MI_EXTRACT_RULE, this); 382 break; 383 384 case MI_INLINE_RULE: 385 item = new XJMenuItem(resourceBundle.getString("menu.item.inlineRule"), MI_INLINE_RULE, this); 386 break; 387 388 case MI_SHOW_RULE_GENCODE: 389 item = new XJMenuItem(resourceBundle.getString("menu.item.showRuleCode"), MI_SHOW_RULE_GENCODE, this); 390 break; 391 392 case MI_GROUP_RULE: 393 item = new XJMenuItem(resourceBundle.getString("menu.item.group"), MI_GROUP_RULE, this); 394 break; 395 396 case MI_UNGROUP_RULE: 397 item = new XJMenuItem(resourceBundle.getString("menu.item.ungroup"), MI_UNGROUP_RULE, this); 398 break; 399 400 case MI_IGNORE_RULE: 401 item = new XJMenuItemCheck(resourceBundle.getString("menu.item.ignoreInInterpreter"), MI_IGNORE_RULE, this, true); 402 break; 403 404 case MI_EXPORT_AS_IMAGE: 405 item = new XJMenuItem(contextual? resourceBundle.getString("contextual.item.exportAsBitmapImage") : resourceBundle.getString("menu.item.exportAsBitmap"), MI_EXPORT_AS_IMAGE, this); 406 break; 407 408 case MI_EXPORT_AS_EPS: 409 item = new XJMenuItem(contextual? resourceBundle.getString("contextual.item.exportAsEPS") : resourceBundle.getString("menu.item.exportAsEPS"), MI_EXPORT_AS_EPS, this); 410 break; 411 412 case MI_EXPORT_AS_DOT: 413 item = new XJMenuItem(contextual? resourceBundle.getString("contextual.item.exportAsDot") : resourceBundle.getString("menu.item.exportAsDot"), MI_EXPORT_AS_DOT, this); 414 break; 415 } 416 return item; 417 } 418 419 public JPopupMenu getContextualMenu(int textIndex) { 420 boolean overReference = editor.getCurrentReference() != null; 421 boolean overToken = editor.getCurrentToken() != null; 422 boolean overRule = editor.getCurrentRule() != null; 423 boolean overSelection = editor.getTextPane().getSelectionStart() != editor.getTextPane().getSelectionEnd(); 424 boolean overDecisionDFA = editor.decisionDFAEngine.isDecisionPointAroundLocation(editor.getTextEditor().getLineIndexAtTextPosition(textIndex), 425 editor.getTextEditor().getColumnPositionAtIndex(textIndex)); 426 427 ContextualMenuFactory factory = new ContextualMenuFactory(this); 428 factory.addItem(MI_GOTO_RULE); 429 if(overReference) 430 factory.addItem(MI_GOTO_DECLARATION); 431 432 factory.addSeparator(); 433 if(overToken) 434 factory.addItem(MI_RENAME); 435 if(editor.menuRefactor.canReplaceLiteralWithTokenLabel()) 436 factory.addItem(MI_REPLACE_LITERAL_WITH_TOKEN_LABEL); 437 if(editor.menuRefactor.canExtractRule()) 438 factory.addItem(MI_EXTRACT_RULE); 439 if(editor.menuRefactor.canInlineRule()) 440 factory.addItem(MI_INLINE_RULE); 441 442 if(overToken) { 443 factory.addSeparator(); 444 if(overSelection) 445 factory.addItem(MI_FIND_TOKEN); 446 factory.addItem(MI_FIND_USAGE); 447 } 448 449 if(overRule) { 450 factory.addSeparator(); 451 if(overDecisionDFA) 452 factory.addItem(MI_SHOW_DECISION_DFA); 453 factory.addItem(MI_SHOW_DEPENDENCY); 454 factory.addItem(MI_SHOW_RULE_GENCODE); 455 } 456 457 return factory.menu; 458 } 459 460 public void menuItemState(final XJMenuItem item) { 461 EditorTab tab = editor.getSelectedTab(); 462 463 switch(item.getTag()) { 464 case XJMainMenuBar.MI_UNDO: 465 case XJMainMenuBar.MI_REDO: 466 if(isDebuggerRunning()) { 467 SwingUtilities.invokeLater(new Runnable () { 470 public void run() { 471 item.setEnabled(false); 472 } 473 }); 474 } 475 break; 476 477 case XJMainMenuBar.MI_CUT: 478 case XJMainMenuBar.MI_PASTE: 479 480 case MI_RENAME: 481 case MI_REPLACE_LITERAL_WITH_TOKEN_LABEL: 482 case MI_LITERAL_TO_SINGLEQUOTE: 483 case MI_LITERAL_TO_DOUBLEQUOTE: 484 case MI_LITERAL_TO_CSTYLEQUOTE: 485 case MI_REMOVE_LEFT_RECURSION: 486 case MI_REMOVE_ALL_LEFT_RECURSION: 487 case MI_EXTRACT_RULE: 488 case MI_INLINE_RULE: 489 case MI_INSERT_TEMPLATE: 490 case MI_GROUP_RULE: 491 case MI_UNGROUP_RULE: 492 case MI_EXPAND_COLLAPSE_RULE: 493 case MI_EXPAND_COLLAPSE_ACTION: 494 case MI_CHECK_GRAMMAR: 495 case MI_FIND: 496 case MI_RUN_INTERPRETER: 497 item.setEnabled(!isDebuggerRunning()); 498 break; 499 500 case MI_DEBUG_AGAIN: 501 item.setEnabled(!isDebuggerRunning() && editor.debugger.canDebugAgain()); 502 break; 503 504 case MI_DEBUG: 505 case MI_DEBUG_REMOTE: 506 item.setEnabled(!isDebuggerRunning()); 507 break; 508 509 case MI_GOTO_BACK: 510 item.setEnabled(editor.goToHistory.canGoBack()); 511 break; 512 case MI_GOTO_FORWARD: 513 item.setEnabled(editor.goToHistory.canGoForward()); 514 break; 515 516 case MI_P4_EDIT: 517 case MI_P4_ADD: 518 case MI_P4_DELETE: 519 case MI_P4_REVERT: 520 case MI_P4_SUBMIT: 521 case MI_P4_SYNC: 522 if(isDebuggerRunning()) 523 item.setEnabled(false); 524 else 525 item.setEnabled(AWPrefs.getP4Enabled()); 526 break; 527 528 case MI_EXPORT_AS_IMAGE: 529 item.setEnabled(tab.canExportToBitmap()); 530 break; 531 532 case MI_EXPORT_AS_EPS: 533 item.setEnabled(tab.canExportToEPS()); 534 break; 535 536 case MI_EXPORT_AS_DOT: 537 item.setEnabled(tab.canExportToDOT()); 538 break; 539 540 case MI_DEBUG_SHOW_INPUT_TOKENS: 541 item.setTitle(editor.menuDebugger.isInputTokenVisible()? 542 resourceBundle.getString("menu.item.hideInputTokens") : resourceBundle.getString("menu.item.showInputTokens")); 543 break; 544 545 case MI_HIGHLIGHT_DECISION_DFA: 546 if(editor.decisionDFAEngine.getDecisionDFACount() == 0) { 547 item.setSelected(false); 548 } else { 549 item.setSelected(true); 550 } 551 break; 552 } 553 } 554 555 public void handleMenuSelected(XJMenu menu) { 556 boolean ignored = editor.rules.getFirstSelectedRuleIgnoredFlag(); 557 ignoreRuleMenuItem.setSelected(ignored); 558 } 559 560 public void handleMenuEvent(XJMenu menu, XJMenuItem item) { 561 handleMenuFile(item.getTag()); 562 handleMenuView(item.getTag()); 563 handleMenuFind(item.getTag()); 564 handleMenuGrammar(item); 565 handleMenuRefactor(item.getTag()); 566 handleMenuGoTo(item.getTag()); 567 handleMenuGenerate(item.getTag()); 568 handleMenuRun(item.getTag()); 569 handleMenuSCM(item.getTag()); 570 handleMenuPrivate(item.getTag()); 571 handleMenuExport(item.getTag()); 572 } 573 574 public void handleMenuFile(int itemTag) { 575 switch(itemTag) { 576 case MI_PRINT: 577 editor.print(); 578 break; 579 } 580 } 581 582 public void handleMenuView(int itemTag) { 583 switch(itemTag) { 584 case MI_EXPAND_COLLAPSE_RULE: 585 editor.menuFolding.expandCollapseRule(); 586 break; 587 588 case MI_EXPAND_COLLAPSE_ACTION: 589 editor.menuFolding.expandCollapseAction(); 590 break; 591 } 592 } 593 594 public void handleMenuFind(int itemTag) { 595 switch(itemTag) { 596 case MI_FIND: 597 editor.menuFind.find(); 598 break; 599 600 case MI_FIND_NEXT: 601 editor.menuFind.findNext(); 602 break; 603 604 case MI_FIND_PREV: 605 editor.menuFind.findPrev(); 606 break; 607 608 case MI_FIND_TOKEN: 609 editor.menuFind.findSelection(); 610 break; 611 612 case MI_FIND_USAGE: 613 editor.menuFind.findUsage(); 614 break; 615 } 616 } 617 618 public void handleMenuGrammar(XJMenuItem item) { 619 switch(item.getTag()) { 620 case MI_SHOW_TOKENS_SD: 621 editor.menuGrammar.showTokensSD(); 622 break; 623 624 case MI_SHOW_TOKENS_DFA: 625 editor.menuGrammar.showTokensDFA(); 626 break; 627 628 case MI_SHOW_DECISION_DFA: 629 editor.menuGrammar.showDecisionDFA(); 630 break; 631 632 case MI_HIGHLIGHT_DECISION_DFA: 633 editor.menuGrammar.highlightDecisionDFA(); 634 break; 635 636 case MI_SHOW_DEPENDENCY: 637 editor.menuGrammar.showDependency(); 638 break; 639 640 case MI_INSERT_TEMPLATE: 641 editor.menuGrammar.insertRuleFromTemplate(); 642 break; 643 644 case MI_GROUP_RULE: 645 editor.menuGrammar.group(); 646 break; 647 648 case MI_UNGROUP_RULE: 649 editor.menuGrammar.ungroup(); 650 break; 651 652 case MI_IGNORE_RULE: 653 if(item.isSelected()) 654 editor.menuGrammar.ignore(); 655 else 656 editor.menuGrammar.consider(); 657 break; 658 659 case MI_CHECK_GRAMMAR: 660 editor.menuGrammar.checkGrammar(); 661 break; 662 } 663 } 664 665 public void handleMenuRefactor(int itemTag) { 666 switch(itemTag) { 667 case MI_RENAME: 668 editor.menuRefactor.rename(); 669 break; 670 671 case MI_REPLACE_LITERAL_WITH_TOKEN_LABEL: 672 editor.menuRefactor.replaceLiteralWithTokenLabel(); 673 break; 674 675 case MI_LITERAL_TO_SINGLEQUOTE: 676 editor.menuRefactor.convertLiteralsToSingleQuote(); 677 break; 678 679 case MI_LITERAL_TO_DOUBLEQUOTE: 680 editor.menuRefactor.convertLiteralsToDoubleQuote(); 681 break; 682 683 case MI_LITERAL_TO_CSTYLEQUOTE: 684 editor.menuRefactor.convertLiteralsToCStyleQuote(); 685 break; 686 687 case MI_REMOVE_LEFT_RECURSION: 688 editor.menuRefactor.removeLeftRecursion(); 689 break; 690 691 case MI_REMOVE_ALL_LEFT_RECURSION: 692 editor.menuRefactor.removeAllLeftRecursion(); 693 break; 694 695 case MI_EXTRACT_RULE: 696 editor.menuRefactor.extractRule(); 697 break; 698 699 case MI_INLINE_RULE: 700 editor.menuRefactor.inlineRule(); 701 break; 702 } 703 } 704 705 public void handleMenuGoTo(int itemTag) { 706 switch(itemTag) { 707 case MI_GOTO_RULE: 708 editor.menuGoTo.goToRule(); 709 break; 710 711 case MI_GOTO_DECLARATION: 712 editor.menuGoTo.goToDeclaration(); 713 break; 714 715 case MI_GOTO_LINE: 716 editor.menuGoTo.goToLine(); 717 break; 718 719 case MI_GOTO_CHARACTER: 720 editor.menuGoTo.goToCharacter(); 721 break; 722 723 case MI_GOTO_BACK: 724 editor.menuGoTo.goToBackward(); 725 break; 726 727 case MI_GOTO_FORWARD: 728 editor.menuGoTo.goToForward(); 729 break; 730 731 case MI_PREV_BREAKPOINT: 732 editor.menuGoTo.goToBreakpoint(-1); 733 break; 734 735 case MI_NEXT_BREAKPOINT: 736 editor.menuGoTo.goToBreakpoint(1); 737 break; 738 } 739 } 740 741 public void handleMenuGenerate(int itemTag) { 742 switch(itemTag) { 743 case MI_GENERATE_CODE: 744 editor.menuGenerate.generateCode(); 745 break; 746 747 case MI_SHOW_GENERATED_LEXER_CODE: 748 editor.menuGenerate.showGeneratedCode(ElementGrammarName.LEXER); 749 break; 750 751 case MI_SHOW_GENERATED_PARSER_CODE: 752 editor.menuGenerate.showGeneratedCode(ElementGrammarName.PARSER); 753 break; 754 755 case MI_SHOW_RULE_GENCODE: 756 editor.menuGenerate.showRuleGeneratedCode(); 757 break; 758 } 759 } 760 761 public void handleMenuRun(int itemTag) { 762 switch(itemTag) { 763 case MI_RUN_INTERPRETER: 764 editor.menuDebugger.runInterpreter(); 765 break; 766 767 case MI_DEBUG: 768 editor.menuDebugger.debug(); 769 break; 770 771 case MI_DEBUG_AGAIN: 772 editor.menuDebugger.debugAgain(); 773 break; 774 775 case MI_DEBUG_REMOTE: 776 editor.menuDebugger.debugRemote(); 777 break; 778 779 case MI_DEBUG_SHOW_INPUT_TOKENS: 780 editor.menuDebugger.toggleInputTokens(); 781 editor.refreshMainMenuBar(); 782 break; 783 } 784 } 785 786 public void handleMenuSCM(int itemTag) { 787 switch(itemTag) { 788 case MI_P4_EDIT: 789 editor.menuSCM.editFile(); 790 break; 791 case MI_P4_ADD: 792 editor.menuSCM.addFile(); 793 break; 794 case MI_P4_DELETE: 795 editor.menuSCM.deleteFile(); 796 break; 797 case MI_P4_REVERT: 798 editor.menuSCM.revertFile(); 799 break; 800 case MI_P4_SUBMIT: 801 editor.menuSCM.submitFile(); 802 break; 803 case MI_P4_SYNC: 804 editor.menuSCM.sync(); 805 break; 806 } 807 } 808 809 public void handleMenuPrivate(int itemTag) { 810 switch(itemTag) { 811 case MI_PRIVATE_UNREGISTER: 812 AWPrefs.removeUserRegistration(); 813 break; 814 } 815 } 816 817 public void handleMenuExport(int itemTag) { 818 switch(itemTag) { 819 case MI_EXPORT_AS_IMAGE: 820 editor.menuExport.exportAsImage(); 821 break; 822 823 case MI_EXPORT_AS_EPS: 824 editor.menuExport.exportAsEPS(); 825 break; 826 827 case MI_EXPORT_AS_DOT: 828 editor.menuExport.exportAsDOT(); 829 break; 830 831 case MI_EXPORT_ALL_AS_IMAGE: 832 editor.menuExport.exportAllRulesAsImage(); 833 break; 834 835 case MI_EXPORT_ALL_AS_EPS: 836 editor.menuExport.exportAllRulesAsEPS(); 837 break; 838 839 case MI_EXPORT_EVENT: 840 editor.menuExport.exportEventsAsTextFile(); 841 break; 842 } 843 } 844 845 } 846 | Popular Tags |