svn commit: r16702 - trunk/src/argouml-app/src/org/argouml/uml/diagram: deployment/ui static_structure/ui ui
Bob Tarling <[email protected]>
| Newsgroups | gmane.comp.lang.uml.argouml.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: bobtarling
Date: 2009-01-25 12:23:28-0800
New Revision: 16702
Modified:
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
Log:
Issue 2991: Allow drag/drop of nary association class
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java 2009-01-25 12:23:28-0800
@@ -574,7 +574,8 @@
if (Model.getFacade().isANode(droppedObject)) {
figNode = new FigMNode(droppedObject, bounds, settings);
} else if (Model.getFacade().isAAssociation(droppedObject)) {
- figNode = new FigNodeAssociation(droppedObject, bounds, settings);
+ figNode =
+ createNaryAssociationNode(droppedObject, bounds, settings);
} else if (Model.getFacade().isANodeInstance(droppedObject)) {
figNode = new FigNodeInstance(droppedObject, bounds, settings);
} else if (Model.getFacade().isAComponent(droppedObject)) {
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java 2009-01-25 12:23:28-0800
@@ -41,6 +41,8 @@
import org.argouml.uml.diagram.deployment.ui.FigNodeInstance;
import org.argouml.uml.diagram.deployment.ui.FigObject;
import org.argouml.uml.diagram.static_structure.ClassDiagramGraphModel;
+import org.argouml.uml.diagram.ui.FigClassAssociationClass;
+import org.argouml.uml.diagram.ui.FigEdgeAssociationClass;
import org.argouml.uml.diagram.ui.FigNodeAssociation;
import org.argouml.uml.diagram.ui.ModeCreateDependency;
import org.argouml.uml.diagram.ui.ModeCreatePermission;
@@ -664,7 +666,8 @@
DiagramSettings settings = getDiagramSettings();
if (Model.getFacade().isAAssociation(droppedObject)) {
- figNode = new FigNodeAssociation(droppedObject, bounds, settings);
+ figNode =
+ createNaryAssociationNode(droppedObject, bounds, settings);
} else if (Model.getFacade().isAClass(droppedObject)) {
figNode = new FigClass(droppedObject, bounds, settings);
} else if (Model.getFacade().isAInterface(droppedObject)) {
@@ -713,9 +716,8 @@
LOG.debug("Dropped object " + droppedObject + " converted to "
+ figNode);
} else {
- LOG.debug("Dropped object NOT added " + figNode);
+ LOG.debug("Dropped object NOT added " + droppedObject);
}
return figNode;
}
-
}
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigEdgeAssociationClass.java 2009-01-25 12:23:28-0800
@@ -34,6 +34,7 @@
import org.argouml.kernel.DelayedVChangeListener;
import org.argouml.uml.diagram.DiagramSettings;
import org.tigris.gef.presentation.Fig;
+import org.tigris.gef.presentation.FigEdge;
import org.tigris.gef.presentation.FigNode;
import org.tigris.gef.presentation.FigPoly;
@@ -90,7 +91,7 @@
}
private void constructFigs(FigClassAssociationClass classBoxFig,
- FigAssociationClass ownerFig) {
+ Fig ownerFig) {
LOG.info("FigEdgeAssociationClass constructor");
if (classBoxFig == null) {
throw new IllegalArgumentException("No class box found while "
@@ -102,10 +103,15 @@
}
setDestFigNode(classBoxFig);
setDestPortFig(classBoxFig);
- ownerFig.makeEdgePort();
- FigEdgePort edgePort = ownerFig.getEdgePort();
- setSourcePortFig(edgePort);
- setSourceFigNode(edgePort);
+ final FigNode port;
+ if (ownerFig instanceof FigEdgeModelElement) {
+ ((FigEdgeModelElement) ownerFig).makeEdgePort();
+ port = ((FigEdgeModelElement) ownerFig).getEdgePort();
+ } else {
+ port = (FigNode) ownerFig;
+ }
+ setSourcePortFig(port);
+ setSourceFigNode(port);
computeRoute();
}
@@ -122,6 +128,19 @@
constructFigs(classBoxFig, ownerFig);
}
+ /**
+ * The constructor for the AssociationClass fig.
+ *
+ * @param classBoxFig the figure representing the Class
+ * @param ownerFig the owner fig
+ * @param settings render settings
+ */
+ public FigEdgeAssociationClass(FigClassAssociationClass classBoxFig,
+ FigNodeAssociation ownerFig, DiagramSettings settings) {
+ super(ownerFig.getOwner(), settings);
+ constructFigs(classBoxFig, ownerFig);
+ }
+
/*
* @see org.tigris.gef.presentation.FigEdge#setFig(org.tigris.gef.presentation.Fig)
*/
Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java?view=diff&pathrev=16702&r1=16701&r2=16702
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java 2009-01-25 12:23:28-0800
@@ -26,6 +26,7 @@
import java.awt.Component;
import java.awt.Point;
+import java.awt.Rectangle;
import java.beans.PropertyVetoException;
import javax.swing.Action;
@@ -46,6 +47,7 @@
import org.argouml.ui.CmdCreateNode;
import org.argouml.uml.UUIDHelper;
import org.argouml.uml.diagram.ArgoDiagramImpl;
+import org.argouml.uml.diagram.DiagramSettings;
import org.argouml.uml.diagram.Relocatable;
import org.argouml.uml.diagram.UMLMutableGraphSupport;
import org.argouml.util.ToolBarUtility;
@@ -652,4 +654,42 @@
return new ModePlace(gf, instructions);
}
+ /**
+ * Create a nary association diamond shaped FigNode on this diagram.
+ *
+ * @param modelElement the model element this FigNode is to represent
+ * @param bounds the position and size for the diamond node.
+ * @param settings the diagram setting for presentation.
+ * @return The FigNode of the diamond representing the model element
+ */
+ protected FigNode createNaryAssociationNode(
+ final Object modelElement,
+ final Rectangle bounds,
+ final DiagramSettings settings) {
+
+ final FigNodeAssociation diamondFig =
+ new FigNodeAssociation(modelElement, bounds, settings);
+ if (Model.getFacade().isAAssociationClass(modelElement)
+ && bounds != null) {
+ final FigClassAssociationClass classBoxFig =
+ new FigClassAssociationClass(
+ modelElement, bounds, settings);
+ final FigEdgeAssociationClass dashEdgeFig =
+ new FigEdgeAssociationClass(
+ classBoxFig, diamondFig, settings);
+ classBoxFig.renderingChanged();
+
+ // TODO: Why isn't this calculation for location working?
+ Point location = bounds.getLocation();
+ location.y = (location.y - diamondFig.getHeight()) - 32;
+ if (location.y < 16) {
+ location.y = 16;
+ }
+ classBoxFig.setLocation(location);
+ this.add(diamondFig);
+ this.add(classBoxFig);
+ this.add(dashEdgeFig);
+ }
+ return diamondFig;
+ }
}
------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=1051333
To unsubscribe from this discussion, e-mail: [[email protected]].