]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/ModelledCombo.java
Merge remote-tracking branch 'origin/svn' commit 'ccc1271c9d6657fb9dcf4cf3cb115fa0c8c...
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / ModelledCombo.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2012 Association for Decentralized Information Management\r
3  * in 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 java.util.List;\r
15 \r
16 import org.eclipse.swt.SWT;\r
17 import org.eclipse.swt.events.ModifyListener;\r
18 import org.eclipse.swt.layout.GridData;\r
19 import org.eclipse.swt.widgets.Composite;\r
20 import org.eclipse.swt.widgets.Control;\r
21 import org.eclipse.ui.IWorkbenchSite;\r
22 import org.simantics.Simantics;\r
23 import org.simantics.browsing.ui.swt.stubs.BrowsingResource;\r
24 import org.simantics.browsing.ui.swt.widgets.Combo;\r
25 import org.simantics.browsing.ui.swt.widgets.impl.ReadFactory;\r
26 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
27 import org.simantics.databoard.Bindings;\r
28 import org.simantics.db.ReadGraph;\r
29 import org.simantics.db.Resource;\r
30 import org.simantics.db.exception.DatabaseException;\r
31 import org.simantics.db.management.ISessionContext;\r
32 import org.simantics.db.request.Read;\r
33 import org.simantics.utils.datastructures.Pair;\r
34 \r
35 /**\r
36  * @author Antti Villberg\r
37  */\r
38 public class ModelledCombo implements ModelledControl {\r
39 \r
40     final private Resource configuration;\r
41 \r
42     public ModelledCombo(Resource configuration) {\r
43         this.configuration = configuration;\r
44     }\r
45 \r
46     @Override\r
47     public Control create(Composite parent, IWorkbenchSite site, ISessionContext context, WidgetSupport support) throws DatabaseException {\r
48 \r
49         Combo combo = new Combo(parent, support, SWT.READ_ONLY);\r
50         \r
51         GridData gridData = Simantics.getSession().syncRequest(new Read<GridData>() {\r
52 \r
53             @Override\r
54             public GridData perform(ReadGraph graph) throws DatabaseException {\r
55                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
56                 GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);                \r
57                 Integer span = graph.getPossibleRelatedValue(configuration, br.Control_HorizontalSpan, Bindings.INTEGER);\r
58                 if(span != null) data.horizontalSpan = span;\r
59                 Boolean grabExcessHorizontalSpace = graph.getPossibleRelatedValue(configuration, br.Control_HorizontalGrab, Bindings.BOOLEAN);\r
60                 if(grabExcessHorizontalSpace != null) data.grabExcessHorizontalSpace = grabExcessHorizontalSpace;\r
61                 return data;\r
62             }\r
63 \r
64         });\r
65         \r
66         combo.setLayoutData(gridData);\r
67 \r
68         ReadFactory<?, List<Pair<String, Object>>> available = Simantics.getSession().syncRequest(new Read<ReadFactory<?, List<Pair<String, Object>>>>() {\r
69 \r
70             @SuppressWarnings("unchecked")\r
71             @Override\r
72             public ReadFactory<?, List<Pair<String, Object>>> perform(ReadGraph graph) throws DatabaseException {\r
73                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
74                 Resource factory = graph.getPossibleObject(configuration, br.Combo_AvailableItems);\r
75                 return graph.adapt(factory, ReadFactory.class);\r
76             }\r
77 \r
78         });\r
79 \r
80         //System.err.println("ModelledCombo: items = " + available);\r
81 \r
82         combo.setItemFactory2(available);\r
83 \r
84         ReadFactory<?, String> selected = Simantics.getSession().syncRequest(new Read<ReadFactory<?, String>>() {\r
85 \r
86             @SuppressWarnings("unchecked")\r
87             @Override\r
88             public ReadFactory<?, String> perform(ReadGraph graph) throws DatabaseException {\r
89                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
90                 Resource factory = graph.getPossibleObject(configuration, br.Combo_SelectedItem);\r
91                 return graph.adapt(factory, ReadFactory.class);\r
92             }\r
93 \r
94         });\r
95 \r
96         combo.setSelectionFactory(selected);\r
97 \r
98         ModifyListener modifier = Simantics.getSession().syncRequest(new Read<ModifyListener>() {\r
99 \r
100             @Override\r
101             public ModifyListener perform(ReadGraph graph) throws DatabaseException {\r
102                 BrowsingResource br = BrowsingResource.getInstance(graph);\r
103                 Resource factory = graph.getPossibleObject(configuration, br.Combo_Modifier);\r
104                 return graph.adapt(factory, ModifyListener.class);\r
105             }\r
106 \r
107         });\r
108 \r
109         combo.addModifyListener(modifier);\r
110 \r
111         return combo.getWidget();\r
112     }\r
113 \r
114 }\r