Author: bobtarling
Date: 2010-11-20 08:49:59-0800
New Revision: 18851
Added:
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java
Removed:
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java
Modified:
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java
trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
Log:
Change the display of FigNodes to be managed by state rather than inheritance
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDisplayState.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,54 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.argouml.uml.diagram.ui.FigSingleLineText;
+import org.argouml.uml.diagram.ui.FigStereotypesGroup;
+import org.tigris.gef.base.CreateNodeAction;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRRect;
+
+abstract class BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+ private Fig bigPort;
+ private Fig stereotypeFig;
+ private Fig nameFig;
+
+ public BaseDisplayState(int x, int y, int w, int h, Color lineColor,
+ Color fillColor, Object modelElement, DiagramSettings settings) {
+ stereotypeFig = new FigStereotypesGroup(modelElement, new Rectangle(0, 0, 0, 0), settings);
+ nameFig = new FigSingleLineText(modelElement, new Rectangle(0, 0, 0, 0), settings, true);
+ bigPort = createBigPort(x, y, w, h, lineColor, fillColor);
+ }
+
+ public Fig getStereotypeDisplay() {
+ return stereotypeFig;
+ }
+
+ public Fig getNameDisplay() {
+ return nameFig;
+ }
+
+ abstract Dimension getMinimumSize();
+ abstract Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor);
+
+ Fig getBigPort() {
+ return bigPort;
+ }
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ConcavePentagonDisplayState.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,63 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Polygon;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigPoly;
+
+public class ConcavePentagonDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+ private static final int PADDING = 8;
+
+ public ConcavePentagonDisplayState(int x, int y, int w, int h, Color lineColor,
+ Color fillColor, Object modelElement, DiagramSettings settings) {
+ super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+ createBigPort(x, y, w, h, lineColor, fillColor);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+ final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+ int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+ /* The stereoDim has height=2, even if it is empty,
+ * hence the -2 below: */
+ final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+ w = Math.max(w, h + 44); // the width needs to be > the height
+ return new Dimension(w, h);
+ }
+
+ protected Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+ final FigPoly polyFig = new FigPoly();
+ final int[] xs = new int[6];
+ final int[] ys = new int[6];
+
+ xs[0] = x; ys[0] = y;
+ xs[1] = x + w; ys[1] = y;
+ xs[2] = x + w; ys[2] = y + h;
+ xs[3] = x; ys[3] = y + h;
+ xs[4] = x + h / 2; ys[4] = y + h / 2;
+ xs[5] = x; ys[5] = y;
+ final Polygon p = new Polygon(xs, ys, 6);
+ polyFig.setPolygon(p);
+
+ return polyFig;
+ }
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/DiagramElementBuilder.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,74 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import org.argouml.uml.diagram.DiagramSettings;
+
+class DiagramElementBuilder {
+
+ private static final int WIDTH = 90;
+ private static final int HEIGHT = 25;
+
+ static void buildDiagramElement(
+ final FigBaseNode fig, String style, Object owner, DiagramSettings settings) {
+ if (style.equals("compartmentbox")) {
+
+ } else if (style.equals("rect")) {
+ fig.setDisplayState(
+ new RectDisplayState(
+ fig.getX(),
+ fig.getX(),
+ WIDTH,
+ HEIGHT,
+ fig.getLineColor(),
+ fig.getFillColor(),
+ owner,
+ settings));
+ } else if (style.equals("rrect")) {
+ fig.setDisplayState(
+ new RRectDisplayState(
+ fig.getX(),
+ fig.getX(),
+ WIDTH,
+ HEIGHT,
+ fig.getLineColor(),
+ fig.getFillColor(),
+ owner,
+ settings));
+ } else if (style.equals("pentagon")) {
+ fig.setDisplayState(
+ new PentagonDisplayState(
+ fig.getX(),
+ fig.getX(),
+ WIDTH,
+ HEIGHT,
+ fig.getLineColor(),
+ fig.getFillColor(),
+ owner,
+ settings));
+ } else if (style.equals("concave-pentagon")) {
+ fig.setDisplayState(
+ new ConcavePentagonDisplayState(
+ fig.getX(),
+ fig.getX(),
+ WIDTH,
+ HEIGHT,
+ fig.getLineColor(),
+ fig.getFillColor(),
+ owner,
+ settings));
+ }
+ }
+
+}
Removed: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigActivityNode.java?view=markup&pathrev=18850
Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java?view=diff&pathrev=18851&r1=18850&r2=18851
==============================================================================
--- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java (original)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/FigBaseNode.java 2010-11-20 08:49:59-0800
@@ -13,6 +13,7 @@
package org.argouml.activity2.diagram;
+import java.awt.Dimension;
import java.awt.Rectangle;
import org.argouml.uml.diagram.DiagramSettings;
@@ -25,6 +26,8 @@
*/
class FigBaseNode extends FigNodeModelElement {
+ private BaseDisplayState displayState;
+
/**
* Constructor a new FigBaseNode
*
@@ -37,4 +40,18 @@
super(owner, bounds, settings);
addFig(getBigPort());
}
+
+ void setDisplayState(BaseDisplayState displayState) {
+ this.displayState = displayState;
+ if (getBigPort() != null) {
+ removeFig(getBigPort());
+ }
+ setBigPort(displayState.getBigPort());
+ addFig(displayState.getBigPort());
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ return displayState.getMinimumSize();
+ }
}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/NameDisplayer.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,21 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import org.tigris.gef.presentation.Fig;
+
+interface NameDisplayer {
+
+ Fig getStereotypeDisplay();
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/PentagonDisplayState.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,61 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+package org.argouml.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Polygon;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigPoly;
+
+public class PentagonDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+ private static final int PADDING = 8;
+
+ public PentagonDisplayState(int x, int y, int w, int h, Color lineColor,
+ Color fillColor, Object modelElement, DiagramSettings settings) {
+ super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+ createBigPort(x, y, w, h, lineColor, fillColor);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+ final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+ int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+ /* The stereoDim has height=2, even if it is empty,
+ * hence the -2 below: */
+ final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+ w = Math.max(w, h + 44); // the width needs to be > the height
+ return new Dimension(w, h);
+ }
+
+ protected Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+ final FigPoly polyFig = new FigPoly();
+ final int[] xs = new int[6];
+ final int[] ys = new int[6];
+ xs[0] = x; ys[0] = y;
+ xs[1] = x + w - h / 2; ys[1] = y;
+ xs[2] = x + w; ys[2] = y + h / 2;
+ xs[3] = x + w - h / 2; ys[3] = y + h;
+ xs[4] = x; ys[4] = y + h;
+ xs[5] = x; ys[5] = y;
+ final Polygon p = new Polygon(xs, ys, 6);
+ polyFig.setPolygon(p);
+
+ return polyFig;
+ }
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RRectDisplayState.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,49 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+
+package org.argouml.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRRect;
+
+public class RRectDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+ private static final int PADDING = 8;
+
+ public RRectDisplayState(int x, int y, int w, int h, Color lineColor,
+ Color fillColor, Object modelElement, DiagramSettings settings) {
+ super(x, y, w, h, lineColor, fillColor, modelElement, settings);
+ createBigPort(x, y, w, h, lineColor, fillColor);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+ final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+ int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+ /* The stereoDim has height=2, even if it is empty,
+ * hence the -2 below: */
+ final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+ w = Math.max(w, h + 44); // the width needs to be > the height
+ return new Dimension(w, h);
+ }
+
+ Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+ return new FigRRect(x, y, w, h, lineColor, fillColor);
+ }
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/RectDisplayState.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,49 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+package org.argouml.activity2.diagram;
+
+import java.awt.Color;
+import java.awt.Dimension;
+
+import org.argouml.uml.diagram.DiagramSettings;
+import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigRect;
+
+public class RectDisplayState extends BaseDisplayState implements StereotypeDisplayer, NameDisplayer {
+
+ private static final int PADDING = 8;
+
+ public RectDisplayState(int x, int y, int w, int h, Color lineColor,
+ Color fillColor, Object modelElement, DiagramSettings settings) {
+ super(x, y, w, h, lineColor,
+ fillColor, modelElement, settings);
+ createBigPort(x, y, w, h, lineColor, fillColor);
+ }
+
+ @Override
+ public Dimension getMinimumSize() {
+ final Dimension stereoDim = getStereotypeDisplay().getMinimumSize();
+ final Dimension nameDim = getNameDisplay().getMinimumSize();
+
+ int w = Math.max(stereoDim.width, nameDim.width) + PADDING * 2;
+ /* The stereoDim has height=2, even if it is empty,
+ * hence the -2 below: */
+ final int h = stereoDim.height - 2 + nameDim.height + PADDING;
+ w = Math.max(w, h + 44); // the width needs to be > the height
+ return new Dimension(w, h);
+ }
+
+ Fig createBigPort(int x, int y, int w, int h, Color lineColor, Color fillColor) {
+ return new FigRect(x, y, w, h, lineColor, fillColor);
+ }
+}
Added: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java?view=markup&pathrev=18851
==============================================================================
--- (empty file)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/StereotypeDisplayer.java 2010-11-20 08:49:59-0800
@@ -0,0 +1,20 @@
+/* $Id: $
+ *****************************************************************************
+ * Copyright (c) 2010 Contributors - see below
+ * 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:
+ * Bob Tarling
+ *****************************************************************************
+ */
+package org.argouml.activity2.diagram;
+
+import org.tigris.gef.presentation.Fig;
+
+interface StereotypeDisplayer {
+
+ Fig getStereotypeDisplay();
+}
Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java?view=diff&pathrev=18851&r1=18850&r2=18851
==============================================================================
--- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java (original)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java 2010-11-20 08:49:59-0800
@@ -105,7 +105,18 @@
DiagramSettings settings = getDiagramSettings();
if (Model.getFacade().isAActivityNode(modelElement)) {
- figNode = new FigActivityNode(modelElement, bounds, settings);
+ figNode = new FigBaseNode(modelElement, bounds, settings);
+ final String style;
+ if (Model.getFacade().isAObjectNode(modelElement)) {
+ style="rect";
+ } else if (Model.getFacade().isASendSignalAction(modelElement)) {
+ style="pentagon";
+ } else if (Model.getFacade().isAAcceptEventAction(modelElement)) {
+ style="concave-pentagon";
+ } else {
+ style="rrect";
+ }
+ DiagramElementBuilder.buildDiagramElement((FigBaseNode) figNode, style, modelElement, settings);
} else if (Model.getFacade().isAComment(modelElement)) {
figNode = new FigComment(modelElement, bounds, settings);
}
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2683894
To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.