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_;
|