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]].

Reply via email to