--- /dev/null
+/*******************************************************************************\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