Author: bobtarling Date: 2011-05-21 09:58:17-0700 New Revision: 19481 Added: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/NodeConnector.java Modified: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigCircleState.java trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigEntryPoint.java trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigExitPoint.java trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigVertex.java
Log: Trap rectangles for a state differ depending on the item being dropped into the state Modified: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigCircleState.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigCircleState.java?view=diff&pathrev=19481&r1=19480&r2=19481 ============================================================================== --- trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigCircleState.java (original) +++ trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigCircleState.java 2011-05-21 09:58:17-0700 @@ -20,7 +20,11 @@ import org.tigris.gef.presentation.Fig; import org.tigris.gef.presentation.FigCircle; -public class FigCircleState extends FigNodeModelElement { +/** + * Abstract class for any state class with a circular boundary. + * @author Bob Tarling + */ +abstract class FigCircleState extends FigNodeModelElement { private static final int WIDTH = 16; private static final int HEIGHT = 16; Modified: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigEntryPoint.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigEntryPoint.java?view=diff&pathrev=19481&r1=19480&r2=19481 ============================================================================== --- trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigEntryPoint.java (original) +++ trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigEntryPoint.java 2011-05-21 09:58:17-0700 @@ -16,7 +16,7 @@ import java.awt.Rectangle; import org.argouml.uml.diagram.DiagramSettings; -public class FigEntryPoint extends FigCircleState { +public class FigEntryPoint extends FigCircleState implements NodeConnector { public FigEntryPoint(Object owner, Rectangle bounds, DiagramSettings settings) { Modified: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigExitPoint.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigExitPoint.java?view=diff&pathrev=19481&r1=19480&r2=19481 ============================================================================== --- trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigExitPoint.java (original) +++ trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigExitPoint.java 2011-05-21 09:58:17-0700 @@ -16,7 +16,7 @@ import java.awt.Rectangle; import org.argouml.uml.diagram.DiagramSettings; -public class FigExitPoint extends FigCircleState { +public class FigExitPoint extends FigCircleState implements NodeConnector { public FigExitPoint(Object owner, Rectangle bounds, DiagramSettings settings) { Modified: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigVertex.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigVertex.java?view=diff&pathrev=19481&r1=19480&r2=19481 ============================================================================== --- trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigVertex.java (original) +++ trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/FigVertex.java 2011-05-21 09:58:17-0700 @@ -40,7 +40,6 @@ import org.argouml.uml.diagram.DiagramSettings; import org.argouml.uml.diagram.ui.FigNodeModelElement; import org.tigris.gef.base.LayerPerspective; -import org.tigris.gef.base.Selection; import org.tigris.gef.di.DiagramElement; import org.tigris.gef.presentation.Fig; import org.tigris.gef.presentation.FigGroup; @@ -106,7 +105,8 @@ List regions = Model.getStateMachinesHelper().getRegions( encloser.getOwner()); if (regions.isEmpty()) { - // There are no regions so create one and place the vertex there. + // There are no regions so create one and place the vertex + //there. region = Model.getUmlFactory().buildNode( Model.getMetaTypes().getRegion(), encloser.getOwner()); } else { @@ -183,17 +183,11 @@ } } - // Temporary start -// private static final Color[] COLOR_ARRAY = { -// Color.RED, Color.BLUE, Color.CYAN, Color.YELLOW, Color.GREEN}; -// private int nextColor = 0; - // Temporary end - @Override protected void modelChanged(PropertyChangeEvent mee) { super.modelChanged(mee); - assert(mee.getPropertyName().equals("region")); + assert (mee.getPropertyName().equals("region")); if (mee instanceof AddAssociationEvent) { // TODO: Before adding a new region make the last region @@ -206,15 +200,9 @@ regionCompartment.getX(), regionCompartment.getY(), rg.getMinimumSize().width, rg.getMinimumSize().height); - // Temporary start - colour the regions so that we can see them for now -// rg.setFillColor(COLOR_ARRAY[nextColor++]); -// if (nextColor >= COLOR_ARRAY.length) { -// nextColor = 0; -// } - // Temporary end - regionCompartment.addFig(rg); - setSize(getMinimumSize()); + setSize(Math.max(getMinimumSize().width, getWidth()), + Math.max(getMinimumSize().height, getHeight())); } if (mee instanceof RemoveAssociationEvent) { Object oldRegion = mee.getNewValue(); @@ -329,18 +317,24 @@ return true; } - public List<Rectangle> getTrapRects() { - List regions = Model.getStateMachinesHelper().getRegions(getOwner()); - - ArrayList<Rectangle> rects = new ArrayList<Rectangle>(regions.size()); - if (regions.isEmpty()) { - rects.add(regionCompartment.getBounds()); + public List<Rectangle> getTrapRects(Fig draggedFig) { + if (draggedFig instanceof NodeConnector) { + ArrayList<Rectangle> rects = new ArrayList<Rectangle>(1); + rects.add(getBounds()); + return rects; } else { - for (DiagramElement f : regionCompartment.getDiagramElements()) { - rects.add(((Fig) f).getBounds()); + List regions = Model.getStateMachinesHelper().getRegions(getOwner()); + + ArrayList<Rectangle> rects = new ArrayList<Rectangle>(regions.size()); + if (regions.isEmpty()) { + rects.add(regionCompartment.getBounds()); + } else { + for (Fig f : regionCompartment.getFigs()) { + rects.add(f.getBounds()); + } } + return rects; } - return rects; } protected void setStandardBounds(int x, int y, int w, int h) { Added: trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/NodeConnector.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/NodeConnector.java?view=markup&pathrev=19481 ============================================================================== --- (empty file) +++ trunk/src/argouml-core-diagrams-state2/src/org/argouml/state2/diagram/NodeConnector.java 2011-05-21 09:58:17-0700 @@ -0,0 +1,24 @@ +/* $Id: $ + ***************************************************************************** + * Copyright (c) 2011 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.state2.diagram; + +/** + * An interface that must be implemented by any node that acts as a connection + * point to another node. Such a node hugs the bounds of any other node it is + * connected to. + * @author Bob Tarling + */ +interface NodeConnector { + +} ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2743381 To unsubscribe from this discussion, e-mail: [[email protected]].
