summary refs log tree commit diff
path: root/src/popups
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2020-11-25 02:10:09 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2020-11-25 19:05:12 +0100
commitbc93f24a22ca18232bec27134eedeb1316fb5e88 (patch)
tree17972de6163b71208d9763a1af2ee87086e4e678 /src/popups
parentShow userid in completer (diff)
downloadnheko-bc93f24a22ca18232bec27134eedeb1316fb5e88.tar.xz
Remove redundant user search suggestion code
Diffstat (limited to 'src/popups')
-rw-r--r--src/popups/SuggestionsPopup.cpp73
-rw-r--r--src/popups/SuggestionsPopup.h36
2 files changed, 41 insertions, 68 deletions
diff --git a/src/popups/SuggestionsPopup.cpp b/src/popups/SuggestionsPopup.cpp

index e84435b7..2650b5e6 100644 --- a/src/popups/SuggestionsPopup.cpp +++ b/src/popups/SuggestionsPopup.cpp
@@ -6,6 +6,8 @@ #include "../Utils.h" #include "../ui/Avatar.h" #include "../ui/DropShadow.h" +#include "ChatPage.h" +#include "PopupItem.h" #include "SuggestionsPopup.h" SuggestionsPopup::SuggestionsPopup(QWidget *parent) @@ -66,44 +68,6 @@ SuggestionsPopup::addRooms(const std::vector<RoomSearchResult> &rooms) } void -SuggestionsPopup::addUsers(const std::vector<SearchResult> &users) -{ - if (users.empty()) { - hide(); - return; - } - - const size_t layoutCount = layout_->count(); - const size_t userCount = users.size(); - - // Remove the extra widgets from the layout. - if (userCount < layoutCount) - removeLayoutItemsAfter(userCount - 1); - - for (size_t i = 0; i < userCount; ++i) { - auto item = layout_->itemAt(i); - - // Create a new widget if there isn't already one in that - // layout position. - if (!item) { - auto user = new UserItem(this, users.at(i).user_id); - connect(user, &UserItem::clicked, this, &SuggestionsPopup::itemSelected); - layout_->addWidget(user); - } else { - // Update the current widget with the new data. - auto userWidget = qobject_cast<UserItem *>(item->widget()); - if (userWidget) - userWidget->updateItem(users.at(i).user_id); - } - } - - resetSelection(); - adjustSize(); - - selectNextSuggestion(); -} - -void SuggestionsPopup::hoverSelection() { resetHovering(); @@ -112,6 +76,19 @@ SuggestionsPopup::hoverSelection() } void +SuggestionsPopup::selectHoveredSuggestion() +{ + const auto item = layout_->itemAt(selectedItem_); + if (!item) + return; + + const auto &widget = qobject_cast<RoomItem *>(item->widget()); + emit itemSelected(displayName(ChatPage::instance()->currentRoom(), widget->selectedText())); + + resetSelection(); +} + +void SuggestionsPopup::selectNextSuggestion() { selectedItem_++; @@ -160,3 +137,23 @@ SuggestionsPopup::paintEvent(QPaintEvent *) QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); } + +void +SuggestionsPopup::selectLastItem() +{ + selectedItem_ = layout_->count() - 1; +} + +void +SuggestionsPopup::removeLayoutItemsAfter(size_t startingPos) +{ + size_t posToRemove = layout_->count() - 1; + + QLayoutItem *item; + while (startingPos <= posToRemove && (item = layout_->takeAt(posToRemove)) != nullptr) { + delete item->widget(); + delete item; + + posToRemove = layout_->count() - 1; + } +} diff --git a/src/popups/SuggestionsPopup.h b/src/popups/SuggestionsPopup.h
index c66f2903..6a0157a1 100644 --- a/src/popups/SuggestionsPopup.h +++ b/src/popups/SuggestionsPopup.h
@@ -3,8 +3,9 @@ #include <QWidget> #include "CacheStructs.h" -#include "ChatPage.h" -#include "PopupItem.h" + +class QVBoxLayout; +class QLayoutItem; class SuggestionsPopup : public QWidget { @@ -13,22 +14,9 @@ class SuggestionsPopup : public QWidget public: explicit SuggestionsPopup(QWidget *parent = nullptr); - template<class Item> - void selectHoveredSuggestion() - { - const auto item = layout_->itemAt(selectedItem_); - if (!item) - return; - - const auto &widget = qobject_cast<Item *>(item->widget()); - emit itemSelected( - displayName(ChatPage::instance()->currentRoom(), widget->selectedText())); - - resetSelection(); - } + void selectHoveredSuggestion(); public slots: - void addUsers(const std::vector<SearchResult> &users); void addRooms(const std::vector<RoomSearchResult> &rooms); //! Move to the next available suggestion item. @@ -51,20 +39,8 @@ private: void hoverSelection(); void resetSelection() { selectedItem_ = -1; } void selectFirstItem() { selectedItem_ = 0; } - void selectLastItem() { selectedItem_ = layout_->count() - 1; } - void removeLayoutItemsAfter(size_t startingPos) - { - size_t posToRemove = layout_->count() - 1; - - QLayoutItem *item; - while (startingPos <= posToRemove && - (item = layout_->takeAt(posToRemove)) != nullptr) { - delete item->widget(); - delete item; - - posToRemove = layout_->count() - 1; - } - } + void selectLastItem(); + void removeLayoutItemsAfter(size_t startingPos); QVBoxLayout *layout_;