-/*******************************************************************************\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.List;\r
-\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.jface.resource.ImageDescriptor;\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.events.SelectionAdapter;\r
-import org.eclipse.swt.events.SelectionEvent;\r
-import org.eclipse.swt.widgets.Button;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.forms.widgets.FormToolkit;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.ReadRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.diagram.elements.ElementTransforms;\r
-import org.simantics.diagram.elements.ElementTransforms.SIDE;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.modeling.ui.Activator;\r
-import org.simantics.ui.SimanticsUI;\r
-import org.simantics.ui.utils.ResourceAdaptionUtils;\r
-\r
-/**\r
- * Diagramming alignment tools\r
- * \r
- * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
- */\r
-public class AlignTools implements DiagramTools {\r
-\r
- private Resource selection[] = new Resource[0];\r
-\r
- Button alignLeft;\r
- Button alignVertButton;\r
- Button alignRight;\r
- Button alignTop;\r
- Button alignHorizButton;\r
- Button alignBottom;\r
- Button distLeft;\r
- Button distVert;\r
- Button distRight;\r
- Button distVertBetween;\r
- Button distTop;\r
- Button distHoriz;\r
- Button distBottom;\r
- Button distHorizBetween;\r
-\r
- Button rotateCW;\r
- Button rotateCCW;\r
- Button flipX;\r
- Button flipY;\r
-\r
-\r
-\r
- @Override\r
- public String getName() {\r
- return "Align";\r
- }\r
-\r
-\r
- @Override\r
- public void createContols(Composite parent, FormToolkit toolkit, LocalResourceManager resourceManager) {\r
- parent.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 0).spacing(1,1).create());\r
- \r
- Composite alignComposite = new Composite(parent, SWT.NONE);\r
- Composite distributeComposite = new Composite(parent, SWT.NONE);\r
- Composite rotateComposite = new Composite(parent, SWT.NONE);\r
- alignComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(true).margins(0, 2).spacing(0, 0).create());\r
- distributeComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(4).equalWidth(true).margins(0, 2).spacing(0, 0).create());\r
- rotateComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true).margins(0, 2).spacing(0, 0).create());\r
-\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignComposite);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distributeComposite);\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateComposite);\r
-\r
- alignLeft = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignLeft.setText("Left");\r
- alignLeft.setToolTipText("Align Left Edges");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignLeft);\r
-\r
- alignVertButton = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignVertButton.setText("Middle");\r
- alignVertButton.setToolTipText("Center on Vertical Axis");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignVertButton);\r
-\r
- alignRight = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignRight.setText("Right");\r
- alignRight.setToolTipText("Align Right Edges");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignRight);\r
-\r
- alignTop = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignTop.setText("Top");\r
- alignTop.setToolTipText("Align Top Edges");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignTop);\r
-\r
- alignHorizButton = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignHorizButton.setText("Middle");\r
- alignHorizButton.setToolTipText("Center on Horizontal Axis");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignHorizButton);\r
-\r
- alignBottom = toolkit.createButton(alignComposite, "", SWT.PUSH);\r
- //alignBottom.setText("Bottom");\r
- alignBottom.setToolTipText("Align Bottom Edges");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignBottom);\r
-\r
- distLeft = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distLeft.setText("Left");\r
- distLeft.setToolTipText("Distribute Left Edges Equidistantly");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distLeft);\r
-\r
- distVert = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distVert.setText("Middle");\r
- distVert.setToolTipText("Distribute Centers Equidistantly Horizontally");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVert);\r
-\r
- distRight = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distRight.setText("Right");\r
- distRight.setToolTipText("Distribute Right Edges Equidistantly");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distRight);\r
-\r
- distVertBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distVertBetween.setText("Between");\r
- distVertBetween.setToolTipText("Make Horizontal Gaps Between Objects Equal");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVertBetween);\r
-\r
- distTop = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distTop.setText("Top");\r
- distTop.setToolTipText("Distribute Top Edges Equidistantly");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distTop);\r
-\r
- distHoriz = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distHoriz.setText("Middle");\r
- distHoriz.setToolTipText("Distribute Centers Equidistantly Vertically");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHoriz);\r
-\r
- distBottom = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distBottom.setText("Bottom");\r
- distBottom.setToolTipText("Distribute Bottom Edges Equidistantly");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distBottom);\r
-\r
- distHorizBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);\r
- //distHorizBetween.setText("Between");\r
- distHorizBetween.setToolTipText("Make Vertical Gaps Between Objects Equal");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHorizBetween);\r
-\r
- rotateCCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);\r
- //rotateCCW.setText("rotate left");\r
- rotateCCW.setToolTipText("Rotate Counterclockwise");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCCW);\r
-\r
- rotateCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);\r
- //rotateCW.setText("rotate right");\r
- rotateCW.setToolTipText("Rotate Clockwise");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCW);\r
-\r
- flipX = toolkit.createButton(rotateComposite, "", SWT.PUSH);\r
- //flipX.setText("flip");\r
- flipX.setToolTipText("Flip About Horizontal Axis");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipX);\r
-\r
- flipY = toolkit.createButton(rotateComposite, "", SWT.PUSH);\r
- //flipY.setText("mirror");\r
- flipY.setToolTipText("Flip About Vertical Axis");\r
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipY);\r
-\r
- alignVertButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(), SIDE.VERT);\r
- }\r
- });\r
-\r
- alignHorizButton.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(),SIDE.HORIZ);\r
- }\r
- });\r
-\r
- alignLeft.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(),SIDE.LEFT);\r
- }\r
- });\r
-\r
- alignRight.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(),SIDE.RIGHT);\r
- }\r
- });\r
-\r
- alignTop.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(),SIDE.TOP);\r
- }\r
- });\r
-\r
- alignBottom.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.align(getSelected(),SIDE.BOTTOM);\r
- }\r
- });\r
-\r
- distLeft.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.LEFT);\r
- }\r
- });\r
-\r
- distVert.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.VERT);\r
- }\r
- });\r
-\r
- distRight.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.RIGHT);\r
- }\r
- });\r
-\r
- distVertBetween.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.VERT_BTW);\r
- }\r
- });\r
-\r
- distTop.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.TOP);\r
- }\r
- });\r
-\r
- distHoriz.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.HORIZ);\r
- }\r
- });\r
-\r
- distBottom.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.BOTTOM);\r
- }\r
- });\r
-\r
- distHorizBetween.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.dist(getSelected(),SIDE.HORIZ_BTW);\r
- }\r
- });\r
-\r
- rotateCW.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.rotate(getSelected(),true);\r
- }\r
- });\r
-\r
- rotateCCW.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.rotate(getSelected(),false);\r
- }\r
- });\r
-\r
- flipX.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.flip(getSelected(),true);\r
- }\r
- });\r
-\r
- flipY.addSelectionListener(new SelectionAdapter() {\r
- @Override\r
- public void widgetSelected(SelectionEvent e) {\r
- ElementTransforms.flip(getSelected(),false);\r
- }\r
- });\r
-\r
- alignLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_left.png"))));\r
- alignVertButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_center.png"))));\r
- alignRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_right.png"))));\r
- alignTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_top.png"))));\r
- alignHorizButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_middle.png"))));\r
- alignBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_bottom.png"))));\r
-\r
- distLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_left.png"))));\r
- distVert.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_center.png"))));\r
- distRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_right.png"))));\r
- distVertBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_horiz.png"))));\r
- distTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_top.png"))));\r
- distHoriz.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_middle.png"))));\r
- distBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_bottom.png"))));\r
- distHorizBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_vert.png"))));\r
-\r
- rotateCCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_left.png"))));\r
- rotateCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_right.png"))));\r
- flipX.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_x.png"))));\r
- flipY.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_y.png"))));\r
-\r
- updateUI();\r
- }\r
-\r
- @Override\r
- public void setSelection(ISelection s) {\r
- this.selection = ResourceAdaptionUtils.toResources(s);\r
- try {\r
- SimanticsUI.getSession().syncRequest(new ReadRequest() {\r
-\r
- @Override\r
- public void run(ReadGraph graph) throws DatabaseException {\r
- DiagramResource dr = DiagramResource.getInstance(graph);\r
- List<Resource> sel = new ArrayList<Resource>();\r
- for (Resource r : selection) {\r
- if(graph.isInstanceOf(r, dr.Element) && !graph.isInstanceOf(r, dr.Connection) /*&& !graph.isInstanceOf(r, dr.Monitor)*/) {\r
- sel.add(r);\r
- }\r
- }\r
- selection = sel.toArray(new Resource[sel.size()]);\r
-\r
- }\r
- });\r
-\r
- updateUI();\r
- } catch (DatabaseException e) {\r
- // TODO Auto-generated catch block\r
- e.printStackTrace();\r
- }\r
- }\r
-\r
- private void updateUI() {\r
- boolean showAlign = selection.length >= 2;\r
- boolean showDist = selection.length >= 3;\r
- boolean showRotate = selection.length >= 1;\r
- alignBottom.setEnabled(showAlign);\r
- alignHorizButton.setEnabled(showAlign);\r
- alignLeft.setEnabled(showAlign);\r
- alignRight.setEnabled(showAlign);\r
- alignTop.setEnabled(showAlign);\r
- alignVertButton.setEnabled(showAlign);\r
-\r
- distBottom.setEnabled(showDist);\r
- distHoriz.setEnabled(showDist);\r
- distHorizBetween.setEnabled(showDist);\r
- distLeft.setEnabled(showDist);\r
- distRight.setEnabled(showDist);\r
- distTop.setEnabled(showDist);\r
- distVert.setEnabled(showDist);\r
- distVertBetween.setEnabled(showDist);\r
-\r
- rotateCCW.setEnabled(showRotate);\r
- rotateCW.setEnabled(showRotate);\r
- flipX.setEnabled(showRotate);\r
- flipY.setEnabled(showRotate);\r
- }\r
-\r
- @Override\r
- public void dispose() {\r
-\r
- }\r
-\r
- private Resource[] getSelected() {\r
- return selection;\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.modeling.ui.diagramEditor.tools;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.ReadRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.diagram.elements.ElementTransforms;
+import org.simantics.diagram.elements.ElementTransforms.SIDE;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.modeling.ui.Activator;
+import org.simantics.ui.utils.ResourceAdaptionUtils;
+
+/**
+ * Diagramming alignment tools
+ *
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
+ */
+public class AlignTools implements DiagramTools {
+
+ private Resource selection[] = new Resource[0];
+
+ Button alignLeft;
+ Button alignVertButton;
+ Button alignRight;
+ Button alignTop;
+ Button alignHorizButton;
+ Button alignBottom;
+ Button distLeft;
+ Button distVert;
+ Button distRight;
+ Button distVertBetween;
+ Button distTop;
+ Button distHoriz;
+ Button distBottom;
+ Button distHorizBetween;
+
+ Button rotateCW;
+ Button rotateCCW;
+ Button flipX;
+ Button flipY;
+
+
+
+ @Override
+ public String getName() {
+ return "Align";
+ }
+
+
+ @Override
+ public void createContols(Composite parent, FormToolkit toolkit, LocalResourceManager resourceManager) {
+ parent.setLayout(GridLayoutFactory.fillDefaults().numColumns(1).equalWidth(true).margins(0, 0).spacing(1,1).create());
+
+ Composite alignComposite = new Composite(parent, SWT.NONE);
+ Composite distributeComposite = new Composite(parent, SWT.NONE);
+ Composite rotateComposite = new Composite(parent, SWT.NONE);
+ alignComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(true).margins(0, 2).spacing(0, 0).create());
+ distributeComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(4).equalWidth(true).margins(0, 2).spacing(0, 0).create());
+ rotateComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true).margins(0, 2).spacing(0, 0).create());
+
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignComposite);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distributeComposite);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateComposite);
+
+ alignLeft = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignLeft.setText("Left");
+ alignLeft.setToolTipText("Align Left Edges");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignLeft);
+
+ alignVertButton = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignVertButton.setText("Middle");
+ alignVertButton.setToolTipText("Center on Vertical Axis");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignVertButton);
+
+ alignRight = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignRight.setText("Right");
+ alignRight.setToolTipText("Align Right Edges");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignRight);
+
+ alignTop = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignTop.setText("Top");
+ alignTop.setToolTipText("Align Top Edges");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignTop);
+
+ alignHorizButton = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignHorizButton.setText("Middle");
+ alignHorizButton.setToolTipText("Center on Horizontal Axis");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignHorizButton);
+
+ alignBottom = toolkit.createButton(alignComposite, "", SWT.PUSH);
+ //alignBottom.setText("Bottom");
+ alignBottom.setToolTipText("Align Bottom Edges");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(alignBottom);
+
+ distLeft = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distLeft.setText("Left");
+ distLeft.setToolTipText("Distribute Left Edges Equidistantly");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distLeft);
+
+ distVert = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distVert.setText("Middle");
+ distVert.setToolTipText("Distribute Centers Equidistantly Horizontally");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVert);
+
+ distRight = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distRight.setText("Right");
+ distRight.setToolTipText("Distribute Right Edges Equidistantly");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distRight);
+
+ distVertBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distVertBetween.setText("Between");
+ distVertBetween.setToolTipText("Make Horizontal Gaps Between Objects Equal");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distVertBetween);
+
+ distTop = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distTop.setText("Top");
+ distTop.setToolTipText("Distribute Top Edges Equidistantly");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distTop);
+
+ distHoriz = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distHoriz.setText("Middle");
+ distHoriz.setToolTipText("Distribute Centers Equidistantly Vertically");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHoriz);
+
+ distBottom = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distBottom.setText("Bottom");
+ distBottom.setToolTipText("Distribute Bottom Edges Equidistantly");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distBottom);
+
+ distHorizBetween = toolkit.createButton(distributeComposite, "", SWT.PUSH);
+ //distHorizBetween.setText("Between");
+ distHorizBetween.setToolTipText("Make Vertical Gaps Between Objects Equal");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(distHorizBetween);
+
+ rotateCCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);
+ //rotateCCW.setText("rotate left");
+ rotateCCW.setToolTipText("Rotate Counterclockwise");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCCW);
+
+ rotateCW = toolkit.createButton(rotateComposite, "", SWT.PUSH);
+ //rotateCW.setText("rotate right");
+ rotateCW.setToolTipText("Rotate Clockwise");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(rotateCW);
+
+ flipX = toolkit.createButton(rotateComposite, "", SWT.PUSH);
+ //flipX.setText("flip");
+ flipX.setToolTipText("Flip About Horizontal Axis");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipX);
+
+ flipY = toolkit.createButton(rotateComposite, "", SWT.PUSH);
+ //flipY.setText("mirror");
+ flipY.setToolTipText("Flip About Vertical Axis");
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(flipY);
+
+ alignVertButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(), SIDE.VERT);
+ }
+ });
+
+ alignHorizButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(),SIDE.HORIZ);
+ }
+ });
+
+ alignLeft.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(),SIDE.LEFT);
+ }
+ });
+
+ alignRight.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(),SIDE.RIGHT);
+ }
+ });
+
+ alignTop.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(),SIDE.TOP);
+ }
+ });
+
+ alignBottom.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.align(getSelected(),SIDE.BOTTOM);
+ }
+ });
+
+ distLeft.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.LEFT);
+ }
+ });
+
+ distVert.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.VERT);
+ }
+ });
+
+ distRight.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.RIGHT);
+ }
+ });
+
+ distVertBetween.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.VERT_BTW);
+ }
+ });
+
+ distTop.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.TOP);
+ }
+ });
+
+ distHoriz.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.HORIZ);
+ }
+ });
+
+ distBottom.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.BOTTOM);
+ }
+ });
+
+ distHorizBetween.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.dist(getSelected(),SIDE.HORIZ_BTW);
+ }
+ });
+
+ rotateCW.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.rotate(getSelected(),true);
+ }
+ });
+
+ rotateCCW.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.rotate(getSelected(),false);
+ }
+ });
+
+ flipX.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.flip(getSelected(),true);
+ }
+ });
+
+ flipY.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ ElementTransforms.flip(getSelected(),false);
+ }
+ });
+
+ alignLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_left.png"))));
+ alignVertButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_center.png"))));
+ alignRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_right.png"))));
+ alignTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_top.png"))));
+ alignHorizButton.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_middle.png"))));
+ alignBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/align_bottom.png"))));
+
+ distLeft.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_left.png"))));
+ distVert.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_center.png"))));
+ distRight.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_right.png"))));
+ distVertBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_horiz.png"))));
+ distTop.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_top.png"))));
+ distHoriz.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_middle.png"))));
+ distBottom.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_bottom.png"))));
+ distHorizBetween.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/dist_vert.png"))));
+
+ rotateCCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_left.png"))));
+ rotateCW.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/rotate_right.png"))));
+ flipX.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_x.png"))));
+ flipY.setImage(resourceManager.createImage(ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/flip_y.png"))));
+
+ updateUI();
+ }
+
+ @Override
+ public void setSelection(ISelection s) {
+ this.selection = ResourceAdaptionUtils.toResources(s);
+ try {
+ Simantics.getSession().syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ DiagramResource dr = DiagramResource.getInstance(graph);
+ List<Resource> sel = new ArrayList<Resource>();
+ for (Resource r : selection) {
+ if(graph.isInstanceOf(r, dr.Element) && !graph.isInstanceOf(r, dr.Connection) /*&& !graph.isInstanceOf(r, dr.Monitor)*/) {
+ sel.add(r);
+ }
+ }
+ selection = sel.toArray(new Resource[sel.size()]);
+
+ }
+ });
+
+ updateUI();
+ } catch (DatabaseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ private void updateUI() {
+ boolean showAlign = selection.length >= 2;
+ boolean showDist = selection.length >= 3;
+ boolean showRotate = selection.length >= 1;
+ alignBottom.setEnabled(showAlign);
+ alignHorizButton.setEnabled(showAlign);
+ alignLeft.setEnabled(showAlign);
+ alignRight.setEnabled(showAlign);
+ alignTop.setEnabled(showAlign);
+ alignVertButton.setEnabled(showAlign);
+
+ distBottom.setEnabled(showDist);
+ distHoriz.setEnabled(showDist);
+ distHorizBetween.setEnabled(showDist);
+ distLeft.setEnabled(showDist);
+ distRight.setEnabled(showDist);
+ distTop.setEnabled(showDist);
+ distVert.setEnabled(showDist);
+ distVertBetween.setEnabled(showDist);
+
+ rotateCCW.setEnabled(showRotate);
+ rotateCW.setEnabled(showRotate);
+ flipX.setEnabled(showRotate);
+ flipY.setEnabled(showRotate);
+ }
+
+ @Override
+ public void dispose() {
+
+ }
+
+ private Resource[] getSelected() {
+ return selection;
+ }
+
+}