]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/property/P3DSelectionProcessor.java
Allow property tab contribution from all INodes.
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / property / P3DSelectionProcessor.java
1 package org.simantics.plant3d.property;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6 import java.util.function.Consumer;
7
8 import org.eclipse.jface.viewers.ISelection;
9 import org.eclipse.swt.widgets.Composite;
10 import org.eclipse.ui.IWorkbenchSite;
11 import org.simantics.Simantics;
12 import org.simantics.browsing.ui.swt.PartNameListener;
13 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;
14 import org.simantics.db.ReadGraph;
15 import org.simantics.db.Resource;
16 import org.simantics.db.common.utils.NameUtils;
17 import org.simantics.db.exception.DatabaseException;
18 import org.simantics.db.management.ISessionContext;
19 import org.simantics.db.request.Read;
20 import org.simantics.g3d.property.PropertyTabContributor;
21 import org.simantics.g3d.property.PropertyTabUtil;
22 import org.simantics.g3d.scenegraph.base.INode;
23 import org.simantics.g3d.tools.AdaptationUtils;
24 import org.simantics.g3d.vtk.property.VTKPropertyTabContributor;
25 import org.simantics.objmap.structural.StructuralResource;
26 import org.simantics.selectionview.BasicPropertyTab;
27 import org.simantics.selectionview.ComparableTabContributor;
28 import org.simantics.selectionview.PropertyTabContributorImpl;
29 import org.simantics.selectionview.SelectionProcessor;
30 import org.simantics.utils.threads.SWTThread;
31
32 import vtk.vtkProp;
33
34 public class P3DSelectionProcessor implements SelectionProcessor<Object, ReadGraph>  {
35         
36         private static final boolean DEBUG = false;
37         @Override
38         public Collection<?> process(Object selection, ReadGraph backend) {
39 //           System.out.println(getClass().getSimpleName() + " incoming selection: " + ObjectUtils.toString(selection));
40
41
42                 Collection<ComparableTabContributor> result = new ArrayList<ComparableTabContributor>();
43                 Collection<Resource> resourceCollection = AdaptationUtils.adaptToCollection(selection, Resource.class);
44                 Collection<StructuralResource> structuralResourceCollection = AdaptationUtils.adaptToCollection(selection, StructuralResource.class);
45                 Collection<vtkProp> propCollection = AdaptationUtils.adaptToCollection(selection, vtkProp.class);
46                 Collection<INode> nodeCollection = AdaptationUtils.adaptToCollection(selection, INode.class);
47                 boolean readOnly = false;
48                 if (resourceCollection.size() == 0 && structuralResourceCollection.size() > 0) {
49                         for (StructuralResource sr : structuralResourceCollection) {
50                                 if (sr.isStructural() && !sr.isStructuralRoot())
51                                         readOnly = true;
52                                 resourceCollection.add(sr.getResource());
53                         }
54                 }
55
56
57                 if (nodeCollection.size() == 1) {
58                         INode node = nodeCollection.iterator().next();
59                         List<PropertyTabContributor> contributors = PropertyTabUtil.getContributors(node);
60                         int i = 100;
61                         for (PropertyTabContributor c : contributors) {
62                                 result.add(new ComparableTabContributor(c, i--, node, c.getId()));
63                         }
64                 }
65
66                 if (DEBUG) {
67                         if (propCollection.size() == 1) {
68                                 vtkProp prop = propCollection.iterator().next();
69                                 if (prop == null)
70                                         throw new NullPointerException();
71                                 result.add(new ComparableTabContributor(new VTKPropertyTabContributor(SWTThread.getThreadAccess()), -2, prop, "VTK"));
72                         }
73                         
74                         if (resourceCollection.size() > 0) {
75                                 if (resourceCollection.size() > 1)
76                                         result.add(new ComparableTabContributor(new MultiSelectionTabContibutor(),0, resourceCollection, "Graph"));
77                                 else if (resourceCollection.size() == 1){
78                                         try {
79                                                 Resource r = resourceCollection.iterator().next();
80                                                 result.add(new ComparableTabContributor(new P3DBasicPropertyTab(!readOnly), 0, r, "Graph"));
81
82                                         } catch (Exception e) {
83                                                 e.printStackTrace();
84                                         }
85                                 }
86                         }
87                 }
88
89                 if (resourceCollection.size() == 1){
90                         try {
91                                 Resource r = resourceCollection.iterator().next();
92                                 result.add(new ComparableTabContributor(new P3DBasicPropertyTab(!readOnly), 0, r, "Properties"));
93                         } catch (Exception e) {
94                                 e.printStackTrace();
95                         }
96                 }
97                 
98                 if(result.size() == 0) {
99                         result.add(new ComparableTabContributor(new NoneSelectionTabContributor(),0, resourceCollection, "Empty"));
100                 }
101
102                 return result;
103         }
104
105         public class P3DBasicPropertyTab extends BasicPropertyTab {
106
107                 boolean enabled;
108                 public P3DBasicPropertyTab(boolean enabled) {
109                         this.enabled = enabled;
110                 }
111                 
112                 
113
114                 @Override
115                 public void updatePartName(ISelection forSelection, Consumer<String> updateCallback) {
116                         Read<String> read = getPartNameReadRequest(forSelection);
117                         if (read == null) {
118                                 updateCallback.accept("Override to control part name (PropertyTabContributorImpl.updatePartName)");
119                         } else {
120                                 Simantics.getSession().asyncRequest(read, new PartNameListener(updateCallback));
121                         }
122                 }
123
124                 @Override
125                 public Read<String> getPartNameReadRequest(ISelection forSelection) {
126                         final Resource r  =  AdaptationUtils.adaptToSingle(forSelection, Resource.class);
127                         if (r == null)
128                                 return null;
129                         return new Read<String>() {
130                                 @Override
131                                 public String perform(ReadGraph graph) throws DatabaseException {
132                                         return NameUtils.getSafeName(graph, r);         
133                                 }
134                         };
135                 }
136
137                 @Override
138                 public void createControls(Composite body, IWorkbenchSite site,
139                                 ISessionContext context, WidgetSupport support) {
140                         // TODO Auto-generated method stub
141                         super.createControls(body, site, context, support);
142                         ((Composite)parameterExplorer.getExplorerControl()).setEnabled(enabled);
143                 }
144         }
145
146
147
148         public class MultiSelectionTabContibutor extends PropertyTabContributorImpl {
149                 @Override
150                 public void createControls(org.eclipse.swt.widgets.Composite body, org.eclipse.ui.IWorkbenchSite site, org.simantics.db.management.ISessionContext context, org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport support) {
151                         //Composite composite = new Composite(body, SWT.NONE);
152                 }
153
154                 @Override
155                 public Read<String> getPartNameReadRequest(ISelection forSelection) {
156                         final Collection<Resource> coll =  AdaptationUtils.adaptToCollection(forSelection, Resource.class);
157                         if (coll.size() == 0)
158                                 return null;
159                         return new Read<String>() {
160                                 @Override
161                                 public String perform(ReadGraph graph) throws DatabaseException {
162                                         String title = "";
163                                         for (Resource r : coll) {
164                                                 title += NameUtils.getSafeName(graph, r) +",";
165                                         }
166                                         System.out.println(title);
167                                         return title.substring(0,title.length()-1);             
168                                 }
169                         };
170                 }
171         }
172
173         public class NoneSelectionTabContributor extends PropertyTabContributorImpl {
174                 @Override
175                 public void createControls(Composite body, IWorkbenchSite site,
176                                 ISessionContext context, WidgetSupport support) {
177                         //Composite composite = new Composite(body, SWT.NONE);
178
179                 }
180
181                 //@Override
182                 public void updatePartName(ISelection forSelection, Consumer<String> updateCallback) {
183                         updateCallback.accept("No Selection");
184                 }
185         }
186
187
188 }