int UMLListViewFinder::collect(Category category, const QString &text) { Q_UNUSED(category); QList<QTreeWidgetItem*> items = UMLApp::app()->listView()->findItems(text, Qt::MatchContains | Qt::MatchRecursive); m_items.clear(); foreach(QTreeWidgetItem *item, items) { UMLListViewItem *ui = dynamic_cast<UMLListViewItem *>(item); if (!ui) continue; UMLObject *o = ui->umlObject(); if (!includeObject(category, o)) continue; m_items.append(o->id()); }
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); }