svn commit: r16393 - trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2008-12-20 10:09:22-0800
New Revision: 16393

Modified:
   trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java

Log:
If create messages are moved then reposition heads above lifelines

Modified: trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java?view=diff&pathrev=16393&r1=16392&r2=16393
==============================================================================
--- trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java	(original)
+++ trunk/src/argouml-core-diagrams-sequence2/src/org/argouml/sequence2/diagram/ModeCreateMessage.java	2008-12-20 10:09:22-0800
@@ -51,6 +51,7 @@
         Logger.getLogger(ModeCreateMessage.class);
     
     private static final int DEFAULT_ACTIVATION_HEIGHT = 50;
+    private static final int DEFAULT_MESSAGE_GAP = 20;
     
     /**
      * The constructor.
@@ -86,10 +87,10 @@
         FigClassifierRole dcr = (FigClassifierRole) fe.getDestFigNode();
         FigClassifierRole scr = (FigClassifierRole) fe.getSourceFigNode();
         
+        ensureSpace(figMessage);
+        
         if (figMessage.isCallAction()) {
             
-            ensureSpace(figMessage);
-            
             // get the source of the return message
             final Object returnMessageSource =
                 Model.getFacade().getReceiver(message);
@@ -159,14 +160,37 @@
      * @param figMessage
      */
     private void ensureSpace(final FigMessage figMessage) {
+        
+        // Make sure there is the minimum gap above the message being drawn
+        final FigMessage firstMessageAbove = getNearestMessage(
+                (FigClassifierRole) getSourceFigNode(),
+                figMessage,
+                false);
+        
+        if (firstMessageAbove != null) {
+            final int figMessageY = figMessage.getFirstPoint().y;
+            final int firstMessageY = firstMessageAbove.getFirstPoint().y;
+            if ((figMessageY - firstMessageY) < DEFAULT_MESSAGE_GAP) {
+                figMessage.translateEdge(
+                        0,
+                        firstMessageY + DEFAULT_MESSAGE_GAP - figMessageY);
+            }
+        }
+        
+        // Make sure there is the minimum gap below the message being drawn
         final FigMessage firstMessageBelow = getNearestMessage(
                 (FigClassifierRole) getSourceFigNode(),
                 figMessage,
                 true);
         
-        final int defaultMessageGap = 20;
-        final int heightPlusGap = 
-            DEFAULT_ACTIVATION_HEIGHT + defaultMessageGap;
+        final int heightPlusGap;
+        if (figMessage.isCallAction()) {
+            heightPlusGap = 
+                DEFAULT_ACTIVATION_HEIGHT + DEFAULT_MESSAGE_GAP;
+        } else {
+            heightPlusGap = 
+                DEFAULT_MESSAGE_GAP;
+        }
         
         if (firstMessageBelow != null 
                 && firstMessageBelow.getFirstPoint().y 
@@ -179,6 +203,11 @@
             
             for (FigMessage fig : getMessagesBelow(figMessage)) {
                 fig.translateEdge(0, dy);
+                if (fig.isCreateAction()) {
+                    FigClassifierRole fcr =
+                        (FigClassifierRole) fig.getDestFigNode();
+                    fcr.positionHead(fig);
+                }
             }
         }
     }
@@ -246,9 +275,8 @@
             final int val,
             final FigMessage message1,
             final FigMessage message2) {
-        if (val >= message1.getFirstPoint().y 
-                && (message2 == null
-                        || val <= message2.getFirstPoint().y)) {
+        if ((message1 == null || val >= message1.getFirstPoint().y) 
+                && (message2 == null || val <= message2.getFirstPoint().y)) {
             return true;
         }
         return false;

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=988453

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.