From 589494255be0318ccd7d8ed299c7fc74d07c90e2 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Mon, 20 Jun 2011 16:16:39 +0000
Subject: [PATCH] intermediary backup checkin

---
 .../trunk/META-INF/MANIFEST.MF                |   3 +
 .../icons/overlay/ellipse-reflections.png     | Bin 0 -> 6999 bytes
 .../icons/overlay/linear-blend-round.png      | Bin 0 -> 5047 bytes
 .../trunk/icons/overlay/radial-blend.png      | Bin 0 -> 3004 bytes
 .../base/ui/editpart/SnapToGridSupport.java   |  43 +++++
 .../RectangularConnectorEditPartBase.java     | 162 ++++++++++++++++++
 .../figure/PrettyRoundedRectangle.java        | 134 +++++++++++++++
 7 files changed, 342 insertions(+)
 create mode 100644 org.fortiss.tooling.base.ui/trunk/icons/overlay/ellipse-reflections.png
 create mode 100644 org.fortiss.tooling.base.ui/trunk/icons/overlay/linear-blend-round.png
 create mode 100644 org.fortiss.tooling.base.ui/trunk/icons/overlay/radial-blend.png
 create mode 100644 org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/SnapToGridSupport.java
 create mode 100644 org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/connector/RectangularConnectorEditPartBase.java
 create mode 100644 org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/figure/PrettyRoundedRectangle.java

diff --git a/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF b/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF
index 339fec841..94f2d8e1b 100644
--- a/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF
+++ b/org.fortiss.tooling.base.ui/trunk/META-INF/MANIFEST.MF
@@ -10,11 +10,14 @@ Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-Vendor: fortiss
 Export-Package: org.fortiss.tooling.kernel.base.ui,
+ org.fortiss.tooling.kernel.base.ui.action,
  org.fortiss.tooling.kernel.base.ui.command,
  org.fortiss.tooling.kernel.base.ui.dnd,
  org.fortiss.tooling.kernel.base.ui.editor,
+ org.fortiss.tooling.kernel.base.ui.editor.gef,
  org.fortiss.tooling.kernel.base.ui.editpart,
  org.fortiss.tooling.kernel.base.ui.editpart.anchor,
+ org.fortiss.tooling.kernel.base.ui.editpart.figure,
  org.fortiss.tooling.kernel.base.ui.editpart.policy,
  org.fortiss.tooling.kernel.base.ui.layout,
  org.fortiss.tooling.kernel.base.ui.layout.constants,
diff --git a/org.fortiss.tooling.base.ui/trunk/icons/overlay/ellipse-reflections.png b/org.fortiss.tooling.base.ui/trunk/icons/overlay/ellipse-reflections.png
new file mode 100644
index 0000000000000000000000000000000000000000..1aceeffcc70ea56b0112100f1db06e579b64fb58
GIT binary patch
literal 6999
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

literal 0
HcmV?d00001

