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

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