-package org.simantics.views.swt;\r
-\r
-import java.util.Collections;\r
-import java.util.Map;\r
-\r
-import org.eclipse.jface.dialogs.MessageDialog;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.simantics.Simantics;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.VirtualGraph;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.primitiverequest.PossibleObject;\r
-import org.simantics.db.common.primitiverequest.RelatedValue2;\r
-import org.simantics.db.common.primitiverequest.ResourceByURI;\r
-import org.simantics.db.common.primitiverequest.SingleObject;\r
-import org.simantics.db.common.request.WriteResultRequest;\r
-import org.simantics.db.common.utils.Logger;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.scenegraph.loader.ScenegraphVariable;\r
-import org.simantics.scenegraph.ontology.ScenegraphResources;\r
-import org.simantics.utils.threads.SWTThread;\r
-import org.simantics.views.ontology.ViewsResources;\r
-import org.simantics.views.swt.client.base.SWTRoot;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class ModelledDialogs {\r
-\r
- public static void scheduleMessage(final String uri) {\r
- scheduleMessage(uri, Collections.<String, Variant>emptyMap());\r
- }\r
-\r
- public static void scheduleMessage(final String uri, final Map<String, Variant> parameters) {\r
-\r
- SWTThread.getThreadAccess().asyncExec(new Runnable() {\r
-\r
- @Override\r
- public void run() {\r
- openMessage(uri, parameters);\r
- }\r
-\r
- });\r
-\r
- }\r
- \r
- private static int getStyle(Resource type) throws DatabaseException {\r
- ViewsResources VIEWS = ViewsResources.getInstance(Simantics.getSession());\r
- if(VIEWS.MessageDialog_Type_Error.equals(type)) return MessageDialog.ERROR;\r
- else if(VIEWS.MessageDialog_Type_Information.equals(type)) return MessageDialog.INFORMATION;\r
- else if(VIEWS.MessageDialog_Type_Question.equals(type)) return MessageDialog.QUESTION;\r
- else if(VIEWS.MessageDialog_Type_QuestionWithCancel.equals(type)) return MessageDialog.QUESTION_WITH_CANCEL;\r
- else if(VIEWS.MessageDialog_Type_Confirm.equals(type)) return MessageDialog.CONFIRM;\r
- else if(VIEWS.MessageDialog_Type_Warning.equals(type)) return MessageDialog.WARNING;\r
- else throw new DatabaseException("MessageDialog model needs to define a dialog type");\r
- }\r
- \r
- \r
- public static int openMessage(final String uri) {\r
- return openMessage(uri, Collections.<String, Variant>emptyMap());\r
- }\r
-\r
- private static SWTRoot createCustomArea(final Resource customArea, final Map<String, Variant> parameters) throws DatabaseException {\r
- \r
- if(customArea == null) return null;\r
-\r
- final SWTViewLoaderProcess loader = new SWTViewLoaderProcess(null, null);\r
- \r
- Variable context = Simantics.getSession().sync(new WriteResultRequest<Variable>(Simantics.getSession().getService(VirtualGraph.class)) {\r
-\r
- @Override\r
- public Variable perform(WriteGraph graph) throws DatabaseException {\r
-\r
- Layer0 L0 = Layer0.getInstance(graph);\r
- ScenegraphResources SG = ScenegraphResources.getInstance(graph);\r
- Resource runtime = graph.newResource();\r
- graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);\r
- Variable base = Variables.getVariable(graph, customArea);\r
- String uri = base.getURI(graph);\r
- graph.claimLiteral(runtime, SG.Runtime_HasVariable, uri, Bindings.STRING);\r
-\r
- return new ScenegraphVariable(base, customArea, runtime, loader.getRoot(), parameters);\r
-\r
- }\r
-\r
- });\r
-\r
- return loader.load(Simantics.getSession(), context);\r
- \r
- }\r
- \r
- public static int openMessage(final String uri, final Map<String, Variant> parameters) {\r
-\r
- //assert SWTThread.getThreadAccess().currentThreadAccess();\r
- \r
- try {\r
-\r
- Session session = Simantics.getSession();\r
- ViewsResources VIEWS = ViewsResources.getInstance(session);\r
- final Resource configuration = session.sync(new ResourceByURI(uri));\r
- final Resource typeResource = session.sync(new SingleObject(configuration, VIEWS.MessageDialog_HasType));\r
- final int type = getStyle(typeResource);\r
- final String dialogTitle = session.sync(new RelatedValue2<String>(configuration, VIEWS.MessageDialog_title, Bindings.STRING));\r
- final String dialogMessage = session.sync(new RelatedValue2<String>(configuration, VIEWS.MessageDialog_message, Bindings.STRING));\r
- final String[] buttonLabels = session.sync(new RelatedValue2<String[]>(configuration, VIEWS.MessageDialog_buttonLabels, Bindings.STRING_ARRAY));\r
- final Integer defaultButton = session.sync(new RelatedValue2<Integer>(configuration, VIEWS.MessageDialog_defaultButton, Bindings.INTEGER));\r
- final Resource customArea = session.sync(new PossibleObject(configuration, VIEWS.MessageDialog_HasCustomArea));\r
-\r
- final SWTRoot root = createCustomArea(customArea, parameters);\r
-\r
- class Dialog extends MessageDialog {\r
-\r
- public Dialog() {\r
- super(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), \r
- dialogTitle, null, \r
- dialogMessage, \r
- type, buttonLabels, defaultButton);\r
- }\r
-\r
- @Override\r
- protected boolean isResizable() {\r
- return true;\r
- }\r
-\r
- @Override\r
- protected Control createCustomArea(Composite parent) {\r
- if(root != null) {\r
- Composite customArea = new Composite(parent, SWT.NONE);\r
- customArea.setLayout(new GridLayout());\r
- GridDataFactory.fillDefaults().grab(true, true).minSize(50, 50).applyTo(customArea);\r
- root.createControls(customArea);\r
- return customArea;\r
- } else {\r
- return super.createCustomArea(parent);\r
- }\r
- }\r
-\r
- }\r
-\r
- return new Dialog().open();\r
-\r
- } catch (DatabaseException e) {\r
- Logger.defaultLogError(e);\r
- }\r
- \r
- return -1;\r
-\r
- }\r
- \r
- \r
- \r
-\r
-}\r
+package org.simantics.views.swt;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.PlatformUI;
+import org.simantics.Simantics;
+import org.simantics.databoard.Bindings;
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.VirtualGraph;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.primitiverequest.PossibleObject;
+import org.simantics.db.common.primitiverequest.RelatedValue2;
+import org.simantics.db.common.primitiverequest.ResourceByURI;
+import org.simantics.db.common.primitiverequest.SingleObject;
+import org.simantics.db.common.request.WriteResultRequest;
+import org.simantics.db.common.utils.Logger;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.layer0.Layer0;
+import org.simantics.scenegraph.loader.ScenegraphVariable;
+import org.simantics.scenegraph.ontology.ScenegraphResources;
+import org.simantics.utils.threads.SWTThread;
+import org.simantics.views.ontology.ViewsResources;
+import org.simantics.views.swt.client.base.SWTRoot;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class ModelledDialogs {
+
+ public static void scheduleMessage(final String uri) {
+ scheduleMessage(uri, Collections.<String, Variant>emptyMap());
+ }
+
+ public static void scheduleMessage(final String uri, final Map<String, Variant> parameters) {
+
+ SWTThread.getThreadAccess().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ openMessage(uri, parameters);
+ }
+
+ });
+
+ }
+
+ private static int getStyle(Resource type) throws DatabaseException {
+ ViewsResources VIEWS = ViewsResources.getInstance(Simantics.getSession());
+ if(VIEWS.MessageDialog_Type_Error.equals(type)) return MessageDialog.ERROR;
+ else if(VIEWS.MessageDialog_Type_Information.equals(type)) return MessageDialog.INFORMATION;
+ else if(VIEWS.MessageDialog_Type_Question.equals(type)) return MessageDialog.QUESTION;
+ else if(VIEWS.MessageDialog_Type_QuestionWithCancel.equals(type)) return MessageDialog.QUESTION_WITH_CANCEL;
+ else if(VIEWS.MessageDialog_Type_Confirm.equals(type)) return MessageDialog.CONFIRM;
+ else if(VIEWS.MessageDialog_Type_Warning.equals(type)) return MessageDialog.WARNING;
+ else throw new DatabaseException("MessageDialog model needs to define a dialog type");
+ }
+
+
+ public static int openMessage(final String uri) {
+ return openMessage(uri, Collections.<String, Variant>emptyMap());
+ }
+
+ private static SWTRoot createCustomArea(final Resource customArea, final Map<String, Variant> parameters) throws DatabaseException {
+
+ if(customArea == null) return null;
+
+ final SWTViewLoaderProcess loader = new SWTViewLoaderProcess(null, null);
+
+ Variable context = Simantics.getSession().sync(new WriteResultRequest<Variable>(Simantics.getSession().getService(VirtualGraph.class)) {
+
+ @Override
+ public Variable perform(WriteGraph graph) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
+ ScenegraphResources SG = ScenegraphResources.getInstance(graph);
+ Resource runtime = graph.newResource();
+ graph.claim(runtime, L0.InstanceOf, null, SG.Runtime);
+ Variable base = Variables.getVariable(graph, customArea);
+ String uri = base.getURI(graph);
+ graph.claimLiteral(runtime, SG.Runtime_HasVariable, uri, Bindings.STRING);
+
+ return new ScenegraphVariable(base, customArea, runtime, loader.getRoot(), parameters);
+
+ }
+
+ });
+
+ return loader.load(Simantics.getSession(), context);
+
+ }
+
+ public static int openMessage(final String uri, final Map<String, Variant> parameters) {
+
+ //assert SWTThread.getThreadAccess().currentThreadAccess();
+
+ try {
+
+ Session session = Simantics.getSession();
+ ViewsResources VIEWS = ViewsResources.getInstance(session);
+ final Resource configuration = session.sync(new ResourceByURI(uri));
+ final Resource typeResource = session.sync(new SingleObject(configuration, VIEWS.MessageDialog_HasType));
+ final int type = getStyle(typeResource);
+ final String dialogTitle = session.sync(new RelatedValue2<String>(configuration, VIEWS.MessageDialog_title, Bindings.STRING));
+ final String dialogMessage = session.sync(new RelatedValue2<String>(configuration, VIEWS.MessageDialog_message, Bindings.STRING));
+ final String[] buttonLabels = session.sync(new RelatedValue2<String[]>(configuration, VIEWS.MessageDialog_buttonLabels, Bindings.STRING_ARRAY));
+ final Integer defaultButton = session.sync(new RelatedValue2<Integer>(configuration, VIEWS.MessageDialog_defaultButton, Bindings.INTEGER));
+ final Resource customArea = session.sync(new PossibleObject(configuration, VIEWS.MessageDialog_HasCustomArea));
+
+ final SWTRoot root = createCustomArea(customArea, parameters);
+
+ class Dialog extends MessageDialog {
+
+ public Dialog() {
+ super(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+ dialogTitle, null,
+ dialogMessage,
+ type, buttonLabels, defaultButton);
+ }
+
+ @Override
+ protected boolean isResizable() {
+ return true;
+ }
+
+ @Override
+ protected Control createCustomArea(Composite parent) {
+ if(root != null) {
+ Composite customArea = new Composite(parent, SWT.NONE);
+ customArea.setLayout(new GridLayout());
+ GridDataFactory.fillDefaults().grab(true, true).minSize(50, 50).applyTo(customArea);
+ root.createControls(customArea);
+ return customArea;
+ } else {
+ return super.createCustomArea(parent);
+ }
+ }
+
+ }
+
+ return new Dialog().open();
+
+ } catch (DatabaseException e) {
+ Logger.defaultLogError(e);
+ }
+
+ return -1;
+
+ }
+
+
+
+
+}