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

Last change on this file since 847 was 847, checked in by sherbold, 12 years ago
  • added button to condense GUI models
  • Property svn:mime-type set to text/plain
File size: 6.1 KB
Line 
1
2package de.ugoe.cs.quest.ui.swt;
3
4import java.util.List;
5
6import org.eclipse.swt.SWT;
7import org.eclipse.swt.events.SelectionAdapter;
8import org.eclipse.swt.events.SelectionEvent;
9import org.eclipse.swt.layout.GridData;
10import org.eclipse.swt.layout.GridLayout;
11import org.eclipse.swt.widgets.Button;
12import org.eclipse.swt.widgets.Dialog;
13import org.eclipse.swt.widgets.Display;
14import org.eclipse.swt.widgets.MessageBox;
15import org.eclipse.swt.widgets.Shell;
16import org.eclipse.swt.widgets.Tree;
17import org.eclipse.swt.widgets.TreeItem;
18
19import de.ugoe.cs.quest.eventcore.guimodel.GUIModel;
20import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
21import de.ugoe.cs.util.console.Console;
22
23import org.eclipse.swt.widgets.Label;
24
25/**
26 * <p>
27 * TODO comment
28 * </p>
29 *
30 * @version $Revision: $ $Date: Aug 28, 2012$
31 * @author 2012, last modified by $Author: sherbold$
32 */
33public class ShowGuiModelDialog extends Dialog {
34
35    protected Shell shell;
36    private Tree guiTree;
37
38    protected GUIModel model;
39
40    /**
41     * Create the dialog.
42     *
43     * @param parent
44     * @param style
45     */
46    public ShowGuiModelDialog(Shell parent, int style, GUIModel model, String modelName) {
47        super(parent, style);
48        setText("GUI Model " + modelName);
49        this.model = model;
50    }
51
52    /**
53     * Open the dialog.
54     *
55     * @return the result
56     */
57    public void open() {
58        createContents();
59        shell.open();
60        shell.layout();
61        Display display = getParent().getDisplay();
62        while (!shell.isDisposed()) {
63            if (!display.readAndDispatch()) {
64                display.sleep();
65            }
66        }
67    }
68
69    /**
70     * Create contents of the dialog.
71     */
72    private void createContents() {
73        shell = new Shell(getParent(), SWT.SHELL_TRIM | SWT.BORDER | SWT.APPLICATION_MODAL);
74        shell.setSize(450, 300);
75        shell.setText(getText());
76
77        shell.setLayout(new GridLayout(4, false));
78
79        guiTree = new Tree(shell, SWT.BORDER | SWT.MULTI);
80        guiTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
81
82        buildGuiTree();
83
84        Button btnExpandAll = new Button(shell, SWT.NONE);
85        btnExpandAll.addSelectionListener(new SelectionAdapter() {
86            @Override
87            public void widgetSelected(SelectionEvent e) {
88                expandAll(guiTree, true);
89            }
90        });
91        btnExpandAll.setText("Expand all");
92
93        Button btnCollapseAll = new Button(shell, SWT.NONE);
94        btnCollapseAll.addSelectionListener(new SelectionAdapter() {
95            @Override
96            public void widgetSelected(SelectionEvent e) {
97                expandAll(guiTree, false);
98            }
99        });
100        btnCollapseAll.setText("Collapse all");
101       
102        Button btnCondense = new Button(shell, SWT.NONE);
103        btnCondense.addSelectionListener(new SelectionAdapter() {
104            @Override
105            public void widgetSelected(SelectionEvent e) {
106                model.condenseModel();
107                guiTree.removeAll();
108                buildGuiTree();
109            }
110        });
111        btnCondense.setText("Condense");
112       
113        Button btnMerge = new Button(shell, SWT.NONE);
114        btnMerge.addSelectionListener(new SelectionAdapter() {
115            @Override
116            public void widgetSelected(SelectionEvent e) {
117                mergeSelectedNode(guiTree);
118            }
119        });
120        btnMerge.setText("Merge nodes");
121       
122        //new Label(shell, SWT.NONE);
123        new Label(shell, SWT.NONE);
124        new Label(shell, SWT.NONE);
125        new Label(shell, SWT.NONE);
126
127    }
128
129    private void buildGuiTree() {
130        for (IGUIElement element : model.getRootElements()) {
131            TreeItem child = new TreeItem(guiTree, SWT.NULL);
132            child.setText(element.toString());
133            child.setData(element);
134            buildGuiTree(child, model.getChildren(element));
135        }
136    }
137
138    private void buildGuiTree(TreeItem currentParent, List<IGUIElement> elements) {
139        for (IGUIElement element : elements) {
140            TreeItem child = new TreeItem(currentParent, SWT.NULL);
141            child.setText(element.toString());
142            child.setData(element);
143            buildGuiTree(child, model.getChildren(element));
144        }
145    }
146
147    private void expandAll(Tree tree, boolean expanded) {
148        for (TreeItem item : tree.getItems()) {
149            expandAll(item, expanded);
150        }
151    }
152
153    private void expandAll(TreeItem item, boolean expanded) {
154        item.setExpanded(expanded);
155        for (TreeItem childItem : item.getItems()) {
156            expandAll(childItem, expanded);
157        }
158    }
159   
160    private void mergeSelectedNode(Tree tree) {
161        TreeItem[] selectedNodes = tree.getSelection();
162        if( selectedNodes.length<2 ) {
163            MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
164            messageBox.setMessage("Must select at least two nodes to merge!");
165            messageBox.setText("Error");
166            messageBox.open();
167            return;
168        }
169       
170        TreeItem firstParent = selectedNodes[0].getParentItem();
171        for( int i=1 ; i<selectedNodes.length ; i++ ) {
172            if( firstParent!=selectedNodes[i].getParentItem() ) {
173                MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
174                messageBox.setMessage("All selected nodes must have the same parent!");
175                messageBox.setText("Error");
176                messageBox.open();
177                return;
178            }
179        }
180       
181        try {
182            // try to merge the elements
183            IGUIElement firstElement = (IGUIElement) selectedNodes[0].getData();
184            for( int i=1 ; i<selectedNodes.length ; i++ ) {
185                model.mergeGUIElements(firstElement, (IGUIElement) selectedNodes[i].getData());
186            }
187        } catch( IllegalArgumentException e) {
188            Console.logException(e);
189        }
190       
191        // update visualization of the model
192        firstParent.removeAll();
193        buildGuiTree(firstParent, model.getChildren((IGUIElement) firstParent.getData()));
194        firstParent.setExpanded(true);
195    }
196
197}
Note: See TracBrowser for help on using the repository browser.