/** * Resolve the types referenced by our UMLEntityAttributes. * Reimplements the method from UMLClassifier. */ bool UMLEntity::resolveRef() { bool success = UMLClassifier::resolveRef(); for (UMLObjectListIt oit(m_List); oit.hasNext(); ) { UMLObject* obj = oit.next(); if (obj->resolveRef()) { UMLClassifierListItem *cli = static_cast<UMLClassifierListItem*>(obj); switch (cli->baseType() ) { case UMLObject::ot_EntityAttribute: emit entityAttributeAdded(cli); break; case UMLObject::ot_UniqueConstraint: case UMLObject::ot_ForeignKeyConstraint: emit entityConstraintAdded(cli); break; default: break; } } } return success; }
int UMLListViewItem::compare(QTreeWidgetItem *other, int col, bool ascending) const { UMLListViewItem *ulvi = static_cast<UMLListViewItem*>(other); ListViewType ourType = type(); ListViewType otherType = ulvi->type(); if (ourType < otherType) return -1; if (ourType > otherType) return 1; // ourType == otherType const bool subItem = Model_Utils::typeIsClassifierList(ourType); const int alphaOrder = key(col, ascending).compare(other->key(col, ascending)); int retval = 0; QString dbgPfx = "compare(type=" + QString::number((int)ourType) + ", self=" + text() + ", other=" + ulvi->text() + "): return "; UMLObject *otherObj = ulvi->umlObject(); if (m_object == 0) { retval = (subItem ? 1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (m_object==0)"; #endif return retval; } if (otherObj == 0) { retval = (subItem ? -1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (otherObj==0)"; #endif return retval; } UMLClassifier *ourParent = dynamic_cast<UMLClassifier*>(m_object->parent()); UMLClassifier *otherParent = dynamic_cast<UMLClassifier*>(otherObj->parent()); if (ourParent == 0) { retval = (subItem ? 1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (ourParent==0)"; #endif return retval; } if (otherParent == 0) { retval = (subItem ? -1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (otherParent==0)"; #endif return retval; } if (ourParent != otherParent) { retval = (subItem ? 0 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (ourParent != otherParent)"; #endif return retval; } UMLClassifierListItem *thisUmlItem = dynamic_cast<UMLClassifierListItem*>(m_object); UMLClassifierListItem *otherUmlItem = dynamic_cast<UMLClassifierListItem*>(otherObj); if (thisUmlItem == 0) { retval = (subItem ? 1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (thisUmlItem==0)"; #endif return retval; } if (otherUmlItem == 0) { retval = (subItem ? -1 : alphaOrder); #ifdef DEBUG_LVITEM_INSERTION_ORDER DEBUG(DBG_LVI) << dbgPfx << retval << " because (otherUmlItem==0)"; #endif return retval; } UMLClassifierListItemList items = ourParent->getFilteredList(thisUmlItem->baseType()); int myIndex = items.indexOf(thisUmlItem); int otherIndex = items.indexOf(otherUmlItem); if (myIndex < 0) { retval = (subItem ? -1 : alphaOrder); uError() << dbgPfx << retval << " because (myIndex < 0)"; return retval; } if (otherIndex < 0) { retval = (subItem ? 1 : alphaOrder); uError() << dbgPfx << retval << " because (otherIndex < 0)"; return retval; } return (myIndex < otherIndex ? -1 : myIndex > otherIndex ? 1 : 0); }