]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/ModelledDialog.java
Merge remote-tracking branch 'origin/svn' commit 'ccc1271c9d6657fb9dcf4cf3cb115fa0c8c...
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / ModelledDialog.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.swt;\r
13 \r
14 import org.eclipse.jface.dialogs.Dialog;\r
15 import org.eclipse.swt.widgets.Composite;\r
16 import org.eclipse.swt.widgets.Control;\r
17 import org.eclipse.swt.widgets.Display;\r
18 import org.eclipse.swt.widgets.Shell;\r
19 import org.eclipse.ui.IWorkbenchSite;\r
20 import org.simantics.Simantics;\r
21 import org.simantics.browsing.ui.swt.stubs.BrowsingResource;\r
22 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
23 import org.simantics.databoard.Bindings;\r
24 import org.simantics.db.ReadGraph;\r
25 import org.simantics.db.Resource;\r
26 import org.simantics.db.exception.DatabaseException;\r
27 import org.simantics.db.management.ISessionContext;\r
28 import org.simantics.db.request.Read;\r
29 \r
30 /**\r
31  * @author Tuukka Lehtonen\r
32  */\r
33 public class ModelledDialog implements ModelledAction {\r
34 \r
35         public class DialogImpl extends Dialog {\r
36 \r
37             private final WidgetSupport          widgetSupport;\r
38             private Runnable               finishAction;\r
39             \r
40             private final String title;\r
41 \r
42             public DialogImpl(Shell shell, WidgetSupport support, String title) {\r
43                 super(shell);\r
44                 this.title = title;\r
45                 this.widgetSupport = support;\r
46             }\r
47 \r
48             @Override\r
49             protected void configureShell(Shell shell) {\r
50                 super.configureShell(shell);\r
51                 if (title != null) {\r
52                                 shell.setText(title);\r
53                         }\r
54             }\r
55             \r
56             @Override\r
57             protected boolean isResizable() {\r
58                 return true;\r
59             }\r
60             \r
61             @Override\r
62             protected void okPressed() {\r
63                 if(finishAction != null) finishAction.run();\r
64                 super.okPressed();\r
65             }\r
66             \r
67                 protected Control createDialogArea(Composite parent) {\r
68                         \r
69                         Composite composite = (Composite)super.createDialogArea(parent);\r
70                         \r
71                         try {\r
72                         \r
73                                 ModelledControl modelledControl = Simantics.getSession().syncRequest(new Read<ModelledControl>() {\r
74                                         @Override\r
75                                         public ModelledControl perform(ReadGraph graph) throws DatabaseException {\r
76                                                 BrowsingResource BRO = BrowsingResource.getInstance(graph);\r
77                                                 Resource controlResource = graph.getPossibleObject(configuration, BRO.Dialog_Control);\r
78                                                 return graph.adapt(controlResource, ModelledControl.class);\r
79                                         }\r
80                                 });\r
81                                 \r
82                                 ModelledAction finishAction = Simantics.getSession().syncRequest(new Read<ModelledAction>() {\r
83                                         @Override\r
84                                         public ModelledAction perform(ReadGraph graph) throws DatabaseException {\r
85                                                 BrowsingResource BRO = BrowsingResource.getInstance(graph);\r
86                                                 Resource actionResource = graph.getPossibleObject(configuration, BRO.Dialog_FinishAction);\r
87                                                 return graph.adapt(actionResource, ModelledAction.class);\r
88                                         }\r
89                                 }); \r
90                                 \r
91                                 this.finishAction = finishAction.create(null, null, widgetSupport);\r
92                                 \r
93                                 return modelledControl.create(composite, null, null, widgetSupport);\r
94                         \r
95                         } catch (DatabaseException e) {\r
96                                 \r
97                                 e.printStackTrace();\r
98                                 \r
99                         }\r
100                         \r
101                         return composite;\r
102                         \r
103                 }\r
104                 \r
105                 @Override\r
106                 protected Control createContents(Composite parent) {\r
107                         return super.createContents(parent);\r
108                 }\r
109                 \r
110         }\r
111         \r
112         \r
113         final Resource configuration;\r
114         \r
115     public ModelledDialog(Resource configuration) {\r
116         this.configuration = configuration;\r
117     }\r
118 \r
119         @Override\r
120         public Runnable create(IWorkbenchSite site, ISessionContext context, final WidgetSupport support) throws DatabaseException {\r
121 \r
122                 final String title = Simantics.getSession().syncRequest(new Read<String>() {\r
123 \r
124                         @Override\r
125                         public String perform(ReadGraph graph) throws DatabaseException {\r
126                                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
127                                 return graph.getPossibleRelatedValue(configuration, br.Dialog_Title, Bindings.STRING);\r
128                         }\r
129                         \r
130                 });\r
131                 \r
132                 return new Runnable() {\r
133 \r
134                         @Override\r
135                         public void run() {\r
136                                 \r
137                                 DialogImpl dialog = new DialogImpl(Display.getCurrent().getActiveShell(), support, title);\r
138                             dialog.create();\r
139                             support.update();\r
140                             dialog.open();                              \r
141                                 \r
142                         }\r
143                         \r
144                 };\r
145                 \r
146         }\r
147 \r
148 }\r