KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > antlr > works > debugger > panels > DBStackPanel


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

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 JavaDoc<String JavaDoc> rules = new Stack JavaDoc<String JavaDoc>();
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 JavaDoc 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 JavaDoc() {
84             public void run() {
85                 selectLastInfoTableItem();
86             }
87         });
88     }
89
90     public void pushRule(String JavaDoc 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 JavaDoc {
101
102         protected java.util.List JavaDoc<Object JavaDoc> rules = new ArrayList JavaDoc<Object JavaDoc>();
103
104         public void add(Object JavaDoc rule) {
105             rules.add(rule);
106         }
107
108         public void remove(Object JavaDoc 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 JavaDoc 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 JavaDoc 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