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

Last change on this file since 655 was 655, checked in by pharms, 12 years ago
  • removed old copyright file header
  • Property svn:mime-type set to text/plain
File size: 6.9 KB
Line 
1package de.ugoe.cs.quest.ui.swt;
2
3import java.util.SortedSet;
4
5import org.eclipse.swt.widgets.Dialog;
6import org.eclipse.swt.widgets.Display;
7import org.eclipse.swt.widgets.Listener;
8import org.eclipse.swt.widgets.MessageBox;
9import org.eclipse.swt.widgets.Shell;
10import org.eclipse.swt.widgets.TableItem;
11import org.eclipse.swt.layout.GridLayout;
12import org.eclipse.swt.SWT;
13import org.eclipse.swt.widgets.Button;
14import org.eclipse.swt.layout.GridData;
15import org.eclipse.swt.widgets.Table;
16import org.eclipse.swt.widgets.TableColumn;
17import org.eclipse.swt.events.SelectionAdapter;
18import org.eclipse.swt.events.SelectionEvent;
19import org.eclipse.swt.graphics.Point;
20
21import de.ugoe.cs.quest.eventcore.Event;
22
23public class EditSequenceDialog extends Dialog {
24
25    protected Shell shell;
26    private Table table;
27    private TableColumn tblclmnEventType;
28    private TableColumn tblclmnEventTarget;
29
30    private java.util.List<Event> sequence;
31    private SortedSet<String> targets;
32
33    /**
34     * Create the dialog.
35     *
36     * @param parent
37     * @param style
38     */
39    public EditSequenceDialog(Shell parent, int style, SortedSet<String> targets) {
40        super(parent, style);
41        setText("SWT Dialog");
42        this.targets = targets;
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        tblclmnEventType = new TableColumn(table, SWT.NONE);
76        tblclmnEventType.setWidth(100);
77        tblclmnEventType.setText("Event Type");
78
79        tblclmnEventTarget = new TableColumn(table, SWT.NONE);
80        tblclmnEventTarget.setWidth(100);
81        tblclmnEventTarget.setText("Event Target");
82
83        // this listener makes the table entries multiline
84        Listener paintListener = new Listener() {
85            public void handleEvent(org.eclipse.swt.widgets.Event event) {
86                switch (event.type)
87                {
88                    case SWT.MeasureItem: {
89                        TableItem item = (TableItem) event.item;
90                        String text = item.getText(event.index);
91                        Point size = event.gc.textExtent(text);
92                        event.width = size.x;
93                        event.height = Math.max(event.height, size.y);
94                        break;
95                    }
96                    case SWT.PaintItem: {
97                        TableItem item = (TableItem) event.item;
98                        String text = item.getText(event.index);
99                        Point size = event.gc.textExtent(text);
100                        int offset =
101                            event.index == 0 ? Math.max(0, (event.height - size.y) / 2) : 0;
102                        event.gc.drawText(text, event.x, event.y + offset, true);
103                        break;
104                    }
105                    case SWT.EraseItem:
106                        event.detail &= ~SWT.FOREGROUND;
107                        break;
108                    default:
109                        break;
110                }
111            }
112
113        };
114        table.addListener(SWT.MeasureItem, paintListener);
115        table.addListener(SWT.PaintItem, paintListener);
116        table.addListener(SWT.EraseItem, paintListener);
117
118        updateTableContents();
119
120        Button btnInsertBefore = new Button(shell, SWT.NONE);
121        btnInsertBefore.addSelectionListener(new SelectionAdapter() {
122            @Override
123            public void widgetSelected(SelectionEvent e) {
124                int index = table.getSelectionIndex();
125                if (index == -1) {
126                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
127                    messageBox.setMessage("No event selected!");
128                    messageBox.setText("Error");
129                    messageBox.open();
130                }
131                else {
132                    openInsertDialog(index);
133                }
134            }
135        });
136        btnInsertBefore.setText("Insert Before");
137
138        Button btnInsertAfter = new Button(shell, SWT.NONE);
139        btnInsertAfter.addSelectionListener(new SelectionAdapter() {
140            @Override
141            public void widgetSelected(SelectionEvent e) {
142                int index = table.getSelectionIndex();
143                if (index == -1) {
144                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
145                    messageBox.setMessage("No event selected!");
146                    messageBox.setText("Error");
147                    messageBox.open();
148                }
149                else {
150                    openInsertDialog(index + 1);
151                }
152            }
153        });
154        btnInsertAfter.setText("Insert After");
155
156        Button btnClose = new Button(shell, SWT.NONE);
157        btnClose.addSelectionListener(new SelectionAdapter() {
158            @Override
159            public void widgetSelected(SelectionEvent e) {
160                shell.dispose();
161            }
162        });
163        btnClose.setText("Close");
164
165    }
166
167    private void updateTableContents() {
168        table.removeAll();
169        for (Event event : sequence) {
170            TableItem tableItem = new TableItem(table, SWT.NONE);
171            // TODO check if toString is sufficient
172            String target = event.getTarget().toString();
173            if (target != null) {
174                // the target is split into multiple lines, as one line may
175                // only be 259 characters in tables with Windows
176                target = target.replace("].", "].\n");
177            }
178            tableItem.setText(new String[]
179                { event.getType().toString(), target });
180        }
181        for (int i = 0; i < table.getColumnCount(); i++) {
182            table.getColumn(i).pack();
183        }
184    }
185
186    private void openInsertDialog(int position) {
187        InsertAssertionDialog insertDialog = new InsertAssertionDialog(shell, SWT.NONE, targets);
188        Event event = insertDialog.open();
189        if (event != null) {
190            sequence.add(position, event);
191            updateTableContents();
192        }
193    }
194
195}
Note: See TracBrowser for help on using the repository browser.