KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > antlr > works > editor > EditorMenu


1 /*
2
3 [The "BSD licence"]
4 Copyright (c) 2005 Jean Bovet
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10
11 1. Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
16 3. The name of the author may not be used to endorse or promote products
17 derived from this software without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30 */

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 JavaDoc;
44 import java.util.ResourceBundle JavaDoc;
45
46 public class EditorMenu implements XJMenuItemDelegate {
47
48     public static final int MI_PRINT = 5;
49
50     // Edit
51
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     // View
57
public static final int MI_EXPAND_COLLAPSE_RULE = 20;
58     public static final int MI_EXPAND_COLLAPSE_ACTION = 21;
59
60     // Find
61
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     // Go To
68
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     // Grammar
78
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     // Refactor
90
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     // Generate
101
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     // Debugger
107
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     // SCM
114
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     // Help
122
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     // File Export
127
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     /** The resource bundle used to get localized strings */
142     protected static ResourceBundle JavaDoc 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         /* Currently not supported
313         XJMenu folding = new XJMenu();
314         folding.setTitle(resourceBundle.getString("menu.title.folding"));
315         folding.addItem(new XJMenuItem(resourceBundle.getString("menu.item.toggleRule"), KeyEvent.VK_PERIOD, MI_EXPAND_COLLAPSE_RULE, this));
316         folding.addItem(new XJMenuItem(resourceBundle.getString("menu.item.toggleAction"), KeyEvent.VK_MINUS, MI_EXPAND_COLLAPSE_ACTION, this));
317
318         menu.addSeparator();*/

319
320         menuGrammar.addItem(rules);
321         //menu.addItem(folding);
322
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                     // FIX AW-79
468
// Note: that's weird, but I have to invoke this later otherwise the menu is not disabled
469
SwingUtilities.invokeLater(new Runnable JavaDoc() {
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