diff options
Diffstat (limited to 'Swift/QtUI/Roster')
-rw-r--r-- | Swift/QtUI/Roster/QtTreeWidget.cpp | 26 | ||||
-rw-r--r-- | Swift/QtUI/Roster/RosterModel.cpp | 27 | ||||
-rw-r--r-- | Swift/QtUI/Roster/RosterModel.h | 2 |
3 files changed, 20 insertions, 35 deletions
diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp index 997c1f6..6ace3df 100644 --- a/Swift/QtUI/Roster/QtTreeWidget.cpp +++ b/Swift/QtUI/Roster/QtTreeWidget.cpp @@ -100,32 +100,16 @@ void QtTreeWidget::handleCollapsed(const QModelIndex& index) { } void QtTreeWidget::handleModelItemExpanded(const QModelIndex& index, bool shouldExpand) { - if (this->isExpanded(index) == shouldExpand) { + if (!index.isValid()) { return; } - //setExpanded(index, shouldExpand); - if (shouldExpand) { - expand(index); - emit expanded(index); - } else { - collapse(index); - emit collapsed(index); + bool alreadyRight = this->isExpanded(index) == shouldExpand; + if (alreadyRight) { + return; } + setExpanded(index, shouldExpand); } -// void QtTreeWidget::handleDataChanged(const QModelIndex& topLeft, const QModelIndex& /*bottomRight*/) { -// //in our model, this is only thrown with topLeft == bottomRight -// if (!topLeft.isValid()) { -// return; -// } -// QtTreeWidgetItem* qtItem = static_cast<QtTreeWidgetItem*>(topLeft.internalPointer()); -// if (qtItem) { -// setExpanded(topLeft, qtItem->isExpanded()); -// //qDebug() << "Item changed, passing expanded state to view: " << qtItem->isExpanded() << " giving an expanded state of " << isExpanded(topLeft); -// } - -// } - void QtTreeWidget::drawBranches(QPainter*, const QRect&, const QModelIndex&) const { } diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp index 12cedda..e5a938e 100644 --- a/Swift/QtUI/Roster/RosterModel.cpp +++ b/Swift/QtUI/Roster/RosterModel.cpp @@ -33,31 +33,26 @@ void RosterModel::setRoster(Roster* roster) { if (!roster_) return; roster->onChildrenChanged.connect(boost::bind(&RosterModel::handleChildrenChanged, this, _1)); roster->onDataChanged.connect(boost::bind(&RosterModel::handleDataChanged, this, _1)); - roster->onGroupAdded.connect(boost::bind(&RosterModel::handleGroupAdded, this, _1)); - emit layoutChanged(); -} - -void RosterModel::handleGroupAdded(GroupRosterItem* group) { - emit itemExpanded(index(group), group->isExpanded()); + reLayout(); } -void RosterModel::handleChildrenChanged(GroupRosterItem* group) { - foreach (RosterItem* item, group->getDisplayedChildren()) { +void RosterModel::reLayout() { + emit layoutChanged(); + foreach (RosterItem* item, roster_->getRoot()->getDisplayedChildren()) { GroupRosterItem* child = dynamic_cast<GroupRosterItem*>(item); if (!child) continue; emit itemExpanded(index(child), child->isExpanded()); } - emit layoutChanged(); +} + +void RosterModel::handleChildrenChanged(GroupRosterItem* /*group*/) { + reLayout(); } void RosterModel::handleDataChanged(RosterItem* item) { Q_ASSERT(item); QModelIndex modelIndex = index(item); if (modelIndex.isValid()) { - GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); - if (group) { - emit itemExpanded(modelIndex, group->isExpanded()); - } emit dataChanged(modelIndex, modelIndex); } } @@ -167,6 +162,12 @@ QModelIndex RosterModel::index(int row, int column, const QModelIndex& parent) c QModelIndex RosterModel::index(RosterItem* item) const { GroupRosterItem* parent = item->getParent(); + /* Recursive check that it's ok to create such an item + Assuming there are more contacts in a group than groups in a + group, this could save a decent chunk of search time at startup.*/ + if (parent != roster_->getRoot() && !index(parent).isValid()) { + return QModelIndex(); + } for (size_t i = 0; i < parent->getDisplayedChildren().size(); i++) { if (parent->getDisplayedChildren()[i] == item) { return createIndex(i, 0, item); diff --git a/Swift/QtUI/Roster/RosterModel.h b/Swift/QtUI/Roster/RosterModel.h index 10aeccd..4d9e03c 100644 --- a/Swift/QtUI/Roster/RosterModel.h +++ b/Swift/QtUI/Roster/RosterModel.h @@ -39,7 +39,6 @@ namespace Swift { private: void handleDataChanged(RosterItem* item); void handleChildrenChanged(GroupRosterItem* item); - void handleGroupAdded(GroupRosterItem* group); RosterItem* getItem(const QModelIndex& index) const; QColor intToColor(int color) const; QColor getTextColor(RosterItem* item) const; @@ -49,6 +48,7 @@ namespace Swift { QString getStatusText(RosterItem* item) const; QIcon getPresenceIcon(RosterItem* item) const; int getChildCount(RosterItem* item) const; + void reLayout(); Roster* roster_; QtTreeWidget* view_; }; |