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