[Uml-devel] branches/KDE/3.5/kdesdk/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Fri Apr 13 22:10:02 UTC 2007


SVN commit 653641 by okellogg:

Apply the plot of commit 653599 to AssociationWidget.
BUG:144119


 M  +1 -0      ChangeLog  
 M  +30 -28    umbrello/associationwidget.cpp  
 M  +3 -1      umbrello/associationwidget.h  
 M  +14 -14    umbrello/umlview.cpp  
 M  +1 -18     umbrello/umlwidget.cpp  
 M  +0 -17     umbrello/umlwidget.h  
 M  +18 -1     umbrello/widgetbase.cpp  
 M  +18 -1     umbrello/widgetbase.h  


--- branches/KDE/3.5/kdesdk/umbrello/ChangeLog #653640:653641
@@ -29,6 +29,7 @@
 * Operation Properties "Type" combo box too small (143319)
 * Support duplication of diagrams (143581)
 * Crash on changing multiplicity in an association in ERD (143909)
+* Class diagram in folder not loaded correctly from xmi (144119)
 
 Version 1.5.61
 
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.cpp #653640:653641
@@ -560,11 +560,30 @@
     }
 }
 
-void AssociationWidget::activate() {
-    if(isActivated())
-        return;
+bool AssociationWidget::activate() {
+    if (m_pObject == NULL &&
+        UMLAssociation::assocTypeHasUMLRepresentation(m_AssocType)) {
+        UMLObject *myObj = m_umldoc->findObjectById(m_nId);
+        if (myObj == NULL) {
+            kError() << "AssociationWidget::activate: cannot find UMLObject "
+                << ID2STR(m_nId) << endl;
+            return false;
+        } else {
+            const Uml::Object_Type ot = myObj->getBaseType();
+            if (ot == ot_Association) {
+                UMLAssociation * myAssoc = static_cast<UMLAssociation*>(myObj);
+                setUMLAssociation(myAssoc);
+                m_LinePath.setAssocType( myAssoc->getAssocType() );
+            } else {
+                setUMLObject(myObj);
+                setAssocType(m_AssocType);
+            }
+        }
+    }
 
-    bool status = true;
+    if (m_bActivated)
+        return true;
+
     Association_Type type = getAssocType();
 
     if (m_role[A].m_pWidget == NULL)
@@ -574,7 +593,7 @@
 
     if(!m_role[A].m_pWidget || !m_role[B].m_pWidget) {
         kDebug() << "Can't make association" << endl;
-        return;
+        return false;
     }
 
     calculateEndingPoints();
@@ -651,9 +670,8 @@
         createAssocClassLine();
     }
 
-    if(status) {
-        m_bActivated = true;
-    }
+    m_bActivated = true;
+    return true;
 }
 
 /** This function calculates which role should be set for the m_pName FloatingTextWidget */
@@ -3277,8 +3295,8 @@
     if (m_pObject) {
         assocElement.setAttribute( "xmi.id", ID2STR(m_pObject->getID()) );
     }
+    assocElement.setAttribute( "type", m_AssocType );
     if (getAssociation() == NULL) {
-        assocElement.setAttribute( "type", m_AssocType );
         assocElement.setAttribute( "visibilityA", m_role[A].m_Visibility);
         assocElement.setAttribute( "visibilityB", m_role[B].m_Visibility);
         assocElement.setAttribute( "changeabilityA", m_role[A].m_Changeability);
@@ -3407,8 +3425,6 @@
         setRoleDoc( qElement.attribute("roleAdoc", ""), A );
         setRoleDoc( qElement.attribute("roleBdoc", ""), B );
 
-        setAssocType(aType);
-
         // visibilty defaults to Public if it cant set it here..
         QString visibilityA = qElement.attribute( "visibilityA", "0");
         if (visibilityA.toInt() > 0)
@@ -3438,25 +3454,11 @@
         }
 
         // New style: The xmi.id is a reference to the UMLAssociation.
-        Uml::IDType nId = STR2ID(id);
-        UMLObject *myObj = m_umldoc->findObjectById(nId);
-        if (myObj == NULL) {
-            kError() << "AssociationWidget::loadFromXMI: cannot find UMLObject "
-            << ID2STR(nId) << endl;
-            return false;
-        } else {
-            const Uml::Object_Type ot = myObj->getBaseType();
-            if (ot != ot_Association) {
-                setUMLObject(myObj);
-                setAssocType(aType);
-            } else {
-                UMLAssociation * myAssoc = static_cast<UMLAssociation*>(myObj);
-                setUMLAssociation(myAssoc);
-                m_LinePath.setAssocType( myAssoc->getAssocType() );
-            }
-        }
+        m_nId = STR2ID(id);
     }
 
+    setAssocType(aType);
+
     QString indexa = qElement.attribute( "indexa", "0" );
     QString indexb = qElement.attribute( "indexb", "0" );
     QString totalcounta = qElement.attribute( "totalcounta", "0" );
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/associationwidget.h #653640:653641
@@ -107,8 +107,10 @@
 
     /**
      * Activates the AssociationWidget after a load.
+     *
+     * @return  true for success
      */
