summary refs log tree commit diff
path: root/src/RoomList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/RoomList.cpp')
-rw-r--r--src/RoomList.cpp53
1 files changed, 30 insertions, 23 deletions
diff --git a/src/RoomList.cpp b/src/RoomList.cpp

index a9328984..771081b9 100644 --- a/src/RoomList.cpp +++ b/src/RoomList.cpp
@@ -56,6 +56,8 @@ RoomList::RoomList(QSharedPointer<UserSettings> userSettings, QWidget *parent) scrollArea_->setWidget(scrollAreaContents_); topLayout_->addWidget(scrollArea_); + qRegisterMetaType<std::map<QString, bool>>(); + connect(this, &RoomList::updateRoomAvatarCb, this, &RoomList::updateRoomAvatar); } @@ -340,10 +342,21 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias) } void -RoomList::setFilterRooms(bool isFilteringEnabled) +RoomList::removeFilter() +{ + for (int i = 0; i < contentsLayout_->count(); i++) { + auto widget = + qobject_cast<RoomInfoListItem *>(contentsLayout_->itemAt(i)->widget()); + if (widget) + widget->show(); + } +} + +void +RoomList::applyFilter(const std::map<QString, bool> &filter) { for (int i = 0; i < contentsLayout_->count(); i++) { - // If roomFilter_ contains the room for the current RoomInfoListItem, + // If filter contains the room for the current RoomInfoListItem, // show the list item, otherwise hide it auto listitem = qobject_cast<RoomInfoListItem *>(contentsLayout_->itemAt(i)->widget()); @@ -351,28 +364,29 @@ RoomList::setFilterRooms(bool isFilteringEnabled) if (!listitem) continue; - if (!isFilteringEnabled || filterItemExists(listitem->roomId())) + if (filter.find(listitem->roomId()) != filter.end()) listitem->show(); else listitem->hide(); } - if (isFilteringEnabled && !filterItemExists(selectedRoom_)) { - RoomInfoListItem *firstVisibleRoom = nullptr; + // If the already selected room is part of the group, make sure it's visible. + if (!selectedRoom_.isEmpty() && (filter.find(selectedRoom_) != filter.end())) + return; + + selectFirstVisibleRoom(); +} - for (int i = 0; i < contentsLayout_->count(); i++) { - QWidget *item = contentsLayout_->itemAt(i)->widget(); +void +RoomList::selectFirstVisibleRoom() +{ + for (int i = 0; i < contentsLayout_->count(); i++) { + auto item = qobject_cast<RoomInfoListItem *>(contentsLayout_->itemAt(i)->widget()); - if (item != nullptr && item->isVisible()) { - firstVisibleRoom = qobject_cast<RoomInfoListItem *>(item); - break; - } + if (item && item->isVisible()) { + highlightSelectedRoom(item->roomId()); + break; } - - if (firstVisibleRoom != nullptr) - highlightSelectedRoom(firstVisibleRoom->roomId()); - } else { - scrollArea_->ensureWidgetVisible(rooms_[selectedRoom_].data()); } } @@ -405,13 +419,6 @@ RoomList::updateRoom(const QString &room_id, const RoomInfo &info) } void -RoomList::setRoomFilter(std::vector<QString> room_ids) -{ - roomFilter_ = room_ids; - setFilterRooms(true); -} - -void RoomList::addInvitedRoom(const QString &room_id, const RoomInfo &info) { auto room_item = new RoomInfoListItem(room_id, info, scrollArea_);