1 /*******************************************************************************
\r
2 * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.
\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
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.proconf.g3d.base;
\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
31 public abstract class ThreeDimensionalEditorPart extends ResourceEditorPart implements ThreeDimensionalEditorProvider{
\r
33 protected Composite parent;
\r
35 protected ThreeDimensionalEditorBase editor;
\r
37 protected ISelectionListener pageSelectionListener;
\r
39 protected abstract ThreeDimensionalEditorBase createEditor(ISessionContext session);
\r
42 * This is a callback that will allow us to create the viewer and it.
\r
45 public void createPartControl(Composite p) {
\r
48 editor = createEditor(getSessionContext());
\r
50 // add partlistener that loads the scene-graph when the view has been created
\r
51 this.getEditorSite().getPage().addPartListener(new EditorLoader() {
\r
53 public IWorkbenchPart getWorkbechPart() {
\r
54 return ThreeDimensionalEditorPart.this.getEditorSite().getPart();
\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
62 public GraphRequestStatus perform(Graph g)
\r
65 return GraphRequestStatus.transactionComplete();
\r
72 IActionBars actionBar = getEditorSite().getActionBars();
\r
73 // editor.setActionBarContributor(getEditorSite().getActionBarContributor());
\r
74 editor.setActionBars(actionBar);
\r
75 getSession().syncRead(new GraphRequestAdapter() {
\r
77 public GraphRequestStatus perform(Graph g) throws Exception {
\r
78 editor.createControl(g,parent);
\r
79 return GraphRequestStatus.transactionComplete();
\r
83 contributeStatusBar(actionBar.getStatusLineManager());
\r
84 hookPageSelection();
\r
85 getSite().setSelectionProvider(editor.selectionAdapter);
\r
89 } catch (Exception e) {
\r
90 Display d = getSite().getShell().getDisplay();
\r
91 d.asyncExec(new Runnable() {
\r
93 getSite().getPage().closeEditor(ThreeDimensionalEditorPart.this,false);
\r
97 ErrorLogger logger = ErrorLogger.getDefault();
\r
98 logger.logError("Shape editor failed to open, see exception for details", e);
\r
104 protected void contributeStatusBar(IStatusLineManager manager) {
\r
109 public void reload(Graph g) {
\r
110 Resource inputResource = getInputResource();
\r
111 if (inputResource != null) {
\r
112 editor.reload(g,inputResource);
\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
126 public void update(GraphChangeEvent e) {
\r
131 public void setFocus() {
\r
136 * Hooks selection listening
\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
144 pageSelectionChanged(part, selection);
\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
155 * Receives selection changes
\r
160 protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {
\r
161 editor.pageSelectionChanged(part, selection);
\r
164 public void dispose() {
\r
165 if (pageSelectionListener != null) {
\r
166 getSite().getPage().removePostSelectionListener(pageSelectionListener);
\r
167 getSite().getPage().removeSelectionListener(pageSelectionListener);
\r
173 public ThreeDimensionalEditorBase getEditor() {
\r
178 public Object getAdapter(Class adapter) {
\r
179 Object o = super.getAdapter(adapter);
\r
181 o = editor.getAdapter(adapter);
\r