source: trunk/quest-ui-swt/src/main/java/de/ugoe/cs/quest/ui/swt/EditSequenceDialog.java @ 659

Last change on this file since 659 was 659, checked in by sherbold, 12 years ago
  • modified adding of assertions to work with GUI models. As a side effect, it is currently impossible to add assertions to sequences whose event targets are not based on a GUI model
  • Property svn:mime-type set to text/plain
File size: 7.0 KB
Line 
1package de.ugoe.cs.quest.ui.swt;
2
3import org.eclipse.swt.widgets.Dialog;
4import org.eclipse.swt.widgets.Display;
5import org.eclipse.swt.widgets.Listener;
6import org.eclipse.swt.widgets.MessageBox;
7import org.eclipse.swt.widgets.Shell;
8import org.eclipse.swt.widgets.TableItem;
9import org.eclipse.swt.layout.GridLayout;
10import org.eclipse.swt.SWT;
11import org.eclipse.swt.widgets.Button;
12import org.eclipse.swt.layout.GridData;
13import org.eclipse.swt.widgets.Table;
14import org.eclipse.swt.widgets.TableColumn;
15import org.eclipse.swt.events.SelectionAdapter;
16import org.eclipse.swt.events.SelectionEvent;
17import org.eclipse.swt.graphics.Point;
18
19import de.ugoe.cs.quest.eventcore.Event;
20import de.ugoe.cs.quest.eventcore.guimodel.GUIModel;
21
22public class EditSequenceDialog extends Dialog {
23
24    protected Shell shell;
25    private Table table;
26    private TableColumn tblclmnEventType;
27    private TableColumn tblclmnEventTarget;
28
29    private java.util.List<Event> sequence;
30    private GUIModel guiModel;
31
32    /**
33     * Create the dialog.
34     *
35     * @param parent
36     * @param style
37     */
38    public EditSequenceDialog(Shell parent, int style, GUIModel guiModel) {
39        super(parent, style);
40        setText("SWT Dialog");
41        this.guiModel = guiModel;
42    }
43
44    /**
45     * Open the dialog.
46     */
47    public void open(java.util.List<Event> sequence) {
48        this.sequence = sequence;
49        createContents();
50        shell.open();
51        shell.layout();
52        Display display = getParent().getDisplay();
53        while (!shell.isDisposed()) {
54            if (!display.readAndDispatch()) {
55                display.sleep();
56            }
57        }
58    }
59
60    /**
61     * Create contents of the dialog.
62     */
63    private void createContents() {
64        shell = new Shell(getParent(), SWT.SHELL_TRIM | SWT.BORDER | SWT.APPLICATION_MODAL);
65        shell.setSize(450, 300);
66        shell.setText(getText());
67        shell.setLayout(new GridLayout(3, false));
68
69        table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
70        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
71        table.setHeaderVisible(true);
72        table.setLinesVisible(true);
73
74        tblclmnEventType = new TableColumn(table, SWT.NONE);
75        tblclmnEventType.setWidth(100);
76        tblclmnEventType.setText("Event Type");
77
78        tblclmnEventTarget = new TableColumn(table, SWT.NONE);
79        tblclmnEventTarget.setWidth(100);
80        tblclmnEventTarget.setText("Event Target");
81
82        // this listener makes the table entries multiline
83        Listener paintListener = new Listener() {
84            public void handleEvent(org.eclipse.swt.widgets.Event event) {
85                switch (event.type)
86                {
87                    case SWT.MeasureItem: {
88                        TableItem item = (TableItem) event.item;
89                        String text = item.getText(event.index);
90                        Point size = event.gc.textExtent(text);
91                        event.width = size.x;
92                        event.height = Math.max(event.height, size.y);
93                        break;
94                    }
95                    case SWT.PaintItem: {
96                        TableItem item = (TableItem) event.item;
97                        String text = item.getText(event.index);
98                        Point size = event.gc.textExtent(text);
99                        int offset =
100                            event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
101                        event.gc.drawText(text, event.x, event.y + offset, true);
102                        break;
103                    }
104                    case SWT.EraseItem:
105                        event.detail &= ~SWT.FOREGROUND;
106                        break;
107                    default:
108                        break;
109                }
110            }
111
112        };
113        table.addListener(SWT.MeasureItem, paintListener);
114        table.addListener(SWT.PaintItem, paintListener);
115        table.addListener(SWT.EraseItem, paintListener);
116
117        updateTableContents();
118
119        Button btnInsertBefore = new Button(shell, SWT.NONE);
120        btnInsertBefore.addSelectionListener(new SelectionAdapter() {
121            @Override
122            public void widgetSelected(SelectionEvent e) {
123                int index = table.getSelectionIndex();
124                if (index == -1) {
125                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
126                    messageBox.setMessage("No event selected!");
127                    messageBox.setText("Error");
128                    messageBox.open();
129                }
130                else {
131                    openInsertDialog(index);
132                }
133            }
134        });
135        btnInsertBefore.setText("Insert Before");
136
137        Button btnInsertAfter = new Button(shell, SWT.NONE);
138        btnInsertAfter.addSelectionListener(new SelectionAdapter() {
139            @Override
140            public void widgetSelected(SelectionEvent e) {
141                int index = table.getSelectionIndex();
142                if (index == -1) {
143                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
144                    messageBox.setMessage("No event selected!");
145                    messageBox.setText("Error");
146                    messageBox.open();
147                }
148                else {
149                    openInsertDialog(index + 1);
150                }
151            }
152        });
153        btnInsertAfter.setText("Insert After");
154
155        Button btnClose = new Button(shell, SWT.NONE);
156        btnClose.addSelectionListener(new SelectionAdapter() {
157            @Override
158            public void widgetSelected(SelectionEvent e) {
159                shell.dispose();
160            }
161        });
162        btnClose.setText("Close");
163
164    }
165
166    private void updateTableContents() {
167        table.removeAll();
168        for (Event event : sequence) {
169            TableItem tableItem = new TableItem(table, SWT.NONE);
170            String target = null;
171            if( event.getTarget()!=null ) {
172                target = event.getTarget().toString();
173            }
174            if (target != null) {
175                // the target is split into multiple lines, as one line may
176                // only be 259 characters in tables with Windows
177                target = target.replace("].", "].\n");
178            }
179            tableItem.setText(new String[]
180                { event.getType().toString(), target });
181        }
182        for (int i = 0; i < table.getColumnCount(); i++) {
183            table.getColumn(i).pack();
184        }
185    }
186
187    private void openInsertDialog(int position) {
188        InsertAssertionDialog insertDialog = new InsertAssertionDialog(shell, SWT.NONE, guiModel);
189        Event event = insertDialog.open();
190        if (event != null) {
191            sequence.add(position, event);
192            updateTableContents();
193        }
194    }
195
196}
Note: See TracBrowser for help on using the repository browser.