summary refs log tree commit diff
path: root/src/RoomList.cc
diff options
context:
space:
mode:
authorMax Sandholm <max@sandholm.org>2018-01-09 15:07:32 +0200
committermujx <mujx@users.noreply.github.com>2018-01-09 15:07:32 +0200
commit312df6f3bbcba0ad502864b13f9c51b4854ea2ce (patch)
treed43396836cb2ba21b13f218a6d25a7c82049338b /src/RoomList.cc
parentMake usernames in timeline less bold (diff)
downloadnheko-312df6f3bbcba0ad502864b13f9c51b4854ea2ce.tar.xz
Communities (#195)
Diffstat (limited to 'src/RoomList.cc')
-rw-r--r--src/RoomList.cc53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/RoomList.cc b/src/RoomList.cc

index 0274cefe..30be6cf6 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc
@@ -47,7 +47,7 @@ RoomList::RoomList(QSharedPointer<MatrixClient> client, scrollArea_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea_->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); scrollArea_->setWidgetResizable(true); - scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignLeft | Qt::AlignVCenter); + scrollArea_->setAlignment(Qt::AlignLeading | Qt::AlignTop | Qt::AlignVCenter); scrollAreaContents_ = new QWidget(this); @@ -181,6 +181,8 @@ RoomList::setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &set if (rooms_.isEmpty()) return; + setFilterRooms(filterRooms_); + auto first_room = rooms_.first(); first_room->setPressedState(true); @@ -271,6 +273,8 @@ RoomList::highlightSelectedRoom(const QString &room_id) qobject_cast<QWidget *>(it.value().data())); } } + + selectedRoom_ = room_id; } void @@ -374,6 +378,46 @@ RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id) } void +RoomList::setFilterRooms(bool filterRooms) +{ + filterRooms_ = filterRooms; + + for (int i = 0; i < contentsLayout_->count(); i++) { + // If roomFilter_ contains the room for the current RoomInfoListItem, + // show the list item, otherwise hide it + RoomInfoListItem *listitem = + (RoomInfoListItem *)contentsLayout_->itemAt(i)->widget(); + + if (listitem != nullptr) { + if (!filterRooms) { + contentsLayout_->itemAt(i)->widget()->show(); + } else if (roomFilter_.contains(listitem->roomId())) { + contentsLayout_->itemAt(i)->widget()->show(); + } else { + contentsLayout_->itemAt(i)->widget()->hide(); + } + } + } + + if (filterRooms_ && !roomFilter_.contains(selectedRoom_)) { + RoomInfoListItem *firstVisibleRoom = nullptr; + for (int i = 0; i < contentsLayout_->count(); i++) { + QWidget *item = contentsLayout_->itemAt(i)->widget(); + if (item != nullptr && item->isVisible()) { + firstVisibleRoom = (RoomInfoListItem *)item; + break; + } + } + if (firstVisibleRoom != nullptr) { + highlightSelectedRoom(firstVisibleRoom->roomId()); + } + } else { + scrollArea_->ensureWidgetVisible( + qobject_cast<QWidget *>(rooms_.value(selectedRoom_).data())); + } +} + +void RoomList::paintEvent(QPaintEvent *) { QStyleOption opt; @@ -394,6 +438,13 @@ RoomList::syncInvites(const std::map<std::string, mtx::responses::InvitedRoom> & } void +RoomList::setRoomFilter(QList<QString> room_ids) +{ + roomFilter_ = room_ids; + setFilterRooms(true); +} + +void RoomList::addInvitedRoom(const QString &room_id, const mtx::responses::InvitedRoom &room) { auto room_item = new RoomInfoListItem(room_id, room, scrollArea_);