]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.ui.diagramEditor.tools;\r
13 \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
18 \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
37 \r
38 public class DiagramToolViewPart extends ViewPart {\r
39 \r
40     private Composite parent;\r
41 \r
42     private final List<DiagramTools> tools = new ArrayList<DiagramTools>();\r
43     private final Map<DiagramTools,Composite> toolComposites = new HashMap<DiagramTools, Composite>();\r
44 \r
45     private ISelectionListener listener;\r
46 \r
47     protected LocalResourceManager resourceManager;\r
48 \r
49     protected FormToolkit formToolkit;\r
50 \r
51     protected ScrolledForm mainForm;\r
52 \r
53     public DiagramToolViewPart() {\r
54 \r
55     }\r
56 \r
57     @Override\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
62 \r
63         listener = new ISelectionListener() {\r
64 \r
65             @Override\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
70                     return;\r
71                 }\r
72                 for (DiagramTools t : tools) {\r
73                     t.setSelection(selection);\r
74                 }\r
75 \r
76             }\r
77         };\r
78         getSite().getPage().addPostSelectionListener(listener);\r
79 \r
80         resourceManager = new LocalResourceManager(JFaceResources.getResources(parent.getDisplay()), parent);\r
81 \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
88 \r
89         // Default set of tools.\r
90         openTool(new AlignTools());\r
91     }\r
92 \r
93     @Override\r
94     public void setFocus() {\r
95         parent.setFocus();\r
96 \r
97     }\r
98 \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
103                 return;\r
104         }\r
105 \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
111 \r
112         tool.createContols(composite, formToolkit, resourceManager);\r
113         group.setClient(composite);\r
114 \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
120 \r
121         group.setExpanded(true);\r
122 \r
123 //        closeButton.addSelectionListener(new SelectionAdapter() {\r
124 //            @Override\r
125 //            public void widgetSelected(SelectionEvent e) {\r
126 //                closeTool(tool);\r
127 //            }\r
128 //        });\r
129 \r
130         tools.add(tool);\r
131         toolComposites.put(tool, group);\r
132         parent.layout(true, true);\r
133 \r
134         tool.setSelection(getSite().getPage().getSelection());\r
135 \r
136     }\r
137 \r
138     private void closeTool(DiagramTools tool) {\r
139         tool.dispose();\r
140         tools.remove(tool);\r
141         toolComposites.remove(tool).dispose();\r
142     }\r
143 \r
144     @Override\r
145     public void dispose() {\r
146         List<DiagramTools> tls = new ArrayList<DiagramTools>();\r
147         tls.addAll(tools);\r
148         for (DiagramTools t : tls) {\r
149             closeTool(t);\r
150         }\r
151         getSite().getPage().removePostSelectionListener(listener);\r
152         listener = null;\r
153         formToolkit.dispose();\r
154         super.dispose();\r
155     }\r
156 \r
157     public static void open(DiagramTools tool) throws PartInitException {\r
158         DiagramToolViewPart wp = (DiagramToolViewPart)WorkbenchUtils.showView("org.simantics.modeling.ui.diagramtool");\r
159         wp.openTool(tool);\r
160     }\r
161 \r
162 }\r