1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.modeling.ui.diagramEditor.tools;
\r
14 import java.util.ArrayList;
\r
15 import java.util.HashMap;
\r
16 import java.util.List;
\r
17 import java.util.Map;
\r
19 import org.eclipse.jface.layout.GridLayoutFactory;
\r
20 import org.eclipse.jface.resource.JFaceResources;
\r
21 import org.eclipse.jface.resource.LocalResourceManager;
\r
22 import org.eclipse.jface.viewers.ISelection;
\r
23 import org.eclipse.swt.SWT;
\r
24 import org.eclipse.swt.layout.FillLayout;
\r
25 import org.eclipse.swt.layout.GridData;
\r
26 import org.eclipse.swt.widgets.Composite;
\r
27 import org.eclipse.swt.widgets.ToolBar;
\r
28 import org.eclipse.ui.ISelectionListener;
\r
29 import org.eclipse.ui.IWorkbenchPart;
\r
30 import org.eclipse.ui.PartInitException;
\r
31 import org.eclipse.ui.forms.widgets.FormToolkit;
\r
32 import org.eclipse.ui.forms.widgets.ScrolledForm;
\r
33 import org.eclipse.ui.forms.widgets.Section;
\r
34 import org.eclipse.ui.part.ViewPart;
\r
35 import org.simantics.modeling.ui.diagramEditor.DiagramEditor;
\r
36 import org.simantics.utils.ui.workbench.WorkbenchUtils;
\r
38 public class DiagramToolViewPart extends ViewPart {
\r
40 private Composite parent;
\r
42 private final List<DiagramTools> tools = new ArrayList<DiagramTools>();
\r
43 private final Map<DiagramTools,Composite> toolComposites = new HashMap<DiagramTools, Composite>();
\r
45 private ISelectionListener listener;
\r
47 protected LocalResourceManager resourceManager;
\r
49 protected FormToolkit formToolkit;
\r
51 protected ScrolledForm mainForm;
\r
53 public DiagramToolViewPart() {
\r
58 public void createPartControl(Composite parent) {
\r
59 this.parent = parent;
\r
60 this.parent.setLayout(new FillLayout());
\r
61 //this.parent.setLayout(new GridLayout(1, true));
\r
63 listener = new ISelectionListener() {
\r
66 public void selectionChanged(IWorkbenchPart part, ISelection selection) {
\r
67 // FIXME: selection logic must be improved.
\r
68 // We want to disable tools, if selection does not come from DiagramEditor, or its outline
\r
69 if (!(part instanceof DiagramEditor)) {
\r
72 for (DiagramTools t : tools) {
\r
73 t.setSelection(selection);
\r
78 getSite().getPage().addPostSelectionListener(listener);
\r
80 resourceManager = new LocalResourceManager(JFaceResources.getResources(parent.getDisplay()), parent);
\r
82 formToolkit = new FormToolkit(parent.getDisplay());
\r
83 formToolkit.adapt(parent);
\r
84 mainForm = formToolkit.createScrolledForm(parent);
\r
85 mainForm.getBody().setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 5).spacing(1,1).create());
\r
86 formToolkit.decorateFormHeading(mainForm.getForm());
\r
87 mainForm.setText("Tools");
\r
89 // Default set of tools.
\r
90 openTool(new AlignTools());
\r
94 public void setFocus() {
\r
99 public void openTool(final DiagramTools tool) {
\r
100 // Allow opening tool only once.
\r
101 for (DiagramTools t : tools) {
\r
102 if (t.getClass().equals(tool.getClass()))
\r
106 Section group = formToolkit.createSection(mainForm.getBody(), Section.TITLE_BAR | Section.TWISTIE);
\r
107 group.setText(tool.getName());
\r
108 GridData data = new GridData(SWT.FILL, SWT.TOP, true, false);
\r
109 group.setLayoutData(data);
\r
110 Composite composite = formToolkit.createComposite(group);
\r
112 tool.createContols(composite, formToolkit, resourceManager);
\r
113 group.setClient(composite);
\r
115 ToolBar toolBar = new ToolBar(group, SWT.NO_FOCUS | SWT.FLAT);
\r
116 // ToolItem closeButton = new ToolItem(toolBar, SWT.PUSH);
\r
117 // closeButton.setToolTipText("Close " + tool.getName() + " Tools");
\r
118 // closeButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/silk/cross.png"))));
\r
119 group.setTextClient(toolBar);
\r
121 group.setExpanded(true);
\r
123 // closeButton.addSelectionListener(new SelectionAdapter() {
\r
125 // public void widgetSelected(SelectionEvent e) {
\r
126 // closeTool(tool);
\r
131 toolComposites.put(tool, group);
\r
132 parent.layout(true, true);
\r
134 tool.setSelection(getSite().getPage().getSelection());
\r
138 private void closeTool(DiagramTools tool) {
\r
140 tools.remove(tool);
\r
141 toolComposites.remove(tool).dispose();
\r
145 public void dispose() {
\r
146 List<DiagramTools> tls = new ArrayList<DiagramTools>();
\r
148 for (DiagramTools t : tls) {
\r
151 getSite().getPage().removePostSelectionListener(listener);
\r
153 formToolkit.dispose();
\r
157 public static void open(DiagramTools tool) throws PartInitException {
\r
158 DiagramToolViewPart wp = (DiagramToolViewPart)WorkbenchUtils.showView("org.simantics.modeling.ui.diagramtool");
\r