]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/tools/DiagramToolViewPart.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / tools / DiagramToolViewPart.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.modeling.ui.diagramEditor.tools;
13
14 import java.util.ArrayList;
15 import java.util.HashMap;
16 import java.util.List;
17 import java.util.Map;
18
19 import org.eclipse.jface.layout.GridLayoutFactory;
20 import org.eclipse.jface.resource.JFaceResources;
21 import org.eclipse.jface.resource.LocalResourceManager;
22 import org.eclipse.jface.viewers.ISelection;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.layout.FillLayout;
25 import org.eclipse.swt.layout.GridData;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.ToolBar;
28 import org.eclipse.ui.ISelectionListener;
29 import org.eclipse.ui.IWorkbenchPart;
30 import org.eclipse.ui.PartInitException;
31 import org.eclipse.ui.forms.widgets.FormToolkit;
32 import org.eclipse.ui.forms.widgets.ScrolledForm;
33 import org.eclipse.ui.forms.widgets.Section;
34 import org.eclipse.ui.part.ViewPart;
35 import org.simantics.modeling.ui.diagramEditor.DiagramEditor;
36 import org.simantics.utils.ui.workbench.WorkbenchUtils;
37
38 public class DiagramToolViewPart extends ViewPart {
39
40     private Composite parent;
41
42     private final List<DiagramTools> tools = new ArrayList<DiagramTools>();
43     private final Map<DiagramTools,Composite> toolComposites = new HashMap<DiagramTools, Composite>();
44
45     private ISelectionListener listener;
46
47     protected LocalResourceManager resourceManager;
48
49     protected FormToolkit formToolkit;
50
51     protected ScrolledForm mainForm;
52
53     public DiagramToolViewPart() {
54
55     }
56
57     @Override
58     public void createPartControl(Composite parent) {
59         this.parent = parent;
60         this.parent.setLayout(new FillLayout());
61         //this.parent.setLayout(new GridLayout(1, true));
62
63         listener = new ISelectionListener() {
64
65             @Override
66             public void selectionChanged(IWorkbenchPart part, ISelection selection) {
67                 // FIXME: selection logic must be improved.
68                 // We want to disable tools, if selection does not come from DiagramEditor, or its outline
69                 if (!(part instanceof DiagramEditor)) {
70                     return;
71                 }
72                 for (DiagramTools t : tools) {
73                     t.setSelection(selection);
74                 }
75
76             }
77         };
78         getSite().getPage().addPostSelectionListener(listener);
79
80         resourceManager = new LocalResourceManager(JFaceResources.getResources(parent.getDisplay()), parent);
81
82         formToolkit = new FormToolkit(parent.getDisplay());
83         formToolkit.adapt(parent);
84         mainForm = formToolkit.createScrolledForm(parent);
85         mainForm.getBody().setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 5).spacing(1,1).create());
86         formToolkit.decorateFormHeading(mainForm.getForm());
87         mainForm.setText("Tools");
88
89         // Default set of tools.
90         openTool(new AlignTools());
91     }
92
93     @Override
94     public void setFocus() {
95         parent.setFocus();
96
97     }
98
99     public void openTool(final DiagramTools tool) {
100         // Allow opening tool only once.
101         for (DiagramTools t : tools) {
102             if (t.getClass().equals(tool.getClass()))
103                 return;
104         }
105
106         Section group = formToolkit.createSection(mainForm.getBody(), Section.TITLE_BAR | Section.TWISTIE);
107         group.setText(tool.getName());
108         GridData data = new GridData(SWT.FILL, SWT.TOP, true, false);
109         group.setLayoutData(data);
110         Composite composite = formToolkit.createComposite(group);
111
112         tool.createContols(composite, formToolkit, resourceManager);
113         group.setClient(composite);
114
115         ToolBar toolBar = new ToolBar(group, SWT.NO_FOCUS | SWT.FLAT);
116 //        ToolItem closeButton = new ToolItem(toolBar, SWT.PUSH);
117 //        closeButton.setToolTipText("Close " + tool.getName() + " Tools");
118 //        closeButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/silk/cross.png"))));
119         group.setTextClient(toolBar);
120
121         group.setExpanded(true);
122
123 //        closeButton.addSelectionListener(new SelectionAdapter() {
124 //            @Override
125 //            public void widgetSelected(SelectionEvent e) {
126 //                closeTool(tool);
127 //            }
128 //        });
129
130         tools.add(tool);
131         toolComposites.put(tool, group);
132         parent.layout(true, true);
133
134         tool.setSelection(getSite().getPage().getSelection());
135
136     }
137
138     private void closeTool(DiagramTools tool) {
139         tool.dispose();
140         tools.remove(tool);
141         toolComposites.remove(tool).dispose();
142     }
143
144     @Override
145     public void dispose() {
146         List<DiagramTools> tls = new ArrayList<DiagramTools>();
147         tls.addAll(tools);
148         for (DiagramTools t : tls) {
149             closeTool(t);
150         }
151         getSite().getPage().removePostSelectionListener(listener);
152         listener = null;
153         formToolkit.dispose();
154         super.dispose();
155     }
156
157     public static void open(DiagramTools tool) throws PartInitException {
158         DiagramToolViewPart wp = (DiagramToolViewPart)WorkbenchUtils.showView("org.simantics.modeling.ui.diagramtool");
159         wp.openTool(tool);
160     }
161
162 }