[Uml-devel] [Bug 96216] Crash when reordering attributes

Oliver Kellogg okellogg at users.sourceforge.net
Fri Jan 7 07:18:31 UTC 2005


------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
        
http://bugs.kde.org/show_bug.cgi?id=96216        




------- Additional Comments From okellogg users sourceforge net  2005-01-07 16:17 -------
CVS commit by okellogg: 

compare(): Reflect the changed attribute/operation order in the list view
 and restore it upon reload.
CCBUG:96216


  M +34 -4     umllistviewitem.cpp   1.68


--- kdesdk/umbrello/umbrello/umllistviewitem.cpp  #1.67:1.68
 @ -522,10 +522,40  @ void UMLListViewItem::cancelRename(int c
 int UMLListViewItem::compare(QListViewItem *other, int col, bool ascending) const
 {
+        UMLListViewItem *ulvi = static_cast<UMLListViewItem*>(other);
         Uml::ListView_Type ourType = getType();
-        Uml::ListView_Type otherType = static_cast<UMLListViewItem*>( other )->getType();
+        Uml::ListView_Type otherType = ulvi->getType();
 
-        if ( ourType == otherType )
+        if ( ourType == otherType ) {
+                UMLObject *otherObj = ulvi->getUMLObject();
+                if (m_pObject == NULL || otherObj == NULL)
                 return key( col, ascending ).compare( other->key( col, ascending) );
-
+                if (ourType == Uml::lvt_Attribute) {
+                        UMLClass *ourParent = dynamic_cast<UMLClass*>(m_pObject->parent());
+                        UMLClass *otherParent = dynamic_cast<UMLClass*>(otherObj->parent());
+                        if (ourParent == NULL || otherParent == NULL || ourParent != otherParent) {
+                                kdError() << "UMLListViewItem::compare(UMLAttribute): ourParent="
+                                          << ourParent << ", otherParent=" << otherParent << endl;
+                                return key( col, ascending ).compare( other->key( col, ascending) );
+                        }
+                        UMLAttributeList atts = ourParent->getAttributeList();
+                        int myIndex = atts.findRef( static_cast<UMLAttribute*>(m_pObject) );
+                        int otherIndex = atts.findRef( static_cast<UMLAttribute*>(otherObj) );
+                        return (myIndex < otherIndex ? -1 : myIndex > otherIndex ? 1 : 0);
+                } else if (ourType == Uml::lvt_Operation) {
+                        UMLClassifier *ourParent = dynamic_cast<UMLClassifier*>(m_pObject->parent());
+                        UMLClassifier *otherParent = dynamic_cast<UMLClassifier*>(otherObj->parent());
+                        if (ourParent == NULL || otherParent == NULL || ourParent != otherParent) {
+                                kdError() << "UMLListViewItem::compare(UMLOperation): ourParent="
+                                          << ourParent << ", otherParent=" << otherParent << endl;
+                                return key( col, ascending ).compare( other->key( col, ascending) );
+                        }
+                        UMLOperationList ops = ourParent->getOpList();
+                        int myIndex = ops.findRef( static_cast<UMLOperation*>(m_pObject) );
+                        int otherIndex = ops.findRef( static_cast<UMLOperation*>(otherObj) );
+                        return (myIndex < otherIndex ? -1 : myIndex > otherIndex ? 1 : 0);
+                } else {
+                        return key( col, ascending ).compare( other->key( col, ascending) );
+                }
+        }
         if ( ourType < otherType )
                 return -1;




More information about the umbrello-devel mailing list