]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.proconf.g3d/src/org/simantics/proconf/g3d/base/ThreeDimensionalEditorPart.java
Set copyright texts for java files in the latest development branches.
[simantics/3d.git] / org.simantics.proconf.g3d / src / org / simantics / proconf / g3d / base / ThreeDimensionalEditorPart.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007- VTT Technical Research Centre of Finland.\r
3  * All rights reserved. This program and the accompanying materials\r
4  * are made available under the terms of the Eclipse Public License v1.0\r
5  * which accompanies this distribution, and is available at\r
6  * http://www.eclipse.org/legal/epl-v10.html\r
7  *\r
8  * Contributors:\r
9  *     VTT Technical Research Centre of Finland - initial API and implementation\r
10  *******************************************************************************/\r
11 package org.simantics.proconf.g3d.base;\r
12 \r
13 import org.eclipse.jface.action.IStatusLineManager;\r
14 import org.eclipse.jface.viewers.ISelection;\r
15 import org.eclipse.swt.widgets.Composite;\r
16 import org.eclipse.swt.widgets.Display;\r
17 import org.eclipse.ui.IActionBars;\r
18 import org.eclipse.ui.ISelectionListener;\r
19 import org.eclipse.ui.IWorkbenchPart;\r
20 import org.simantics.db.Graph;\r
21 import org.simantics.db.GraphRequestAdapter;\r
22 import org.simantics.db.GraphRequestStatus;\r
23 import org.simantics.db.Session;\r
24 import org.simantics.db.Resource;\r
25 import org.simantics.db.events.GraphChangeEvent;\r
26 import org.simantics.db.management.ISessionContext;\r
27 import org.simantics.proconf.ui.workbench.ResourceEditorPart;\r
28 import org.simantics.utils.ui.ErrorLogger;\r
29 \r
30 \r
31 public abstract class ThreeDimensionalEditorPart extends ResourceEditorPart implements ThreeDimensionalEditorProvider{\r
32         \r
33         protected Composite parent;\r
34         \r
35         protected ThreeDimensionalEditorBase editor;\r
36 \r
37     protected ISelectionListener pageSelectionListener;\r
38 \r
39         protected abstract ThreeDimensionalEditorBase createEditor(ISessionContext session);\r
40         \r
41         /**\r
42      * This is a callback that will allow us to create the viewer and it.\r
43      */\r
44     @Override\r
45     public void createPartControl(Composite p) {\r
46         this.parent = p;\r
47         try {\r
48                 editor = createEditor(getSessionContext());\r
49                 \r
50             // add partlistener that loads the scene-graph when the view has been created\r
51             this.getEditorSite().getPage().addPartListener(new EditorLoader() {\r
52 \r
53                 public IWorkbenchPart getWorkbechPart() {\r
54                         return ThreeDimensionalEditorPart.this.getEditorSite().getPart();\r
55                 }\r
56                 \r
57                 public void load() {\r
58                         //System.out.println("ThreeDimensionalEditorPart.reload()");\r
59                     Session ses = ThreeDimensionalEditorPart.this.getSession();\r
60                     GraphRequestAdapter r = new GraphRequestAdapter() {\r
61                         @Override\r
62                         public GraphRequestStatus perform(Graph g)\r
63                                         throws Exception {\r
64                                  reload(g);\r
65                                 return GraphRequestStatus.transactionComplete();\r
66                         }\r
67                     };\r
68                     ses.asyncRead(r);\r
69                 }\r
70             });\r
71 \r
72             IActionBars actionBar = getEditorSite().getActionBars();\r
73 //            editor.setActionBarContributor(getEditorSite().getActionBarContributor());\r
74             editor.setActionBars(actionBar);\r
75             getSession().syncRead(new GraphRequestAdapter() {\r
76                 @Override\r
77                 public GraphRequestStatus perform(Graph g) throws Exception {\r
78                         editor.createControl(g,parent);\r
79                         return GraphRequestStatus.transactionComplete();\r
80                 }\r
81             });\r
82             \r
83             contributeStatusBar(actionBar.getStatusLineManager());\r
84             hookPageSelection(); \r
85             getSite().setSelectionProvider(editor.selectionAdapter);\r
86             \r
87 \r
88 \r
89         } catch (Exception e) {\r
90             Display d = getSite().getShell().getDisplay();\r
91             d.asyncExec(new Runnable() {\r
92                 public void run() {\r
93                     getSite().getPage().closeEditor(ThreeDimensionalEditorPart.this,false);\r
94                 }\r
95             });\r
96 \r
97             ErrorLogger logger = ErrorLogger.getDefault();\r
98             logger.logError("Shape editor failed to open, see exception for details", e);\r
99         }\r
100 \r
101     }\r
102     \r
103 \r
104     protected void contributeStatusBar(IStatusLineManager manager) {\r
105     }\r
106     \r
107     \r
108         @Override\r
109         public void reload(Graph g) {\r
110                 Resource inputResource = getInputResource();\r
111                 if (inputResource != null) {\r
112                         editor.reload(g,inputResource);\r
113                 } else {\r
114                         \r
115                          Display d = getSite().getShell().getDisplay();\r
116                     d.asyncExec(new Runnable() {\r
117                         public void run() {\r
118                                 editor.showMessage("Failed to load model.");\r
119                             getSite().getPage().closeEditor(ThreeDimensionalEditorPart.this,false);\r
120                         }\r
121                     });\r
122                 }\r
123         }\r
124         \r
125         @Override\r
126         public void update(GraphChangeEvent e) {\r
127                 editor.update(e);\r
128         }\r
129         \r
130         @Override\r
131         public void setFocus() {\r
132                 editor.setFocus();\r
133         }\r
134         \r
135          /**\r
136      * Hooks selection listening\r
137      */\r
138     private void hookPageSelection() {\r
139         pageSelectionListener = new ISelectionListener() {\r
140             public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
141                 if (part == ThreeDimensionalEditorPart.this) {\r
142                         return;\r
143                 }\r
144                 pageSelectionChanged(part, selection);\r
145             }\r
146         };\r
147         getSite().getPage().addPostSelectionListener(pageSelectionListener);\r
148         getSite().getPage().addSelectionListener(pageSelectionListener);\r
149         ISelection sel = getSite().getPage().getSelection();\r
150         IWorkbenchPart wb = getSite().getPage().getActivePart();\r
151         pageSelectionChanged(wb, sel);\r
152     }\r
153     \r
154     /**\r
155      * Receives selection changes\r
156      * \r
157      * @param part\r
158      * @param selection\r
159      */\r
160     protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {\r
161         editor.pageSelectionChanged(part, selection);\r
162     }\r
163     \r
164     public void dispose() {\r
165         if (pageSelectionListener != null) {\r
166             getSite().getPage().removePostSelectionListener(pageSelectionListener);\r
167                 getSite().getPage().removeSelectionListener(pageSelectionListener);\r
168         }\r
169         editor.dispose();\r
170         super.dispose();\r
171     }\r
172     \r
173     public ThreeDimensionalEditorBase getEditor() {\r
174         return editor;\r
175     }\r
176     \r
177     @Override\r
178     public Object getAdapter(Class adapter) {\r
179         Object o = super.getAdapter(adapter);\r
180         if (o == null) {\r
181                 o = editor.getAdapter(adapter);\r
182         }\r
183         return o;\r
184     }\r
185 \r
186 \r
187 \r
188 }\r