1 package org.antlr.works.debugger.tree; 2 3 import org.antlr.xjlib.appkit.gview.GView; 4 import org.antlr.runtime.Token; 5 import org.antlr.works.awtree.AWTreePanel; 6 import org.antlr.works.awtree.AWTreePanelDelegate; 7 import org.antlr.works.debugger.Debugger; 8 import org.antlr.works.swing.DetachablePanel; 9 10 import javax.swing.*; 11 import javax.swing.tree.DefaultTreeModel ; 12 import javax.swing.tree.TreeNode ; 13 import java.awt.*; 14 44 45 public class DBParseTreePanel extends DetachablePanel implements DBParseTreeModelListener, AWTreePanelDelegate { 46 47 protected Debugger debugger; 48 protected DBParseTreeModel model; 49 protected AWTreePanel treePanel; 50 51 public DBParseTreePanel(Debugger debugger) { 52 super("Parse Tree", debugger); 53 54 this.debugger = debugger; 55 56 model = new DBParseTreeModel(debugger); 57 model.addListener(this); 58 59 treePanel = new AWTreePanel(new DefaultTreeModel (null)); 60 treePanel.setDelegate(this); 61 62 mainPanel.add(treePanel, BorderLayout.CENTER); 63 } 64 65 public DBParseTreeModel getModel() { 66 return model; 67 } 68 69 public void clear() { 70 model.clear(); 71 treePanel.clear(); 72 } 73 74 public void updateOnBreakEvent() { 75 model.fireDataChanged(); 76 } 77 78 public void selectToken(Token token) { 79 DBTreeNode root = (DBTreeNode) treePanel.getRoot(); 80 DBTreeNode node = root.findNodeWithToken(token); 81 if(node != null) 82 treePanel.selectNode(node); 83 } 84 85 public void updateParseTree() { 86 treePanel.refresh(); 87 treePanel.scrollNodeToVisible(model.getLastNode()); 88 } 89 90 public GView getGraphView() { 91 return treePanel.getGraphView(); 92 } 93 94 public void modelChanged(DBParseTreeModel model) { 95 treePanel.setRoot(model.getRootRule()); 96 updateParseTree(); 97 } 98 99 public void modelUpdated(DBParseTreeModel model) { 100 updateParseTree(); 101 } 102 103 public void awTreeDidSelectTreeNode(TreeNode node, boolean shiftKey) { 104 DBTreeNode n = (DBTreeNode) node; 105 debugger.selectToken(n.token, n.line, n.pos); 106 } 107 108 public JPopupMenu awTreeGetContextualMenu() { 109 return debugger.treeGetContextualMenu(); 110 } 111 112 } 113 | Popular Tags |