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