1 package org.antlr.works.debugger.panels; 2 3 import org.antlr.works.debugger.Debugger; 4 import org.antlr.works.debugger.events.DBEvent; 5 import org.antlr.works.debugger.tivo.DBPlayerContextInfo; 6 import org.antlr.works.swing.DetachablePanel; 7 import org.antlr.xjlib.appkit.swing.XJTable; 8 import org.antlr.xjlib.appkit.swing.XJTableView; 9 10 import javax.swing.*; 11 import javax.swing.table.AbstractTableModel ; 12 import java.awt.*; 13 import java.util.ArrayList ; 14 import java.util.List ; 15 45 46 public class DBEventsPanel extends DetachablePanel { 47 48 public static final int INFO_COLUMN_COUNT = 0; 49 public static final int INFO_COLUMN_EVENT = 1; 50 public static final int INFO_COLUMN_SUBRULE = 2; 51 public static final int INFO_COLUMN_DECISION = 3; 52 public static final int INFO_COLUMN_MARK = 4; 53 public static final int INFO_COLUMN_BACKTRACK = 5; 54 55 protected XJTableView infoTableView; 56 57 protected EventTableDataModel eventTableDataModel; 58 59 public DBEventsPanel(Debugger debugger) { 60 super("Events", debugger); 61 62 eventTableDataModel = new EventTableDataModel(); 63 64 infoTableView = new XJTableView(); 65 infoTableView.setFocusable(true); 66 setInfoTableModel(infoTableView.getTable(), eventTableDataModel); 67 68 mainPanel.add(infoTableView, BorderLayout.CENTER); 69 70 infoTableView.autoresizeColumns(); 71 } 72 73 public void setInfoTableModel(XJTable table, AbstractTableModel model) { 74 table.setModel(model); 75 selectLastInfoTableItem(); 76 } 77 78 public void selectLastInfoTableItem() { 79 infoTableView.scrollToLastRow(); 80 } 81 82 public int getNumberOfEvents() { 83 return eventTableDataModel.getRowCount(); 84 } 85 86 public void clear() { 87 eventTableDataModel.clear(); 88 } 89 90 public void updateOnBreakEvent() { 91 eventTableDataModel.update(); 92 93 SwingUtilities.invokeLater(new Runnable () { 94 public void run() { 95 selectLastInfoTableItem(); 96 } 97 }); 98 } 99 100 public void addEvent(DBEvent event, DBPlayerContextInfo info) { 101 eventTableDataModel.add(event, info); 102 } 103 104 public String getEventsAsString() { 105 StringBuffer sb = new StringBuffer (); 106 sb.append(eventTableDataModel.getHeadersAsString()); 107 sb.append("\n"); 108 109 List <EventTableDataModel.EventInfo> events = eventTableDataModel.events; 110 for(int i=0; i<events.size(); i++) { 111 sb.append(i); 112 sb.append(":\t"); 113 sb.append(events.get(i).toString()); 114 sb.append("\n"); 115 } 116 return sb.toString(); 117 } 118 119 public class EventTableDataModel extends AbstractTableModel { 120 121 protected List <EventInfo> events = new ArrayList <EventInfo>(); 122 123 public void add(DBEvent event, DBPlayerContextInfo info) { 124 events.add(new EventInfo(event, info)); 125 } 126 127 public void clear() { 128 events.clear(); 129 fireTableDataChanged(); 130 infoTableView.autoresizeColumns(); 131 } 132 133 public void update() { 134 fireTableDataChanged(); 135 infoTableView.autoresizeColumns(); 136 } 137 138 public int getRowCount() { 139 return events.size(); 140 } 141 142 public int getColumnCount() { 143 return 6; 144 } 145 146 public String getColumnName(int column) { 147 switch(column) { 148 case INFO_COLUMN_COUNT: return "#"; 149 case INFO_COLUMN_EVENT: return "Event"; 150 case INFO_COLUMN_SUBRULE: return "Subrule"; 151 case INFO_COLUMN_DECISION: return "Decision"; 152 case INFO_COLUMN_MARK: return "Mark"; 153 case INFO_COLUMN_BACKTRACK: return "Backtrack"; 154 } 155 return super.getColumnName(column); 156 } 157 158 public Class getColumnClass(int columnIndex) { 159 switch(columnIndex) { 160 case INFO_COLUMN_COUNT: return String .class; 161 case INFO_COLUMN_EVENT: return String .class; 162 case INFO_COLUMN_SUBRULE: return String .class; 163 case INFO_COLUMN_DECISION: return String .class; 164 case INFO_COLUMN_MARK: return String .class; 165 case INFO_COLUMN_BACKTRACK: return String .class; 166 } 167 return super.getColumnClass(columnIndex); 168 } 169 170 public Object getValueAt(int rowIndex, int columnIndex) { 171 EventInfo info = events.get(rowIndex); 172 switch(columnIndex) { 173 case INFO_COLUMN_COUNT: return String.valueOf(rowIndex); 174 case INFO_COLUMN_EVENT: return info.event; 175 case INFO_COLUMN_SUBRULE: return info.getSubrule(); 176 case INFO_COLUMN_DECISION: return info.getDecision(); 177 case INFO_COLUMN_MARK: return info.getMark(); 178 case INFO_COLUMN_BACKTRACK: return info.getBacktrack(); 179 } 180 return null; 181 } 182 183 public String getHeadersAsString() { 184 return "#\tEvent\tSubrule\tDecision\tMark\tBacktrack"; 185 } 186 187 public class EventInfo { 188 189 public DBEvent event; 190 public int subrule; 191 public int decision; 192 public int mark; 193 public int backtrack; 194 195 public EventInfo(DBEvent event, DBPlayerContextInfo info) { 196 this.event = event; 197 this.subrule = info.getSubrule(); 198 this.decision = info.getDecision(); 199 this.mark = info.getMark(); 200 this.backtrack = info.getBacktrack(); 201 } 202 203 public Object getSubrule() { 204 return subrule==-1?null:String.valueOf(subrule); 205 } 206 207 public Object getDecision() { 208 return decision==-1?null:String.valueOf(decision); 209 } 210 211 public Object getMark() { 212 return mark==-1?null:String.valueOf(mark); 213 } 214 215 public Object getBacktrack() { 216 return backtrack==-1?null:String.valueOf(backtrack); 217 } 218 219 public String getTextForExport(int value) { 220 if(value == -1) 221 return "-"; 222 else 223 return String.valueOf(value); 224 } 225 226 public String toString() { 227 StringBuffer sb = new StringBuffer (); 228 sb.append(event.toString()); 229 sb.append("\t"); 230 sb.append(getTextForExport(subrule)); 231 sb.append("\t"); 232 sb.append(getTextForExport(decision)); 233 sb.append("\t"); 234 sb.append(getTextForExport(mark)); 235 sb.append("\t"); 236 sb.append(getTextForExport(backtrack)); 237 return sb.toString(); 238 } 239 } 240 } 241 242 } 243 | Popular Tags |