source: trunk/quest-ui-core/src/de/ugoe/cs/quest/ui/swt/SequencesDialog.java @ 434

Last change on this file since 434 was 434, checked in by sherbold, 12 years ago
  • renamed packages to fit QUEST project structure
  • Property svn:mime-type set to text/plain
File size: 4.5 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         * @param parent
37         * @param style
38         */
39        public SequencesDialog(Shell parent, int style) {
40                super(parent, style);
41                setText("SWT Dialog");
42        }
43
44        /**
45         * Open the dialog.
46         */
47        public void open(String sequencesName) {
48                this.sequencesName = sequencesName;
49                sequences = null;
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(248, 299);
67                shell.setText(getText());
68                shell.setLayout(new GridLayout(2, false));
69               
70                sequenceList = new List(shell, SWT.BORDER | SWT.V_SCROLL);
71                sequenceList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
72                updateSequenceList();
73               
74                Button btnShow = new Button(shell, SWT.NONE);
75                btnShow.addSelectionListener(new SelectionAdapter() {
76                        @Override
77                        public void widgetSelected(SelectionEvent e) {
78                                int index = sequenceList.getSelectionIndex();
79                                if( index==-1 ) {
80                                        MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
81                                        messageBox.setMessage("No sequence selected!");
82                                        messageBox.setText("Error");
83                                        messageBox.open();
84                                } else {
85                                        EditSequenceDialog editSequenceDialog = new EditSequenceDialog(shell, SWT.NONE, targets);
86                                        int counter = 0;
87                                        java.util.List<Event<?>> selectedSequence = null;
88                                        for( java.util.List<Event<?>> sequence : sequences ) {
89                                                if( counter==index ) {
90                                                        selectedSequence = sequence;
91                                                        break;
92                                                }
93                                                counter++;
94                                        }
95                                        editSequenceDialog.open(selectedSequence);
96                                        updateSequenceList();
97                                }
98                        }
99                });
100                btnShow.setText("Show");
101               
102                Button btnClose = new Button(shell, SWT.NONE);
103                btnClose.addSelectionListener(new SelectionAdapter() {
104                        @Override
105                        public void widgetSelected(SelectionEvent e) {
106                                shell.dispose();
107                        }
108                });
109                btnClose.setText("Close");
110
111        }
112       
113        @SuppressWarnings("unchecked")
114        private void updateSequenceList() {
115                sequenceList.removeAll();
116                Object dataObject = GlobalDataContainer.getInstance().getData(sequencesName);
117                if( SequenceInstanceOf.isCollectionOfSequences(dataObject)) {
118                        sequences = (Collection<java.util.List<Event<?>>>) dataObject;
119                        int seqDigits = Integer.toString(sequences.size()).length();
120                        int counter = 1;
121                        for( java.util.List<Event<?>> sequence : sequences ) {
122                                String seqName = "#"+String.format("%0"+seqDigits+"d", counter)+": "+sequence.size();
123                                sequenceList.add(seqName);
124                                counter++;
125                        }
126                        Object targetObject = GlobalDataContainer.getInstance().getData(sequencesName+"_targets");
127                        targets = null;
128                        if( targetObject instanceof SortedSet ) {
129                                if( !((SortedSet<?>) targetObject).isEmpty() ) {
130                                        if( ((SortedSet<?>) targetObject).first() instanceof String ) {
131                                                targets = (SortedSet<String>) targetObject;
132                                        }
133                                }
134                        }
135                        if( targets==null ) {
136                                targets = new TreeSet<String>();
137                                for( java.util.List<Event<?>> sequence : sequences ) {
138                                        for( Event<?> event : sequence ) {
139                                                String target = event.getTarget();
140                                                if( target!=null ) {
141                                                        targets.add(target);
142                                                }
143                                        }
144                                }
145                        }
146                } else {
147                        MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
148                        messageBox.setMessage("Internal error. Sequences object not of expected type!");
149                        messageBox.setText("Error");
150                        messageBox.open();
151                }
152        }
153
154}
Note: See TracBrowser for help on using the repository browser.