diff --git a/org.fortiss.tooling.base.ui/trunk/icons/overlay/linear-blend-round.png b/org.fortiss.tooling.base.ui/trunk/icons/overlay/linear-blend-round.png
new file mode 100644
index 0000000000000000000000000000000000000000..655dba892742ff937ac9e2c52371445ce57ca900
GIT binary patch
literal 5047
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
N002ovPDHLkV1nmtk{|#8

literal 0
HcmV?d00001

diff --git a/org.fortiss.tooling.base.ui/trunk/icons/overlay/radial-blend.png b/org.fortiss.tooling.base.ui/trunk/icons/overlay/radial-blend.png
new file mode 100644
index 0000000000000000000000000000000000000000..660c0cef02162e057ce2c4a262f261472a6a1a87
GIT binary patch
literal 3004
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

literal 0
HcmV?d00001

diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/SnapToGridSupport.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/SnapToGridSupport.java
new file mode 100644
index 000000000..8cf8f5dcc
--- /dev/null
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/SnapToGridSupport.java
@@ -0,0 +1,43 @@
+/*--------------------------------------------------------------------------+
+$Id$
+|                                                                          |
+| Copyright 2011 ForTISS GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.kernel.base.ui.editpart;
+
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.SnapToGrid;
+
+/**
+ * Adapter support for snap to grid edit policies.
+ * 
+ * @author hoelzlf
+ * @author $Author$
+ * @version $Rev$
+ * @ConQAT.Rating RED Hash:
+ */
+public final class SnapToGridSupport {
+	/**
+	 * Adapter code for snap to grid feature.
+	 */
+	public static Object snapToGridAdapter(GraphicalEditPart editPart) {
+		final Boolean val = (Boolean) editPart.getViewer().getProperty(
+				SnapToGrid.PROPERTY_GRID_ENABLED);
+		if (val != null && val.booleanValue()) {
+			return new SnapToGrid(editPart);
+		}
+		return null;
+	}
+}
diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/connector/RectangularConnectorEditPartBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/connector/RectangularConnectorEditPartBase.java
new file mode 100644
index 000000000..0612689aa
--- /dev/null
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/connector/RectangularConnectorEditPartBase.java
@@ -0,0 +1,162 @@
+/*--------------------------------------------------------------------------+
+$Id$
+|                                                                          |
+| Copyright 2011 ForTISS GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.kernel.base.ui.editpart.connector;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.conqat.lib.commons.collections.CollectionUtils;
+import org.eclipse.draw2d.ChopboxAnchor;
+import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.gef.ConnectionEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.fortiss.tooling.base.model.element.IConnection;
+import org.fortiss.tooling.base.model.element.IConnector;
+import org.fortiss.tooling.base.model.element.IHierarchicElement;
+import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
+import org.fortiss.tooling.kernel.base.ui.editpart.ConnectorEditPartBase;
+import org.fortiss.tooling.kernel.base.ui.editpart.policy.ConnectionGraphicalNodeEditPolicy;
+import org.fortiss.tooling.kernel.base.ui.editpart.policy.RemoveEditPolicy;
+import org.fortiss.tooling.kernel.base.ui.layout.constants.RecommendedLayoutConstants;
+
+/**
+ * The super class of the connector edit parts used with rectangular shapes.
+ * 
+ * @author hoelzlf
+ * @author $Author$
+ * @version $Rev$
+ * @ConQAT.Rating RED Hash:
+ */
+public abstract class RectangularConnectorEditPartBase<T extends IConnector & ILayoutedModelElement>
+		extends ConnectorEditPartBase<T> {
+
+	/** The label used for the port. */
+	protected final Label label = new Label();
+
+	/** The figure used for the port itself. */
+	private IFigure connectorFigure;
+
+	/** Creates the edit part. */
+	public RectangularConnectorEditPartBase(T connector) {
+		super(connector);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected IFigure createFigure() {
+		connectorFigure = getConnectorFigure();
+
+		Figure composite = new Figure();
+		composite
+				.setSize(RecommendedLayoutConstants.RECTANGULAR_CONNECTOR_DIMENSION);
+
+		// TODO (BH): Clean this up....
+		// composite.setLayoutManager(new PortLabelLayoutManager());
+		// composite.add(connectorFigure, PortLabelLayoutManager.PORT);
+		// composite.add(label, PortLabelLayoutManager.LABEL);
+
+		return composite;
+	}
+
+	/** Returns the figure used for the connector. */
+	protected IFigure getConnectorFigure() {
+		if (connectorFigure == null) {
+			connectorFigure = createConnectorFigure();
+		}
+		return connectorFigure;
+	}
+
+	/** Creates the figure used for the connector. */
+	protected abstract IFigure createConnectorFigure();
+
+	/** {@inheritDoc} */
+	@Override
+	protected ConnectionAnchor defaultConnectionAnchor() {
+		return new ChopboxAnchor(getConnectorFigure());
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+
+		refreshSourceConnections();
+		refreshTargetConnections();
+
+		for (ConnectionEditPart editPart : (List<ConnectionEditPart>) getSourceConnections()) {
+			editPart.refresh();
+		}
+		for (ConnectionEditPart editPart : (List<ConnectionEditPart>) getTargetConnections()) {
+			editPart.refresh();
+		}
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.COMPONENT_ROLE, new RemoveEditPolicy());
+
+		installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE,
+				new ConnectionGraphicalNodeEditPolicy());
+	}
+
+	/** Returns the root element for this connector edit part. */
+	protected abstract IHierarchicElement getRootHierarchicElement();
+
+	/**
+	 * Returns whether the underlying connector edit part acts as a destination
+	 * connector in the current view (i.e. edit part).
+	 */
+	protected abstract boolean isReceiving();
+
+	/** {@inheritDoc} */
+	@Override
+	protected List<IConnection> getModelSourceConnections() {
+		if (!isReceiving()) {
+			return filterConnections(modelElement.getOutgoingList(),
+					getRootHierarchicElement());
+		}
+		return CollectionUtils.emptyList();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected List<IConnection> getModelTargetConnections() {
+		if (isReceiving()) {
+			return filterConnections(modelElement.getIncomingList(),
+					getRootHierarchicElement());
+		}
+		return CollectionUtils.emptyList();
+	}
+
+	/** Filters any channels not owned by the given owner. */
+	private List<IConnection> filterConnections(List<IConnection> connections,
+			IHierarchicElement owner) {
+		List<IConnection> result = new ArrayList<IConnection>();
+		for (IConnection channel : connections) {
+			if (channel.eContainer() == owner) {
+				result.add(channel);
+			}
+		}
+		return result;
+	}
+}
diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/figure/PrettyRoundedRectangle.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/figure/PrettyRoundedRectangle.java
new file mode 100644
index 000000000..b2e3c2b94
--- /dev/null
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/kernel/base/ui/editpart/figure/PrettyRoundedRectangle.java
@@ -0,0 +1,134 @@
+/*--------------------------------------------------------------------------+
+$Id$
+|                                                                          |
+| Copyright 2011 ForTISS GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.kernel.base.ui.editpart.figure;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.geometry.Insets;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.fortiss.tooling.kernel.base.ui.ToolingBaseUIActivator;
+
+/**
+ * This shape consists of a rounded rectangle that is surrounded by transparent
+ * insets. The rounded rectangle is filled with {@link #getBackgroundColor()}. A
+ * light top-down gradient from white to the background color is painted over
+ * the background color to achieve a 3 dimensional reflection effect.
+ * <p>
+ * Anti-aliasing is enabled for smooth corners of the rounded rectangle.
+ * 
+ * @author hoelzl
+ * @author $Author$
+ * @version $Rev$
+ * @ConQAT.Rating RED Hash:
+ */
+// TODO (FH): add glossy effect: see commented code below
+public class PrettyRoundedRectangle extends Shape {
+
+	/** The radius to use for the rounded corners of this shape. */
+	protected final int cornerRadius;
+
+	/** The transparent insets surrounding this shape. */
+	protected final Insets insets;
+
+	/** A linear blend applied at the top. */
+	protected static final Image linearBlend = ToolingBaseUIActivator
+			.getImageDescriptor("icons/overlay/linear-blend-round.png")
+			.createImage();
+
+	/** A radial blend applied at the bottom. */
+	protected static final Image radialBlend = ToolingBaseUIActivator
+			.getImageDescriptor("icons/overlay/radial-blend.png").createImage();
+
+	/** Creates a new {@link PrettyRoundedRectangle} with given {@link Insets}. */
+	public PrettyRoundedRectangle(int cornerRadius, Insets insets) {
+		this.cornerRadius = cornerRadius;
+		this.insets = insets;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected void fillShape(Graphics gfx) {
+		// final EVisualStyle style = EVisualStyle.get();
+		gfx.pushState();
+		// if (style == EVisualStyle.Glossy) {
+		// // Glossy style.
+		// final Rectangle b = getCroppedBounds();
+		// gfx.setBackgroundColor(ColorConstants.black);
+		// gfx.setAlpha(48);
+		// gfx.fillRoundRectangle(b.getCopy().translate(5, 5), cornerRadius,
+		// cornerRadius);
+		// gfx.restoreState();
+		// gfx.fillRoundRectangle(b, cornerRadius, cornerRadius);
+		// gfx.setAlpha(255);
+		// gfx.drawImage(linearBlend, new Rectangle(linearBlend.getBounds()),
+		// b.getCopy().resize(-1, -b.height / 2 - 1));
+		// gfx.setAlpha(200);
+		// gfx.drawImage(
+		// radialBlend,
+		// new Rectangle(radialBlend.getBounds()),
+		// b.getCopy().resize(-1, -b.height / 2 - 1)
+		// .translate(0, b.height / 2));
+		// } else {
+		// Traditional style is default.
+		gfx.fillRoundRectangle(getCroppedBounds(), cornerRadius, cornerRadius);
+		gfx.setForegroundColor(ColorConstants.white);
+		gfx.setAlpha(200);
+		gfx.fillGradient(getCroppedBounds().resize(0, -cornerRadius), true);
+		// }
+		gfx.popState();
+	}
+
+	/** Returns a copy of the bounds cropped by the insets. */
+	protected Rectangle getCroppedBounds() {
+		return bounds.getCropped(insets);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * <p>
+	 * Additionally enables anti-aliasing.
+	 */
+	@Override
+	protected void outlineShape(Graphics gfx) {
+		// final EVisualStyle style = EVisualStyle.get();
+		gfx.pushState();
+		gfx.setAntialias(SWT.ON);
+		// if (style == EVisualStyle.Glossy) {
+		// // Glossy style.
+		// gfx.setLineCap(SWT.CAP_ROUND);
+		// final int scale = (int) gfx.getAbsoluteScale();
+		// gfx.setLineWidth(scale + 1);
+		// final Color bg = gfx.getBackgroundColor();
+		// final Color bgdark = new Color(bg.getDevice(), max(0,
+		// (bg.getRed() - 80)), max(0, (bg.getGreen() - 80)), max(0,
+		// (bg.getBlue() - 80)));
+		// gfx.setForegroundColor(bgdark);
+		// gfx.drawRoundRectangle(getCroppedBounds().resize(-1, -1),
+		// cornerRadius, cornerRadius);
+		// bgdark.dispose();
+		// } else {
+		// Traditional style is default.
+		gfx.drawRoundRectangle(getCroppedBounds().resize(-1, -1), cornerRadius,
+				cornerRadius);
+		// }
+		gfx.popState();
+	}
+}
-- 
GitLab