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

Last change on this file since 570 was 570, checked in by sherbold, 12 years ago
  • adapted to quest coding style
  • Property svn:mime-type set to text/plain
File size: 6.9 KB
Line 
1
2package de.ugoe.cs.quest.ui.swt;
3
4import java.util.SortedSet;
5
6import org.eclipse.swt.widgets.Dialog;
7import org.eclipse.swt.widgets.Display;
8import org.eclipse.swt.widgets.Listener;
9import org.eclipse.swt.widgets.MessageBox;
10import org.eclipse.swt.widgets.Shell;
11import org.eclipse.swt.widgets.TableItem;
12import org.eclipse.swt.layout.GridLayout;
13import org.eclipse.swt.SWT;
14import org.eclipse.swt.widgets.Button;
15import org.eclipse.swt.layout.GridData;
16import org.eclipse.swt.widgets.Table;
17import org.eclipse.swt.widgets.TableColumn;
18import org.eclipse.swt.events.SelectionAdapter;
19import org.eclipse.swt.events.SelectionEvent;
20import org.eclipse.swt.graphics.Point;
21
22import de.ugoe.cs.quest.eventcore.Event;
23
24public class EditSequenceDialog extends Dialog {
25
26    protected Shell shell;
27    private Table table;
28    private TableColumn tblclmnEventType;
29    private TableColumn tblclmnEventTarget;
30
31    private java.util.List<Event> sequence;
32    private SortedSet<String> targets;
33
34    /**
35     * Create the dialog.
36     *
37     * @param parent
38     * @param style
39     */
40    public EditSequenceDialog(Shell parent, int style, SortedSet<String> targets) {
41        super(parent, style);
42        setText("SWT Dialog");
43        this.targets = targets;
44    }
45
46    /**
47     * Open the dialog.
48     */
49    public void open(java.util.List<Event> sequence) {
50        this.sequence = sequence;
51        createContents();
52        shell.open();
53        shell.layout();
54        Display display = getParent().getDisplay();
55        while (!shell.isDisposed()) {
56            if (!display.readAndDispatch()) {
57                display.sleep();
58            }
59        }
60    }
61
62    /**
63     * Create contents of the dialog.
64     */
65    private void createContents() {
66        shell = new Shell(getParent(), SWT.SHELL_TRIM | SWT.BORDER | SWT.APPLICATION_MODAL);
67        shell.setSize(450, 300);
68        shell.setText(getText());
69        shell.setLayout(new GridLayout(3, false));
70
71        table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);
72        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
73        table.setHeaderVisible(true);
74        table.setLinesVisible(true);
75
76        tblclmnEventType = new TableColumn(table, SWT.NONE);
77        tblclmnEventType.setWidth(100);
78        tblclmnEventType.setText("Event Type");
79
80        tblclmnEventTarget = new TableColumn(table, SWT.NONE);
81        tblclmnEventTarget.setWidth(100);
82        tblclmnEventTarget.setText("Event Target");
83
84        // this listener makes the table entries multiline
85        Listener paintListener = new Listener() {
86            public void handleEvent(org.eclipse.swt.widgets.Event event) {
87                switch (event.type)
88                {
89                    case SWT.MeasureItem: {
90                        TableItem item = (TableItem) event.item;
91                        String text = item.getText(event.index);
92                        Point size = event.gc.textExtent(text);
93                        event.width = size.x;
94                        event.height = Math.max(event.height, size.y);
95                        break;
96                    }
97                    case SWT.PaintItem: {
98                        TableItem item = (TableItem) event.item;
99                        String text = item.getText(event.index);
100                        Point size = event.gc.textExtent(text);
101                        int offset =
102                            event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
103                        event.gc.drawText(text, event.x, event.y + offset, true);
104                        break;
105                    }
106                    case SWT.EraseItem:
107                        event.detail &= ~SWT.FOREGROUND;
108                        break;
109                    default:
110                        break;
111                }
112            }
113
114        };
115        table.addListener(SWT.MeasureItem, paintListener);
116        table.addListener(SWT.PaintItem, paintListener);
117        table.addListener(SWT.EraseItem, paintListener);
118
119        updateTableContents();
120
121        Button btnInsertBefore = new Button(shell, SWT.NONE);
122        btnInsertBefore.addSelectionListener(new SelectionAdapter() {
123            @Override
124            public void widgetSelected(SelectionEvent e) {
125                int index = table.getSelectionIndex();
126                if (index == -1) {
127                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
128                    messageBox.setMessage("No event selected!");
129                    messageBox.setText("Error");
130                    messageBox.open();
131                }
132                else {
133                    openInsertDialog(index);
134                }
135            }
136        });
137        btnInsertBefore.setText("Insert Before");
138
139        Button btnInsertAfter = new Button(shell, SWT.NONE);
140        btnInsertAfter.addSelectionListener(new SelectionAdapter() {
141            @Override
142            public void widgetSelected(SelectionEvent e) {
143                int index = table.getSelectionIndex();
144                if (index == -1) {
145                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
146                    messageBox.setMessage("No event selected!");
147                    messageBox.setText("Error");
148                    messageBox.open();
149                }
150                else {
151                    openInsertDialog(index + 1);
152                }
153            }
154        });
155        btnInsertAfter.setText("Insert After");
156
157        Button btnClose = new Button(shell, SWT.NONE);
158        btnClose.addSelectionListener(new SelectionAdapter() {
159            @Override
160            public void widgetSelected(SelectionEvent e) {
161                shell.dispose();
162            }
163        });
164        btnClose.setText("Close");
165
166    }
167
168    private void updateTableContents() {
169        table.removeAll();
170        for (Event event : sequence) {
171            TableItem tableItem = new TableItem(table, SWT.NONE);
172            // TODO check if toString is sufficient
173            String target = event.getTarget().toString();
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, targets);
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.