-    void activate();
+    bool activate();
 
     /**
      * Set the widget of the given role.
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/umlview.cpp #653640:653641
@@ -1383,21 +1383,21 @@
 
     }//end while
 
-    //Activate All associationswidgets
-    AssociationWidgetListIt assoc_it( m_AssociationList );
-    AssociationWidget *assocwidget;
-    //first get total count
-    while((assocwidget = assoc_it.current())) {
-        ++assoc_it;
-        if( assocwidget->isActivated() )
-            continue;
-        assocwidget->activate();
-        if( m_PastePoint.x() != 0 ) {
-            int x = m_PastePoint.x() - m_Pos.x();
-            int y = m_PastePoint.y() - m_Pos.y();
-            assocwidget -> moveEntireAssoc( x, y );
+    // Activate all association widgets
+    AssociationWidget *aw;
+    for (AssociationWidgetListIt ait(m_AssociationList);
+            (aw = ait.current()); ++ait) {
+        if (aw->activate()) {
+            if (m_PastePoint.x() != 0) {
+                int x = m_PastePoint.x() - m_Pos.x();
+                int y = m_PastePoint.y() - m_Pos.y();
+                aw->moveEntireAssoc(x, y);
+            }
+        } else {
+            m_AssociationList.remove(aw);
+            delete aw;
         }
-    }//end while
+    }
 }
 
 int UMLView::getSelectCount(bool filterText) const {
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/umlwidget.cpp #653640:653641
@@ -5,7 +5,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   copyright (C) 2002-2006                                               *
+ *   copyright (C) 2002-2007                                               *
  *   Umbrello UML Modeller Authors <uml-devel at uml.sf.net>                  *
  ***************************************************************************/
 
@@ -167,23 +167,6 @@
      */
 }
 
-void UMLWidget::setID(Uml::IDType id) {
-    if (m_Type != wt_Text && m_pObject && m_pObject->getBaseType() == ot_Association) {
-        if (m_pObject->getID() != Uml::id_None)
-            kWarning() << "UMLWidget::setID(): changing old UMLObject "
-            << ID2STR(m_pObject->getID()) << " to "
-            << ID2STR(id) << endl;
-        m_pObject->setID( id );
-    }
-    m_nId = id;
-}
-
-Uml::IDType UMLWidget::getID() const {
-    if (m_Type != wt_Text && m_pObject && m_pObject->getBaseType() == ot_Association)
-        return m_pObject->getID();
-    return m_nId;
-}
-
 void UMLWidget::mouseMoveEvent(QMouseEvent* me) {
     m_widgetController->mouseMoveEvent(me);
 }
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/umlwidget.h #653640:653641
@@ -83,16 +83,6 @@
     virtual bool operator==(const UMLWidget& other);
 
     /**
-    * Write property of m_nId.
-    */
-    void setID( Uml::IDType id );
-
-    /**
-    * Read property of m_nId.
-    */
-    Uml::IDType getID() const;
-
-    /**
      * Calls the method with the same name in UMLWidgetController.
      * @see UMLWidgetController#mouseReleaseEvent
      *
@@ -594,13 +584,6 @@
     ///////////////// Data Loaded/Saved /////////////////////////////////
 
     /**
-     * This ID is only used when the UMLWidget does not have a
-     * corresponding UMLObject (i.e. the m_pObject pointer is NULL.)
-     * For UML objects, the ID from the UMLObject is used.
-     */
-    Uml::IDType m_nId;
-
-    /**
      * This flag indicates if the UMLWidget uses the Diagram FillColour
      */
     bool m_bUseFillColour;
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/widgetbase.cpp #653640:653641
@@ -5,7 +5,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   copyright (C) 2004-2006                                               *
+ *   copyright (C) 2004-2007                                               *
  *   Umbrello UML Modeller Authors <uml-devel at uml.sf.net>                  *
  ***************************************************************************/
 
@@ -55,6 +55,23 @@
     m_pObject = o;
 }
 
+void WidgetBase::setID(Uml::IDType id) {
+    if (m_pObject) {
+        if (m_pObject->getID() != Uml::id_None)
+            kWarning() << "WidgetBase::setID(): changing old UMLObject "
+            << ID2STR(m_pObject->getID()) << " to "
+            << ID2STR(id) << endl;
+        m_pObject->setID(id);
+    }
+    m_nId = id;
+}
+
+Uml::IDType WidgetBase::getID() const {
+    if (m_pObject)
+        return m_pObject->getID();
+    return m_nId;
+}
+
 QString WidgetBase::getDoc() const {
     if (m_pObject != NULL)
         return m_pObject->getDoc();
--- branches/KDE/3.5/kdesdk/umbrello/umbrello/widgetbase.h #653640:653641
@@ -5,7 +5,7 @@
  *   the Free Software Foundation; either version 2 of the License, or     *
  *   (at your option) any later version.                                   *
  *                                                                         *
- *   copyright (C) 2004-2006                                               *
+ *   copyright (C) 2004-2007                                               *
  *   Umbrello UML Modeller Authors <uml-devel at uml.sf.net>                  *
  ***************************************************************************/
 
@@ -143,6 +143,16 @@
         m_bUsesDiagramLineWidth = usesDiagramLineWidth;
     }
 
+    /**
+    * Write property of m_nId.
+    */
+    void setID( Uml::IDType id );
+
+    /**
+    * Read property of m_nId.
+    */
+    Uml::IDType getID() const;
+
     virtual void saveToXMI( QDomDocument & qDoc, QDomElement & qElement );
 
     virtual bool loadFromXMI( QDomElement & qElement );
@@ -163,6 +173,13 @@
     QString m_Doc;  ///< Only used if m_pObject is not set.
 
     /**
+     * This ID is only used when the widget does not have a
+     * corresponding UMLObject (i.e. the m_pObject pointer is NULL.)
+     * For UMLObjects, the ID from the UMLObject is used.
+     */
+    Uml::IDType m_nId;
+
+    /**
      * Color of the lines of the widget. Is saved to XMI.
      */
     QColor m_LineColour;




More information about the umbrello-devel mailing list