diff --git a/retroshare-gui/src/gui/common/FriendList.cpp b/retroshare-gui/src/gui/common/FriendList.cpp index b9dec4cd6..3dbdfdd13 100644 --- a/retroshare-gui/src/gui/common/FriendList.cpp +++ b/retroshare-gui/src/gui/common/FriendList.cpp @@ -88,6 +88,7 @@ #define ROLE_SORT_STANDARD_GROUP Qt::UserRole + 3 #define ROLE_SORT_NAME Qt::UserRole + 4 #define ROLE_SORT_STATE Qt::UserRole + 5 +#define ROLE_FILTER Qt::UserRole + 6 #define TYPE_GPG 0 #define TYPE_SSL 1 @@ -1049,6 +1050,9 @@ void FriendList::insertPeers() sslTextLabel->setVisible(!sslText.isEmpty()); } + // Filter + sslItem->setData(COLUMN_NAME, ROLE_FILTER, sslName); + if (std::find(privateChatIds.begin(), privateChatIds.end(), sslDetail.id) != privateChatIds.end()) { // private chat is available sslOverlayIcon = QPixmap(":/images/chat.png"); @@ -1160,6 +1164,9 @@ void FriendList::insertPeers() gpgTextLabel->setVisible(!gpgText.isEmpty()); } + // Filter + gpgItem->setData(COLUMN_NAME, ROLE_FILTER, gpgName); + gpgItem->setData(COLUMN_LAST_CONTACT, Qt::DisplayRole, showInfoAtGpgItem ? QVariant(bestLastContact) : ""); gpgItem->setData(COLUMN_LAST_CONTACT, ROLE_SORT_NAME, showInfoAtGpgItem ? QVariant(bestLastContact) : ""); gpgItem->setText(COLUMN_IP, showInfoAtGpgItem ? bestIP : ""); @@ -1189,6 +1196,9 @@ void FriendList::insertPeers() QString groupName = GroupDefs::name(*groupInfo); groupItem->setText(COLUMN_NAME, QString("%1 (%2/%3)").arg(groupName).arg(onlineCount).arg(availableCount)); + // Filter + groupItem->setData(COLUMN_NAME, ROLE_FILTER, groupName); + /* Sort data */ groupItem->setData(COLUMN_NAME, ROLE_SORT_NAME, groupName); } @@ -2254,7 +2264,7 @@ void FriendList::setShowGroups(bool show) void FriendList::filterItems(const QString &text) { mFilterText = text; - ui->peerTreeWidget->filterItems(COLUMN_NAME, mFilterText); + ui->peerTreeWidget->filterItems(COLUMN_NAME, mFilterText, ROLE_FILTER); } /** diff --git a/retroshare-gui/src/gui/common/RSTreeWidget.cpp b/retroshare-gui/src/gui/common/RSTreeWidget.cpp index 9199e832e..abbf766d3 100644 --- a/retroshare-gui/src/gui/common/RSTreeWidget.cpp +++ b/retroshare-gui/src/gui/common/RSTreeWidget.cpp @@ -81,11 +81,11 @@ void RSTreeWidget::mousePressEvent(QMouseEvent *event) QTreeWidget::mousePressEvent(event); } -void RSTreeWidget::filterItems(int filterColumn, const QString &text) +void RSTreeWidget::filterItems(int filterColumn, const QString &text, int role) { int count = topLevelItemCount(); for (int index = 0; index < count; ++index) { - filterItem(topLevelItem(index), filterColumn, text); + filterItem(topLevelItem(index), filterColumn, text, role); } QTreeWidgetItem *item = currentItem(); @@ -95,12 +95,12 @@ void RSTreeWidget::filterItems(int filterColumn, const QString &text) } } -bool RSTreeWidget::filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text) +bool RSTreeWidget::filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text, int role) { bool itemVisible = true; if (!text.isEmpty()) { - if (!item->text(filterColumn).contains(text, Qt::CaseInsensitive)) { + if (!item->data(filterColumn, role).toString().contains(text, Qt::CaseInsensitive)) { itemVisible = false; } } @@ -108,7 +108,7 @@ bool RSTreeWidget::filterItem(QTreeWidgetItem *item, int filterColumn, const QSt int visibleChildCount = 0; int count = item->childCount(); for (int index = 0; index < count; ++index) { - if (filterItem(item->child(index), filterColumn, text)) { + if (filterItem(item->child(index), filterColumn, text, role)) { ++visibleChildCount; } } diff --git a/retroshare-gui/src/gui/common/RSTreeWidget.h b/retroshare-gui/src/gui/common/RSTreeWidget.h index 7756bdea0..2261e836b 100644 --- a/retroshare-gui/src/gui/common/RSTreeWidget.h +++ b/retroshare-gui/src/gui/common/RSTreeWidget.h @@ -35,7 +35,7 @@ public: QString placeholderText() { return mPlaceholderText; } void setPlaceholderText(const QString &text); - void filterItems(int filterColumn, const QString &text); + void filterItems(int filterColumn, const QString &text, int role = Qt::DisplayRole); void setSettingsVersion(qint32 version); void processSettings(bool load); @@ -53,7 +53,7 @@ signals: void columnVisibleChanged(int column, bool visible); private: - bool filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text); + bool filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text, int role); private slots: void headerContextMenuRequested(const QPoint &pos);