]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/tools/DiagramToolViewPart.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / tools / DiagramToolViewPart.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/tools/DiagramToolViewPart.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/tools/DiagramToolViewPart.java
new file mode 100644 (file)
index 0000000..c415050
--- /dev/null
@@ -0,0 +1,162 @@
+/*******************************************************************************\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.tools;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\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.ISelection;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.ToolBar;\r
+import org.eclipse.ui.ISelectionListener;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.forms.widgets.FormToolkit;\r
+import org.eclipse.ui.forms.widgets.ScrolledForm;\r
+import org.eclipse.ui.forms.widgets.Section;\r
+import org.eclipse.ui.part.ViewPart;\r
+import org.simantics.modeling.ui.diagramEditor.DiagramEditor;\r
+import org.simantics.utils.ui.workbench.WorkbenchUtils;\r
+\r
+public class DiagramToolViewPart extends ViewPart {\r
+\r
+    private Composite parent;\r
+\r
+    private final List<DiagramTools> tools = new ArrayList<DiagramTools>();\r
+    private final Map<DiagramTools,Composite> toolComposites = new HashMap<DiagramTools, Composite>();\r
+\r
+    private ISelectionListener listener;\r
+\r
+    protected LocalResourceManager resourceManager;\r
+\r
+    protected FormToolkit formToolkit;\r
+\r
+    protected ScrolledForm mainForm;\r
+\r
+    public DiagramToolViewPart() {\r
+\r
+    }\r
+\r
+    @Override\r
+    public void createPartControl(Composite parent) {\r
+        this.parent = parent;\r
+        this.parent.setLayout(new FillLayout());\r
+        //this.parent.setLayout(new GridLayout(1, true));\r
+\r
+        listener = new ISelectionListener() {\r
+\r
+            @Override\r
+            public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
+                // FIXME: selection logic must be improved.\r
+                // We want to disable tools, if selection does not come from DiagramEditor, or its outline\r
+                if (!(part instanceof DiagramEditor)) {\r
+                    return;\r
+                }\r
+                for (DiagramTools t : tools) {\r
+                    t.setSelection(selection);\r
+                }\r
+\r
+            }\r
+        };\r
+        getSite().getPage().addPostSelectionListener(listener);\r
+\r
+        resourceManager = new LocalResourceManager(JFaceResources.getResources(parent.getDisplay()), parent);\r
+\r
+        formToolkit = new FormToolkit(parent.getDisplay());\r
+        formToolkit.adapt(parent);\r
+        mainForm = formToolkit.createScrolledForm(parent);\r
+        mainForm.getBody().setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 5).spacing(1,1).create());\r
+        formToolkit.decorateFormHeading(mainForm.getForm());\r
+        mainForm.setText("Tools");\r
+\r
+        // Default set of tools.\r
+        openTool(new AlignTools());\r
+    }\r
+\r
+    @Override\r
+    public void setFocus() {\r
+        parent.setFocus();\r
+\r
+    }\r
+\r
+    public void openTool(final DiagramTools tool) {\r
+        // Allow opening tool only once.\r
+        for (DiagramTools t : tools) {\r
+            if (t.getClass().equals(tool.getClass()))\r
+                return;\r
+        }\r
+\r
+        Section group = formToolkit.createSection(mainForm.getBody(), Section.TITLE_BAR | Section.TWISTIE);\r
+        group.setText(tool.getName());\r
+        GridData data = new GridData(SWT.FILL, SWT.TOP, true, false);\r
+        group.setLayoutData(data);\r
+        Composite composite = formToolkit.createComposite(group);\r
+\r
+        tool.createContols(composite, formToolkit, resourceManager);\r
+        group.setClient(composite);\r
+\r
+        ToolBar toolBar = new ToolBar(group, SWT.NO_FOCUS | SWT.FLAT);\r
+//        ToolItem closeButton = new ToolItem(toolBar, SWT.PUSH);\r
+//        closeButton.setToolTipText("Close " + tool.getName() + " Tools");\r
+//        closeButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/silk/cross.png"))));\r
+        group.setTextClient(toolBar);\r
+\r
+        group.setExpanded(true);\r
+\r
+//        closeButton.addSelectionListener(new SelectionAdapter() {\r
+//            @Override\r
+//            public void widgetSelected(SelectionEvent e) {\r
+//                closeTool(tool);\r
+//            }\r
+//        });\r
+\r
+        tools.add(tool);\r
+        toolComposites.put(tool, group);\r
+        parent.layout(true, true);\r
+\r
+        tool.setSelection(getSite().getPage().getSelection());\r
+\r
+    }\r
+\r
+    private void closeTool(DiagramTools tool) {\r
+        tool.dispose();\r
+        tools.remove(tool);\r
+        toolComposites.remove(tool).dispose();\r
+    }\r
+\r
+    @Override\r
+    public void dispose() {\r
+        List<DiagramTools> tls = new ArrayList<DiagramTools>();\r
+        tls.addAll(tools);\r
+        for (DiagramTools t : tls) {\r
+            closeTool(t);\r
+        }\r
+        getSite().getPage().removePostSelectionListener(listener);\r
+        listener = null;\r
+        formToolkit.dispose();\r
+        super.dispose();\r
+    }\r
+\r
+    public static void open(DiagramTools tool) throws PartInitException {\r
+        DiagramToolViewPart wp = (DiagramToolViewPart)WorkbenchUtils.showView("org.simantics.modeling.ui.diagramtool");\r
+        wp.openTool(tool);\r
+    }\r
+\r
+}\r