[Uml-devel] kdesdk/umbrello

Oliver Kellogg okellogg at users.sourceforge.net
Sun Jan 9 11:33:09 UTC 2005


CVS commit by okellogg: 

moveObject(): Add missing m_doc->addUMLObject() when new parent is the
Logical View.  I am stunned that this could go unnoticed for so long!
Thanks to Jonathan for the backtrace which helped pinpoint the problem.
BUG:95954


  M +1 -1      ChangeLog   1.57
  M +17 -4     umbrello/umllistview.cpp   1.143


--- kdesdk/umbrello/ChangeLog  #1.56:1.57
@@ -23,5 +23,5 @@
 91433 91434 91494 91869 91922 92116 92123 92222 92300 92301
 92781 92995 93122 93219 93297 93501 93595 93696 94173 94728
-94795 94883 95082 95252 95722 95924 95951 96216 96221
+94795 94883 95082 95252 95722 95924 95951 95954 96216 96221
 
 Version 1.3

--- kdesdk/umbrello/umbrello/umllistview.cpp  #1.142:1.143
@@ -1056,11 +1056,24 @@ UMLListViewItem * UMLListView::moveObjec
                 return NULL;
 
+        UMLObject *newParentObj = NULL;
         // Remove the source object at the old parent package.
         UMLObject *srcObj = m_doc->findObjectById(srcId);
         if (srcObj) {
+                newParentObj = newParent->getUMLObject();
+                if (srcObj == newParentObj) {
+                        kdError() << "UMLListView::moveObject(" << srcObj->getName()
+                                  << "): Cannot move onto self" << endl;
+                        return NULL;
+                }
                 UMLPackage *srcPkg = srcObj->getUMLPackage();
-                if (srcPkg)
+                if (srcPkg) {
+                        if (srcPkg == newParentObj) {
+                                kdError() << "UMLListView::moveObject(" << srcObj->getName()
+                                          << "): Object is already in target package" << endl;
+                                return NULL;
+                        }
                         srcPkg->removeObject(srcObj);
         }
+        }
 
         Uml::ListView_Type newParentType = newParent->getType();
@@ -1140,10 +1153,10 @@ UMLListViewItem * UMLListView::moveObjec
                                            newParentType == Uml::lvt_Interface ||
                                            newParentType == Uml::lvt_Class) {
-                                        UMLPackage *pkg = static_cast<UMLPackage*>(
-                                                           newParent->getUMLObject() );
+                                        UMLPackage *pkg = static_cast<UMLPackage*>(newParentObj);
                                         o->setUMLPackage( pkg );
                                         pkg->addObject( o );
                                 } else {
                                         o->setUMLPackage( NULL );
+                                        m_doc->addUMLObject( o );
                                 }
                         }
@@ -1159,5 +1172,5 @@ void UMLListView::slotDropped(QDropEvent
                 //kdDebug() << "UMLListView::slotDropped: item is NULL - setting to currentItem()"
                 //        << endl;
-                item = (UMLListViewItem *)currentItem();
+                item = currentItem();
         }
         UMLDrag::LvTypeAndID_List srcList;






More information about the umbrello-devel mailing list