1 package org.antlr.works.debugger.panels; 2 3 import org.antlr.xjlib.appkit.swing.XJTable; 4 import org.antlr.xjlib.appkit.swing.XJTableView; 5 import org.antlr.works.debugger.Debugger; 6 import org.antlr.works.swing.DetachablePanel; 7 8 import javax.swing.*; 9 import javax.swing.table.AbstractTableModel ; 10 import java.awt.*; 11 import java.util.ArrayList ; 12 import java.util.Stack ; 13 43 44 public class DBStackPanel extends DetachablePanel { 45 46 public static final int INFO_COLUMN_COUNT = 0; 47 public static final int INFO_COLUMN_RULE = 1; 48 49 private XJTableView infoTableView; 50 private DBStackPanel.RuleTableDataModel ruleTableDataModel; 51 private Stack <String > rules = new Stack <String >(); 52 53 public DBStackPanel(Debugger debugger) { 54 super("Stack", debugger); 55 56 ruleTableDataModel = new DBStackPanel.RuleTableDataModel(); 57 58 infoTableView = new XJTableView(); 59 setInfoTableModel(infoTableView.getTable(), ruleTableDataModel); 60 61 mainPanel.add(infoTableView, BorderLayout.CENTER); 62 63 infoTableView.autoresizeColumns(); 64 } 65 66 public void setInfoTableModel(XJTable table, AbstractTableModel model) { 67 table.setModel(model); 68 selectLastInfoTableItem(); 69 } 70 71 public void selectLastInfoTableItem() { 72 infoTableView.scrollToLastRow(); 73 } 74 75 public void clear() { 76 rules.clear(); 77 ruleTableDataModel.clear(); 78 } 79 80 public void updateOnBreakEvent() { 81 ruleTableDataModel.update(); 82 83 SwingUtilities.invokeLater(new Runnable () { 84 public void run() { 85 selectLastInfoTableItem(); 86 } 87 }); 88 } 89 90 public void pushRule(String ruleName) { 91 rules.push(ruleName); 92 ruleTableDataModel.add(ruleName); 93 } 94 95 public void popRule() { 96 ruleTableDataModel.remove(rules.peek()); 97 rules.pop(); 98 } 99 100 public class RuleTableDataModel extends AbstractTableModel { 101 102 protected java.util.List <Object > rules = new ArrayList <Object >(); 103 104 public void add(Object rule) { 105 rules.add(rule); 106 } 107 108 public void remove(Object rule) { 109 rules.remove(rule); 110 } 111 112 public void clear() { 113 rules.clear(); 114 fireTableDataChanged(); 115 infoTableView.autoresizeColumns(); 116 } 117 118 public void update() { 119 fireTableDataChanged(); 120 infoTableView.autoresizeColumns(); 121 } 122 123 public int getRowCount() { 124 return rules.size(); 125 } 126 127 public int getColumnCount() { 128 return 2; 129 } 130 131 public String getColumnName(int column) { 132 switch(column) { 133 case DBStackPanel.INFO_COLUMN_COUNT: return "#"; 134 case DBStackPanel.INFO_COLUMN_RULE: return "Rule"; 135 } 136 return super.getColumnName(column); 137 } 138 139 public Object getValueAt(int rowIndex, int columnIndex) { 140 switch(columnIndex) { 141 case DBStackPanel.INFO_COLUMN_COUNT: return String.valueOf(rowIndex); 142 case DBStackPanel.INFO_COLUMN_RULE: return rules.get(rowIndex); 143 } 144 return null; 145 } 146 } 147 148 } 149 | Popular Tags |