001: package proofVisualization.views;
002:
003: import java.util.ArrayList;
004:
005: import org.eclipse.jface.viewers.ArrayContentProvider;
006: import org.eclipse.jface.viewers.ILabelProvider;
007: import org.eclipse.jface.viewers.IStructuredContentProvider;
008: import org.eclipse.jface.viewers.ITableLabelProvider;
009: import org.eclipse.jface.viewers.LabelProvider;
010: import org.eclipse.jface.viewers.TableViewer;
011: import org.eclipse.swt.SWT;
012: import org.eclipse.swt.graphics.Image;
013: import org.eclipse.swt.layout.GridData;
014: import org.eclipse.swt.widgets.Button;
015: import org.eclipse.swt.widgets.Composite;
016: import org.eclipse.swt.widgets.Control;
017: import org.eclipse.swt.widgets.Event;
018: import org.eclipse.swt.widgets.Listener;
019: import org.eclipse.swt.widgets.Shell;
020: import org.eclipse.swt.widgets.Table;
021: import org.eclipse.swt.widgets.TableColumn;
022: import org.eclipse.swt.widgets.Widget;
023: import org.eclipse.ui.dialogs.SelectionDialog;
024:
025: import de.uka.ilkd.key.visualization.ExecutionTraceModel;
026: import de.uka.ilkd.key.visualization.VisualizationModel;
027:
028: public class ModelSelectionDialog extends SelectionDialog implements
029: Listener {
030:
031: private IStructuredContentProvider fContentProvider;
032: private ILabelProvider fLabelProvider;
033: private Object fInput;
034: private TableViewer fTableViewer;
035: private Button checkbox;
036: private ExecutionTraceModel[] traces;
037: private ExecutionTraceModel[] filteredTraces;
038:
039: public ModelSelectionDialog(Shell parent,
040: VisualizationModel visModel) {
041: super (parent);
042: traces = visModel.getExecutionTraces();
043: filteredTraces = visModel.getInterestingExecutionTraces();
044: fInput = traces;
045: fContentProvider = new ArrayContentProvider();
046: fLabelProvider = new ExecutionTraceLabelProvider();
047: }
048:
049: public void create() {
050: setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE);
051: super .create();
052: }
053:
054: protected Control createDialogArea(Composite container) {
055: Composite parent = (Composite) super
056: .createDialogArea(container);
057: createMessageArea(parent);
058: fTableViewer = new TableViewer(parent, getTableStyle());
059:
060: Table table = fTableViewer.getTable();
061: table.setHeaderVisible(true);
062: table.setLinesVisible(true);
063: table.setFont(parent.getFont());
064:
065: TableColumn column;
066: column = new TableColumn(table, SWT.NONE, 0);
067: column.setWidth(250);
068: column.setText("Java Program");
069:
070: column = new TableColumn(table, SWT.NONE, 1);
071: column.setWidth(75);
072: column.setText("First Node");
073: column = new TableColumn(table, SWT.NONE, 2);
074: column.setWidth(75);
075: column.setText("Last Node");
076: GridData gd = new GridData(GridData.FILL_BOTH);
077: fTableViewer.setContentProvider(fContentProvider);
078: fTableViewer.setLabelProvider(fLabelProvider);
079: fTableViewer.setInput(fInput);
080: checkbox = new Button(parent, SWT.CHECK);
081: checkbox.setText("Filter uninteresting traces");
082: checkbox.addListener(SWT.Selection, this );
083: gd.heightHint = convertHeightInCharsToPixels(15);
084: gd.widthHint = convertWidthInCharsToPixels(100);
085: table.setLayoutData(gd);
086: applyDialogFont(parent);
087: return parent;
088: }
089:
090: protected void okPressed() {
091: // Get the input children.
092: Object[] children = fContentProvider.getElements(fInput);
093:
094: // Build a one element list of the selected element.
095: int selIndex = fTableViewer.getTable().getSelectionIndex();
096: if (children != null) {
097: ArrayList list = new ArrayList();
098: list.add(children[selIndex]);
099: setResult(list);
100: }
101: super .okPressed();
102: }
103:
104: public void handleEvent(Event e) {
105: Widget source = e.widget;
106: if (source == checkbox) {
107: if (!checkbox.getSelection()) {
108: fInput = traces;
109: } else {
110: fInput = filteredTraces;
111: }
112: fTableViewer.setInput(fInput);
113: fTableViewer.refresh();
114: }
115:
116: }
117:
118: protected int getTableStyle() {
119: return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER;
120: }
121:
122: class ExecutionTraceLabelProvider extends LabelProvider implements
123: ITableLabelProvider {
124: public String getText(Object obj) {
125: return "unknown label";
126: }
127:
128: public Image getImage(Object obj) {
129: return null;
130: }
131:
132: public Image getColumnImage(Object obj, int index) {
133: return null;
134: }
135:
136: public String getColumnText(Object obj, int index) {
137: ExecutionTraceModel model = ((ExecutionTraceModel) obj);
138: if (index == 0) {
139: return model.getFirstTraceElement().getProgram()
140: .toString().replaceAll("\n", " ");
141: } else if (index == 1) {
142: return "" + model.getFirstNode().serialNr();
143: } else if (index == 2) {
144: return "" + model.getLastNode().serialNr();
145: }
146: return "UNKNOWN TABLE INDEX";
147:
148: }
149:
150: }
151: }
|