summary refs log tree commit diff
path: root/src/popups/SuggestionsPopup.cpp
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/SuggestionsPopup.cpp
parentShow userid in completer (diff)
downloadnheko-bc93f24a22ca18232bec27134eedeb1316fb5e88.tar.xz
Remove redundant user search suggestion code
Diffstat (limited to 'src/popups/SuggestionsPopup.cpp')
-rw-r--r--src/popups/SuggestionsPopup.cpp73
1 files changed, 35 insertions, 38 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; + } +}