source: trunk/quest-ui-swt/src/main/java/de/ugoe/cs/quest/ui/swt/SequencesDialog.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: 5.7 KB
Line 
1package de.ugoe.cs.quest.ui.swt;
2
3import java.util.Collection;
4import java.util.SortedSet;
5import java.util.TreeSet;
6
7import org.eclipse.swt.widgets.Dialog;
8import org.eclipse.swt.widgets.Display;
9import org.eclipse.swt.widgets.MessageBox;
10import org.eclipse.swt.widgets.Shell;
11import org.eclipse.swt.layout.GridLayout;
12import org.eclipse.swt.widgets.List;
13import org.eclipse.swt.SWT;
14import org.eclipse.swt.widgets.Button;
15import org.eclipse.swt.layout.GridData;
16
17import de.ugoe.cs.quest.SequenceInstanceOf;
18import de.ugoe.cs.quest.eventcore.Event;
19import de.ugoe.cs.quest.ui.GlobalDataContainer;
20
21import org.eclipse.swt.events.SelectionAdapter;
22import org.eclipse.swt.events.SelectionEvent;
23
24public class SequencesDialog extends Dialog {
25
26    private String sequencesName;
27
28    private List sequenceList;
29    private Collection<java.util.List<Event>> sequences;
30    private SortedSet<String> targets;
31
32    protected Shell shell;
33
34    /**
35     * Create the dialog.
36     *
37     * @param parent
38     * @param style
39     */
40    public SequencesDialog(Shell parent, int style) {
41        super(parent, style);
42        setText("SWT Dialog");
43    }
44
45    /**
46     * Open the dialog.
47     */
48    public void open(String sequencesName) {
49        this.sequencesName = sequencesName;
50        sequences = null;
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(248, 299);
68        shell.setText(getText());
69        shell.setLayout(new GridLayout(2, false));
70
71        sequenceList = new List(shell, SWT.BORDER | SWT.V_SCROLL);
72        sequenceList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
73        updateSequenceList();
74
75        Button btnShow = new Button(shell, SWT.NONE);
76        btnShow.addSelectionListener(new SelectionAdapter() {
77            @Override
78            public void widgetSelected(SelectionEvent e) {
79                int index = sequenceList.getSelectionIndex();
80                if (index == -1) {
81                    MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
82                    messageBox.setMessage("No sequence selected!");
83                    messageBox.setText("Error");
84                    messageBox.open();
85                }
86                else {
87                    EditSequenceDialog editSequenceDialog =
88                        new EditSequenceDialog(shell, SWT.NONE, targets);
89                    int counter = 0;
90                    java.util.List<Event> selectedSequence = null;
91                    for (java.util.List<Event> sequence : sequences) {
92                        if (counter == index) {
93                            selectedSequence = sequence;
94                            break;
95                        }
96                        counter++;
97                    }
98                    editSequenceDialog.open(selectedSequence);
99                    updateSequenceList();
100                }
101            }
102        });
103        btnShow.setText("Show");
104
105        Button btnClose = new Button(shell, SWT.NONE);
106        btnClose.addSelectionListener(new SelectionAdapter() {
107            @Override
108            public void widgetSelected(SelectionEvent e) {
109                shell.dispose();
110            }
111        });
112        btnClose.setText("Close");
113
114    }
115
116    @SuppressWarnings("unchecked")
117    private void updateSequenceList() {
118        sequenceList.removeAll();
119        Object dataObject = GlobalDataContainer.getInstance().getData(sequencesName);
120        if (SequenceInstanceOf.isCollectionOfSequences(dataObject)) {
121            sequences = (Collection<java.util.List<Event>>) dataObject;
122            int seqDigits = Integer.toString(sequences.size()).length();
123            int counter = 1;
124            for (java.util.List<Event> sequence : sequences) {
125                String seqName =
126                    "#" + String.format("%0" + seqDigits + "d", counter) + ": " + sequence.size();
127                sequenceList.add(seqName);
128                counter++;
129            }
130            Object targetObject =
131                GlobalDataContainer.getInstance().getData(sequencesName + "_targets");
132            targets = null;
133            if (targetObject instanceof SortedSet) {
134                if (!((SortedSet<?>) targetObject).isEmpty()) {
135                    if (((SortedSet<?>) targetObject).first() instanceof String) {
136                        targets = (SortedSet<String>) targetObject;
137                    }
138                }
139            }
140            if (targets == null) {
141                targets = new TreeSet<String>();
142                for (java.util.List<Event> sequence : sequences) {
143                    for (Event event : sequence) {
144                        // TODO check if toString() is sufficient
145                        String target = event.getTarget().toString();
146                        if (target != null) {
147                            targets.add(target);
148                        }
149                    }
150                }
151            }
152        }
153        else {
154            MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
155            messageBox.setMessage("Internal error. Sequences object not of expected type!");
156            messageBox.setText("Error");
157            messageBox.open();
158        }
159    }
160
161}
Note: See TracBrowser for help on using the repository browser.