]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/tools/AlignTools.java
Remove usage of deprecated SimanticsUI-methods
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / tools / AlignTools.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.List;
16
17 import org.eclipse.jface.layout.GridDataFactory;
18 import org.eclipse.jface.layout.GridLayoutFactory;
19 import org.eclipse.jface.resource.ImageDescriptor;
20 import org.eclipse.jface.resource.LocalResourceManager;
21 import org.eclipse.jface.viewers.ISelection;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.SelectionAdapter;
24 import org.eclipse.swt.events.SelectionEvent;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.ui.forms.widgets.FormToolkit;
28 import org.simantics.Simantics;
29 import org.simantics.db.ReadGraph;
30 import org.simantics.db.Resource;
31 import org.simantics.db.common.request.ReadRequest;
32 import org.simantics.db.exception.DatabaseException;
33 import org.simantics.diagram.elements.ElementTransforms;
34 import org.simantics.diagram.elements.ElementTransforms.SIDE;
35 import org.simantics.diagram.stubs.DiagramResource;
36 import org.simantics.modeling.ui.Activator;
37 import org.simantics.ui.utils.ResourceAdaptionUtils;
38
39 /**
40  * Diagramming alignment tools
41  * 
42  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
43  */
44 public class AlignTools implements DiagramTools {
45
46     private Resource selection[] = new Resource[0];
47
48     Button alignLeft;
49     Button alignVertButton;
50     Button alignRight;
51     Button alignTop;
52     Button alignHorizButton;
53     Button alignBottom;
54     Button distLeft;
55     Button distVert;
56     Button distRight;
57     Button distVertBetween;
58     Button distTop;
59     Button distHoriz;
60     Button distBottom;
61     Button distHorizBetween;
62
63     Button rotateCW;
64     Button rotateCCW;
65     Button flipX;
66     Button flipY;
67
68
69
70     @Override
71     public String getName() {
72         return "Align";
73     }
74
75
76     @Override
77     public void createContols(Composite parent, FormToolkit toolkit, LocalResourceManager resourceManager) {
78         parent.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 0).spacing(1,1).create());
79                 
80                 Composite alignComposite = new Composite(parent, SWT.NONE);
81                 Composite distributeComposite = new Composite(parent, SWT.NONE);
82                 Composite rotateComposite = new Composite(parent, SWT.NONE);
83                 alignComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(true).margins(0, 2).spacing(0, 0).create());
84                 distributeComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(4).equalWidth(true).margins(0, 2).spacing(0, 0).create());
85                 rotateComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true).margins(0, 2).spacing(0, 0).create());
86
87         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignComposite);
88         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distributeComposite);
89         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateComposite);
90
91         alignLeft = toolkit.createButton(alignComposite, "", SWT.PUSH);
92         //alignLeft.setText("Left");
93         alignLeft.setToolTipText("Align Left Edges");
94         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignLeft);
95
96         alignVertButton = toolkit.createButton(alignComposite, "", SWT.PUSH);
97         //alignVertButton.setText("Middle");
98         alignVertButton.setToolTipText("Center on Vertical Axis");
99         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignVertButton);
100
101         alignRight = toolkit.createButton(alignComposite, "", SWT.PUSH);
102         //alignRight.setText("Right");
103         alignRight.setToolTipText("Align Right Edges");
104         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignRight);
105
106         alignTop = toolkit.createButton(alignComposite, "", SWT.PUSH);
107         //alignTop.setText("Top");
108         alignTop.setToolTipText("Align Top Edges");
109         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignTop);
110
111         alignHorizButton = toolkit.createButton(alignComposite, "", SWT.PUSH);
112         //alignHorizButton.setText("Middle");
113         alignHorizButton.setToolTipText("Center on Horizontal Axis");
114         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignHorizButton);
115
116         alignBottom = toolkit.createButton(alignComposite, "", SWT.PUSH);
117         //alignBottom.setText("Bottom");
118         alignBottom.setToolTipText("Align Bottom Edges");
119         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignBottom);
120
121         distLeft = toolkit.createButton(distributeComposite, "", SWT.PUSH);
122         //distLeft.setText("Left");
123         distLeft.setToolTipText("Distribute Left Edges Equidistantly");
124         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distLeft);
125
126         distVert = toolkit.createButton(distributeComposite, "", SWT.PUSH);
127         //distVert.setText("Middle");
128         distVert.setToolTipText("Distribute Centers Equidistantly Horizontally");
129         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVert);
130
131         distRight = toolkit.createButton(distributeComposite, "", SWT.PUSH);
132         //distRight.setText("Right");
133         distRight.setToolTipText("Distribute Right Edges Equidistantly");
134         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distRight);
135
136         distVertBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);
137         //distVertBetween.setText("Between");
138         distVertBetween.setToolTipText("Make Horizontal Gaps Between Objects Equal");
139         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVertBetween);
140
141         distTop = toolkit.createButton(distributeComposite, "", SWT.PUSH);
142         //distTop.setText("Top");
143         distTop.setToolTipText("Distribute Top Edges Equidistantly");
144         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distTop);
145
146         distHoriz = toolkit.createButton(distributeComposite, "", SWT.PUSH);
147         //distHoriz.setText("Middle");
148         distHoriz.setToolTipText("Distribute Centers Equidistantly Vertically");
149         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHoriz);
150
151         distBottom = toolkit.createButton(distributeComposite, "", SWT.PUSH);
152         //distBottom.setText("Bottom");
153         distBottom.setToolTipText("Distribute Bottom Edges Equidistantly");
154         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distBottom);
155
156         distHorizBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);
157         //distHorizBetween.setText("Between");
158         distHorizBetween.setToolTipText("Make Vertical Gaps Between Objects Equal");
159         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHorizBetween);
160
161         rotateCCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);
162         //rotateCCW.setText("rotate left");
163         rotateCCW.setToolTipText("Rotate Counterclockwise");
164         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCCW);
165
166         rotateCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);
167         //rotateCW.setText("rotate right");
168         rotateCW.setToolTipText("Rotate Clockwise");
169         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCW);
170
171         flipX = toolkit.createButton(rotateComposite, "", SWT.PUSH);
172         //flipX.setText("flip");
173         flipX.setToolTipText("Flip About Horizontal Axis");
174         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipX);
175
176         flipY = toolkit.createButton(rotateComposite, "", SWT.PUSH);
177         //flipY.setText("mirror");
178         flipY.setToolTipText("Flip About Vertical Axis");
179         GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipY);
180
181         alignVertButton.addSelectionListener(new SelectionAdapter() {
182             @Override
183             public void widgetSelected(SelectionEvent e) {
184                 ElementTransforms.align(getSelected(), SIDE.VERT);
185             }
186         });
187
188         alignHorizButton.addSelectionListener(new SelectionAdapter() {
189             @Override
190             public void widgetSelected(SelectionEvent e) {
191                 ElementTransforms.align(getSelected(),SIDE.HORIZ);
192             }
193         });
194
195         alignLeft.addSelectionListener(new SelectionAdapter() {
196             @Override
197             public void widgetSelected(SelectionEvent e) {
198                 ElementTransforms.align(getSelected(),SIDE.LEFT);
199             }
200         });
201
202         alignRight.addSelectionListener(new SelectionAdapter() {
203             @Override
204             public void widgetSelected(SelectionEvent e) {
205                 ElementTransforms.align(getSelected(),SIDE.RIGHT);
206             }
207         });
208
209         alignTop.addSelectionListener(new SelectionAdapter() {
210             @Override
211             public void widgetSelected(SelectionEvent e) {
212                 ElementTransforms.align(getSelected(),SIDE.TOP);
213             }
214         });
215
216         alignBottom.addSelectionListener(new SelectionAdapter() {
217             @Override
218             public void widgetSelected(SelectionEvent e) {
219                 ElementTransforms.align(getSelected(),SIDE.BOTTOM);
220             }
221         });
222
223         distLeft.addSelectionListener(new SelectionAdapter() {
224             @Override
225             public void widgetSelected(SelectionEvent e) {
226                 ElementTransforms.dist(getSelected(),SIDE.LEFT);
227             }
228         });
229
230         distVert.addSelectionListener(new SelectionAdapter() {
231             @Override
232             public void widgetSelected(SelectionEvent e) {
233                 ElementTransforms.dist(getSelected(),SIDE.VERT);
234             }
235         });
236
237         distRight.addSelectionListener(new SelectionAdapter() {
238             @Override
239             public void widgetSelected(SelectionEvent e) {
240                 ElementTransforms.dist(getSelected(),SIDE.RIGHT);
241             }
242         });
243
244         distVertBetween.addSelectionListener(new SelectionAdapter() {
245             @Override
246             public void widgetSelected(SelectionEvent e) {
247                 ElementTransforms.dist(getSelected(),SIDE.VERT_BTW);
248             }
249         });
250
251         distTop.addSelectionListener(new SelectionAdapter() {
252             @Override
253             public void widgetSelected(SelectionEvent e) {
254                 ElementTransforms.dist(getSelected(),SIDE.TOP);
255             }
256         });
257
258         distHoriz.addSelectionListener(new SelectionAdapter() {
259             @Override
260             public void widgetSelected(SelectionEvent e) {
261                 ElementTransforms.dist(getSelected(),SIDE.HORIZ);
262             }
263         });
264
265         distBottom.addSelectionListener(new SelectionAdapter() {
266             @Override
267             public void widgetSelected(SelectionEvent e) {
268                 ElementTransforms.dist(getSelected(),SIDE.BOTTOM);
269             }
270         });
271
272         distHorizBetween.addSelectionListener(new SelectionAdapter() {
273             @Override
274             public void widgetSelected(SelectionEvent e) {
275                 ElementTransforms.dist(getSelected(),SIDE.HORIZ_BTW);
276             }
277         });
278
279         rotateCW.addSelectionListener(new SelectionAdapter() {
280             @Override
281             public void widgetSelected(SelectionEvent e) {
282                 ElementTransforms.rotate(getSelected(),true);
283             }
284         });
285
286         rotateCCW.addSelectionListener(new SelectionAdapter() {
287             @Override
288             public void widgetSelected(SelectionEvent e) {
289                 ElementTransforms.rotate(getSelected(),false);
290             }
291         });
292
293         flipX.addSelectionListener(new SelectionAdapter() {
294             @Override
295             public void widgetSelected(SelectionEvent e) {
296                 ElementTransforms.flip(getSelected(),true);
297             }
298         });
299
300         flipY.addSelectionListener(new SelectionAdapter() {
301             @Override
302             public void widgetSelected(SelectionEvent e) {
303                 ElementTransforms.flip(getSelected(),false);
304             }
305         });
306
307         alignLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_left.png"))));
308         alignVertButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_center.png"))));
309         alignRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_right.png"))));
310         alignTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_top.png"))));
311         alignHorizButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_middle.png"))));
312         alignBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_bottom.png"))));
313
314         distLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_left.png"))));
315         distVert.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_center.png"))));
316         distRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_right.png"))));
317         distVertBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_horiz.png"))));
318         distTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_top.png"))));
319         distHoriz.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_middle.png"))));
320         distBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_bottom.png"))));
321         distHorizBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_vert.png"))));
322
323         rotateCCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_left.png"))));
324         rotateCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_right.png"))));
325         flipX.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_x.png"))));
326         flipY.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_y.png"))));
327
328         updateUI();
329     }
330
331     @Override
332     public void setSelection(ISelection s) {
333         this.selection = ResourceAdaptionUtils.toResources(s);
334         try {
335             Simantics.getSession().syncRequest(new ReadRequest() {
336
337                 @Override
338                 public void run(ReadGraph graph) throws DatabaseException {
339                     DiagramResource dr = DiagramResource.getInstance(graph);
340                     List<Resource> sel = new ArrayList<Resource>();
341                     for (Resource r : selection) {
342                         if(graph.isInstanceOf(r, dr.Element) && !graph.isInstanceOf(r, dr.Connection) /*&& !graph.isInstanceOf(r, dr.Monitor)*/) {
343                             sel.add(r);
344                         }
345                     }
346                     selection = sel.toArray(new Resource[sel.size()]);
347
348                 }
349             });
350
351             updateUI();
352         } catch (DatabaseException e) {
353             // TODO Auto-generated catch block
354             e.printStackTrace();
355         }
356     }
357
358     private void updateUI() {
359         boolean showAlign = selection.length >= 2;
360         boolean showDist = selection.length >= 3;
361         boolean showRotate = selection.length >= 1;
362         alignBottom.setEnabled(showAlign);
363         alignHorizButton.setEnabled(showAlign);
364         alignLeft.setEnabled(showAlign);
365         alignRight.setEnabled(showAlign);
366         alignTop.setEnabled(showAlign);
367         alignVertButton.setEnabled(showAlign);
368
369         distBottom.setEnabled(showDist);
370         distHoriz.setEnabled(showDist);
371         distHorizBetween.setEnabled(showDist);
372         distLeft.setEnabled(showDist);
373         distRight.setEnabled(showDist);
374         distTop.setEnabled(showDist);
375         distVert.setEnabled(showDist);
376         distVertBetween.setEnabled(showDist);
377
378         rotateCCW.setEnabled(showRotate);
379         rotateCW.setEnabled(showRotate);
380         flipX.setEnabled(showRotate);
381         flipY.setEnabled(showRotate);
382     }
383
384     @Override
385     public void dispose() {
386
387     }
388
389     private Resource[] getSelected() {
390         return selection;
391     }
392
393 }