-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.modeling.ui.diagramEditor;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.jface.resource.JFaceResources;\r
-import org.eclipse.jface.resource.LocalResourceManager;\r
-import org.eclipse.jface.viewers.IPostSelectionProvider;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.ISelectionProvider;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Control;\r
-import org.eclipse.ui.part.Page;\r
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.browsing.ui.common.ColumnKeys;\r
-import org.simantics.browsing.ui.common.ErrorLogger;\r
-import org.simantics.browsing.ui.common.EvaluatorData;\r
-import org.simantics.browsing.ui.common.EvaluatorDataImpl;\r
-import org.simantics.browsing.ui.common.processors.ComparableFactoryResolver;\r
-import org.simantics.browsing.ui.common.processors.ComparableSelectorQueryProcessor;\r
-import org.simantics.browsing.ui.common.processors.ImageDecoratorFactoryResolver;\r
-import org.simantics.browsing.ui.common.processors.ImagerFactoryResolver;\r
-import org.simantics.browsing.ui.common.processors.LabelDecoratorFactoryResolver;\r
-import org.simantics.browsing.ui.common.processors.LabelerFactoryResolver;\r
-import org.simantics.browsing.ui.common.processors.UserSelectedComparableFactoryQueryProcessor;\r
-import org.simantics.browsing.ui.common.processors.UserSelectedViewpointFactoryQueryProcessor;\r
-import org.simantics.browsing.ui.common.processors.ViewpointFactoryResolver;\r
-import org.simantics.browsing.ui.graph.impl.AsyncReadGraphDataSource;\r
-import org.simantics.browsing.ui.graph.impl.InheritsQueryProcessor;\r
-import org.simantics.browsing.ui.graph.impl.ReadGraphDataSource;\r
-import org.simantics.browsing.ui.graph.impl.RelatedObjectsQueryProcessor;\r
-import org.simantics.browsing.ui.swt.ContextMenuInitializer;\r
-import org.simantics.browsing.ui.swt.DefaultKeyListener;\r
-import org.simantics.browsing.ui.swt.DefaultMouseListener;\r
-import org.simantics.browsing.ui.swt.DefaultSelectionDataResolver;\r
-import org.simantics.browsing.ui.swt.GraphExplorerFactory;\r
-import org.simantics.browsing.ui.swt.TypesQueryProcessor;\r
-import org.simantics.db.AsyncReadGraph;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.management.ISessionContext;\r
-import org.simantics.db.management.ISessionContextProvider;\r
-import org.simantics.db.request.Read;\r
-import org.simantics.modeling.ModelingResources;\r
-import org.simantics.modeling.ui.Activator;\r
-import org.simantics.modeling.ui.modelBrowser.ModelEvaluators;\r
-import org.simantics.modeling.ui.modelBrowser.model.INode;\r
-import org.simantics.modeling.ui.modelBrowser.model.INode2;\r
-import org.simantics.structural.ui.menuContributions.LinkWithEditorContribution;\r
-import org.simantics.ui.workbench.IResourceEditorInput2;\r
-import org.simantics.utils.datastructures.Function;\r
-import org.simantics.utils.datastructures.Functions;\r
-\r
-/**\r
- * TODO: change to use newer contribution mechanisms, get rid of\r
- * {@link ModelEvaluators} use.\r
- * \r
- * @author Tuukka Lehtonen\r
- */\r
-public class DiagramOutlinePage extends Page implements IContentOutlinePage, IPostSelectionProvider {\r
-\r
- ISessionContextProvider sessionContextProvider;\r
- IResourceEditorInput2 input;\r
- LocalResourceManager resourceManager;\r
- Composite composite;\r
- GraphExplorer explorer;\r
- LinkWithEditor linkWithEditor;\r
-\r
- public DiagramOutlinePage(ISessionContextProvider contextProvider, IResourceEditorInput2 input) {\r
- assert contextProvider != null;\r
- assert input != null;\r
-\r
- this.sessionContextProvider = contextProvider;\r
- this.input = input;\r
- }\r
-\r
- @Override\r
- public void createControl(Composite parent) {\r
- resourceManager = new LocalResourceManager(JFaceResources.getResources());\r
- composite = new Composite(parent, SWT.NONE);\r
- GridLayoutFactory.fillDefaults().applyTo(composite);\r
- this.explorer = GraphExplorerFactory.getInstance().selectionDataResolver(new DefaultSelectionDataResolver()).create(composite);\r
- Control control = explorer.getControl();\r
- ISelectionProvider selectionProvider = (ISelectionProvider)explorer.getAdapter(ISelectionProvider.class);\r
- new ContextMenuInitializer("#GraphExplorerPopup").createContextMenu(control, selectionProvider, getSite());\r
- GridDataFactory.fillDefaults().grab(true, true).applyTo(control);\r
-\r
- // Consider ENTER presses to simulate mouse left button double clicks\r
- Function<String[]> resolver = Functions.constant(ColumnKeys.SINGLE);\r
- explorer.addListener(new DefaultKeyListener(sessionContextProvider, explorer, resolver));\r
-\r
- // Default double click handling\r
- explorer.addListener(new DefaultMouseListener(explorer));\r
-\r
- ISessionContext sessionContext = sessionContextProvider.getSessionContext();\r
- Session session = sessionContext != null ? sessionContext.getSession() : null;\r
- EvaluatorData data = null;\r
- if (session != null) {\r
- data = createEvaluatorData(sessionContext);\r
- explorer.setDataSource(new AsyncReadGraphDataSource(session));\r
- explorer.setDataSource(new ReadGraphDataSource(session));\r
- } else {\r
- data = new EvaluatorDataImpl();\r
- explorer.removeDataSource(AsyncReadGraph.class);\r
- explorer.removeDataSource(ReadGraph.class);\r
- }\r
-\r
- explorer.setProcessor(new ComparableFactoryResolver(data));\r
- explorer.setProcessor(new ViewpointFactoryResolver(data));\r
- explorer.setProcessor(new LabelerFactoryResolver(data));\r
- explorer.setProcessor(new ImagerFactoryResolver(data));\r
- explorer.setProcessor(new LabelDecoratorFactoryResolver(data));\r
- explorer.setProcessor(new ImageDecoratorFactoryResolver(data));\r
- explorer.setPrimitiveProcessor(new TypesQueryProcessor());\r
- explorer.setPrimitiveProcessor(new InheritsQueryProcessor());\r
- explorer.setPrimitiveProcessor(new RelatedObjectsQueryProcessor());\r
-\r
- explorer.setProcessor(new ComparableSelectorQueryProcessor());\r
- explorer.setPrimitiveProcessor(new UserSelectedViewpointFactoryQueryProcessor());\r
- explorer.setPrimitiveProcessor(new UserSelectedComparableFactoryQueryProcessor());\r
-\r
- try {\r
-\r
- // Look for a proper input resource to give to the model browser.\r
- final Resource diagram = input.getResource();\r
- if (diagram != null && session != null) {\r
- Object finalInput = session.syncRequest(new Read<Resource>() {\r
- @Override\r
- public Resource perform(ReadGraph graph) throws DatabaseException {\r
- ModelingResources mr = ModelingResources.getInstance(graph);\r
- return graph.getPossibleObject(diagram, mr.DiagramToComposite);\r
- }\r
- });\r
- if (finalInput != null)\r
- explorer.setRoot(finalInput);\r
- }\r
-\r
- } catch (DatabaseException e) {\r
- ErrorLogger.defaultLogError(e);\r
- }\r
-\r
-// linkWithEditor = new LinkWithEditor();\r
-// getSite().getActionBars().getToolBarManager().add(linkWithEditor);\r
- }\r
-\r
- @Override\r
- public void dispose() {\r
- if (resourceManager != null) {\r
- resourceManager.dispose();\r
- resourceManager = null;\r
- }\r
- super.dispose();\r
- }\r
-\r
- protected EvaluatorData createEvaluatorData(ISessionContext sessionContext) {\r
- EvaluatorData data = new EvaluatorDataImpl();\r
- data.addEvaluator(Resource.class, ModelEvaluators.createResourceEvaluator());\r
- data.addEvaluator(INode.class, ModelEvaluators.createNodeEvaluator());\r
- data.addEvaluator(INode2.class, ModelEvaluators.createNode2Evaluator());\r
- return data;\r
- }\r
-\r
- @Override\r
- public Control getControl() {\r
- return composite;\r
- }\r
-\r
- @Override\r
- public void setFocus() {\r
- explorer.setFocus();\r
- }\r
-\r
- @Override\r
- public void addSelectionChangedListener(ISelectionChangedListener listener) {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- selectionProvider.addSelectionChangedListener(listener);\r
- }\r
-\r
- @Override\r
- public ISelection getSelection() {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- return selectionProvider.getSelection();\r
- }\r
-\r
- @Override\r
- public void removeSelectionChangedListener(ISelectionChangedListener listener) {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- selectionProvider.removeSelectionChangedListener(listener);\r
- }\r
-\r
- @Override\r
- public void setSelection(ISelection selection) {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- selectionProvider.setSelection(selection);\r
- }\r
-\r
- @Override\r
- public void addPostSelectionChangedListener(ISelectionChangedListener listener) {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- selectionProvider.addPostSelectionChangedListener(listener);\r
- }\r
-\r
- @Override\r
- public void removePostSelectionChangedListener(ISelectionChangedListener listener) {\r
- IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);\r
- selectionProvider.removePostSelectionChangedListener(listener);\r
- }\r
-\r
- static class LinkWithEditor extends LinkWithEditorContribution {\r
- public LinkWithEditor() {\r
- super("DiagramOutlinePage.linkWithEditor", Activator.getDefault().getPreferenceStore());\r
- }\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.modeling.ui.diagramEditor;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.part.Page;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.browsing.ui.common.ColumnKeys;
+import org.simantics.browsing.ui.common.ErrorLogger;
+import org.simantics.browsing.ui.common.EvaluatorData;
+import org.simantics.browsing.ui.common.EvaluatorDataImpl;
+import org.simantics.browsing.ui.common.processors.ComparableFactoryResolver;
+import org.simantics.browsing.ui.common.processors.ComparableSelectorQueryProcessor;
+import org.simantics.browsing.ui.common.processors.ImageDecoratorFactoryResolver;
+import org.simantics.browsing.ui.common.processors.ImagerFactoryResolver;
+import org.simantics.browsing.ui.common.processors.LabelDecoratorFactoryResolver;
+import org.simantics.browsing.ui.common.processors.LabelerFactoryResolver;
+import org.simantics.browsing.ui.common.processors.UserSelectedComparableFactoryQueryProcessor;
+import org.simantics.browsing.ui.common.processors.UserSelectedViewpointFactoryQueryProcessor;
+import org.simantics.browsing.ui.common.processors.ViewpointFactoryResolver;
+import org.simantics.browsing.ui.graph.impl.AsyncReadGraphDataSource;
+import org.simantics.browsing.ui.graph.impl.InheritsQueryProcessor;
+import org.simantics.browsing.ui.graph.impl.ReadGraphDataSource;
+import org.simantics.browsing.ui.graph.impl.RelatedObjectsQueryProcessor;
+import org.simantics.browsing.ui.swt.ContextMenuInitializer;
+import org.simantics.browsing.ui.swt.DefaultKeyListener;
+import org.simantics.browsing.ui.swt.DefaultMouseListener;
+import org.simantics.browsing.ui.swt.DefaultSelectionDataResolver;
+import org.simantics.browsing.ui.swt.GraphExplorerFactory;
+import org.simantics.browsing.ui.swt.TypesQueryProcessor;
+import org.simantics.db.AsyncReadGraph;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.management.ISessionContext;
+import org.simantics.db.management.ISessionContextProvider;
+import org.simantics.db.request.Read;
+import org.simantics.modeling.ModelingResources;
+import org.simantics.modeling.ui.Activator;
+import org.simantics.modeling.ui.modelBrowser.ModelEvaluators;
+import org.simantics.modeling.ui.modelBrowser.model.INode;
+import org.simantics.modeling.ui.modelBrowser.model.INode2;
+import org.simantics.structural.ui.menuContributions.LinkWithEditorContribution;
+import org.simantics.ui.workbench.IResourceEditorInput2;
+import org.simantics.utils.datastructures.Function;
+import org.simantics.utils.datastructures.Functions;
+
+/**
+ * TODO: change to use newer contribution mechanisms, get rid of
+ * {@link ModelEvaluators} use.
+ *
+ * @author Tuukka Lehtonen
+ */
+public class DiagramOutlinePage extends Page implements IContentOutlinePage, IPostSelectionProvider {
+
+ ISessionContextProvider sessionContextProvider;
+ IResourceEditorInput2 input;
+ LocalResourceManager resourceManager;
+ Composite composite;
+ GraphExplorer explorer;
+ LinkWithEditor linkWithEditor;
+
+ public DiagramOutlinePage(ISessionContextProvider contextProvider, IResourceEditorInput2 input) {
+ assert contextProvider != null;
+ assert input != null;
+
+ this.sessionContextProvider = contextProvider;
+ this.input = input;
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ resourceManager = new LocalResourceManager(JFaceResources.getResources());
+ composite = new Composite(parent, SWT.NONE);
+ GridLayoutFactory.fillDefaults().applyTo(composite);
+ this.explorer = GraphExplorerFactory.getInstance().selectionDataResolver(new DefaultSelectionDataResolver()).create(composite);
+ Control control = explorer.getControl();
+ ISelectionProvider selectionProvider = (ISelectionProvider)explorer.getAdapter(ISelectionProvider.class);
+ new ContextMenuInitializer("#GraphExplorerPopup").createContextMenu(control, selectionProvider, getSite());
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(control);
+
+ // Consider ENTER presses to simulate mouse left button double clicks
+ Function<String[]> resolver = Functions.constant(ColumnKeys.SINGLE);
+ explorer.addListener(new DefaultKeyListener(sessionContextProvider, explorer, resolver));
+
+ // Default double click handling
+ explorer.addListener(new DefaultMouseListener(explorer));
+
+ ISessionContext sessionContext = sessionContextProvider.getSessionContext();
+ Session session = sessionContext != null ? sessionContext.getSession() : null;
+ EvaluatorData data = null;
+ if (session != null) {
+ data = createEvaluatorData(sessionContext);
+ explorer.setDataSource(new AsyncReadGraphDataSource(session));
+ explorer.setDataSource(new ReadGraphDataSource(session));
+ } else {
+ data = new EvaluatorDataImpl();
+ explorer.removeDataSource(AsyncReadGraph.class);
+ explorer.removeDataSource(ReadGraph.class);
+ }
+
+ explorer.setProcessor(new ComparableFactoryResolver(data));
+ explorer.setProcessor(new ViewpointFactoryResolver(data));
+ explorer.setProcessor(new LabelerFactoryResolver(data));
+ explorer.setProcessor(new ImagerFactoryResolver(data));
+ explorer.setProcessor(new LabelDecoratorFactoryResolver(data));
+ explorer.setProcessor(new ImageDecoratorFactoryResolver(data));
+ explorer.setPrimitiveProcessor(new TypesQueryProcessor());
+ explorer.setPrimitiveProcessor(new InheritsQueryProcessor());
+ explorer.setPrimitiveProcessor(new RelatedObjectsQueryProcessor());
+
+ explorer.setProcessor(new ComparableSelectorQueryProcessor());
+ explorer.setPrimitiveProcessor(new UserSelectedViewpointFactoryQueryProcessor());
+ explorer.setPrimitiveProcessor(new UserSelectedComparableFactoryQueryProcessor());
+
+ try {
+
+ // Look for a proper input resource to give to the model browser.
+ final Resource diagram = input.getResource();
+ if (diagram != null && session != null) {
+ Object finalInput = session.syncRequest(new Read<Resource>() {
+ @Override
+ public Resource perform(ReadGraph graph) throws DatabaseException {
+ ModelingResources mr = ModelingResources.getInstance(graph);
+ return graph.getPossibleObject(diagram, mr.DiagramToComposite);
+ }
+ });
+ if (finalInput != null)
+ explorer.setRoot(finalInput);
+ }
+
+ } catch (DatabaseException e) {
+ ErrorLogger.defaultLogError(e);
+ }
+
+// linkWithEditor = new LinkWithEditor();
+// getSite().getActionBars().getToolBarManager().add(linkWithEditor);
+ }
+
+ @Override
+ public void dispose() {
+ if (resourceManager != null) {
+ resourceManager.dispose();
+ resourceManager = null;
+ }
+ super.dispose();
+ }
+
+ protected EvaluatorData createEvaluatorData(ISessionContext sessionContext) {
+ EvaluatorData data = new EvaluatorDataImpl();
+ data.addEvaluator(Resource.class, ModelEvaluators.createResourceEvaluator());
+ data.addEvaluator(INode.class, ModelEvaluators.createNodeEvaluator());
+ data.addEvaluator(INode2.class, ModelEvaluators.createNode2Evaluator());
+ return data;
+ }
+
+ @Override
+ public Control getControl() {
+ return composite;
+ }
+
+ @Override
+ public void setFocus() {
+ explorer.setFocus();
+ }
+
+ @Override
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ selectionProvider.addSelectionChangedListener(listener);
+ }
+
+ @Override
+ public ISelection getSelection() {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ return selectionProvider.getSelection();
+ }
+
+ @Override
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ selectionProvider.removeSelectionChangedListener(listener);
+ }
+
+ @Override
+ public void setSelection(ISelection selection) {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ selectionProvider.setSelection(selection);
+ }
+
+ @Override
+ public void addPostSelectionChangedListener(ISelectionChangedListener listener) {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ selectionProvider.addPostSelectionChangedListener(listener);
+ }
+
+ @Override
+ public void removePostSelectionChangedListener(ISelectionChangedListener listener) {
+ IPostSelectionProvider selectionProvider = (IPostSelectionProvider)explorer.getAdapter(IPostSelectionProvider.class);
+ selectionProvider.removePostSelectionChangedListener(listener);
+ }
+
+ static class LinkWithEditor extends LinkWithEditorContribution {
+ public LinkWithEditor() {
+ super("DiagramOutlinePage.linkWithEditor", Activator.getDefault().getPreferenceStore());
+ }
+ }
+
+}