Fixed filter in FriendList.

This commit is contained in:
thunder2 2015-08-26 19:26:20 +02:00
parent 217c9b9538
commit 641a433f97
3 changed files with 18 additions and 8 deletions

View File

@ -88,6 +88,7 @@
#define ROLE_SORT_STANDARD_GROUP Qt::UserRole + 3 #define ROLE_SORT_STANDARD_GROUP Qt::UserRole + 3
#define ROLE_SORT_NAME Qt::UserRole + 4 #define ROLE_SORT_NAME Qt::UserRole + 4
#define ROLE_SORT_STATE Qt::UserRole + 5 #define ROLE_SORT_STATE Qt::UserRole + 5
#define ROLE_FILTER Qt::UserRole + 6
#define TYPE_GPG 0 #define TYPE_GPG 0
#define TYPE_SSL 1 #define TYPE_SSL 1
@ -1049,6 +1050,9 @@ void FriendList::insertPeers()
sslTextLabel->setVisible(!sslText.isEmpty()); sslTextLabel->setVisible(!sslText.isEmpty());
} }
// Filter
sslItem->setData(COLUMN_NAME, ROLE_FILTER, sslName);
if (std::find(privateChatIds.begin(), privateChatIds.end(), sslDetail.id) != privateChatIds.end()) { if (std::find(privateChatIds.begin(), privateChatIds.end(), sslDetail.id) != privateChatIds.end()) {
// private chat is available // private chat is available
sslOverlayIcon = QPixmap(":/images/chat.png"); sslOverlayIcon = QPixmap(":/images/chat.png");
@ -1160,6 +1164,9 @@ void FriendList::insertPeers()
gpgTextLabel->setVisible(!gpgText.isEmpty()); 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, Qt::DisplayRole, showInfoAtGpgItem ? QVariant(bestLastContact) : "");
gpgItem->setData(COLUMN_LAST_CONTACT, ROLE_SORT_NAME, showInfoAtGpgItem ? QVariant(bestLastContact) : ""); gpgItem->setData(COLUMN_LAST_CONTACT, ROLE_SORT_NAME, showInfoAtGpgItem ? QVariant(bestLastContact) : "");
gpgItem->setText(COLUMN_IP, showInfoAtGpgItem ? bestIP : ""); gpgItem->setText(COLUMN_IP, showInfoAtGpgItem ? bestIP : "");
@ -1189,6 +1196,9 @@ void FriendList::insertPeers()
QString groupName = GroupDefs::name(*groupInfo); QString groupName = GroupDefs::name(*groupInfo);
groupItem->setText(COLUMN_NAME, QString("%1 (%2/%3)").arg(groupName).arg(onlineCount).arg(availableCount)); groupItem->setText(COLUMN_NAME, QString("%1 (%2/%3)").arg(groupName).arg(onlineCount).arg(availableCount));
// Filter
groupItem->setData(COLUMN_NAME, ROLE_FILTER, groupName);
/* Sort data */ /* Sort data */
groupItem->setData(COLUMN_NAME, ROLE_SORT_NAME, groupName); groupItem->setData(COLUMN_NAME, ROLE_SORT_NAME, groupName);
} }
@ -2254,7 +2264,7 @@ void FriendList::setShowGroups(bool show)
void FriendList::filterItems(const QString &text) void FriendList::filterItems(const QString &text)
{ {
mFilterText = text; mFilterText = text;
ui->peerTreeWidget->filterItems(COLUMN_NAME, mFilterText); ui->peerTreeWidget->filterItems(COLUMN_NAME, mFilterText, ROLE_FILTER);
} }
/** /**

View File

@ -81,11 +81,11 @@ void RSTreeWidget::mousePressEvent(QMouseEvent *event)
QTreeWidget::mousePressEvent(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(); int count = topLevelItemCount();
for (int index = 0; index < count; ++index) { for (int index = 0; index < count; ++index) {
filterItem(topLevelItem(index), filterColumn, text); filterItem(topLevelItem(index), filterColumn, text, role);
} }
QTreeWidgetItem *item = currentItem(); 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; bool itemVisible = true;
if (!text.isEmpty()) { if (!text.isEmpty()) {
if (!item->text(filterColumn).contains(text, Qt::CaseInsensitive)) { if (!item->data(filterColumn, role).toString().contains(text, Qt::CaseInsensitive)) {
itemVisible = false; itemVisible = false;
} }
} }
@ -108,7 +108,7 @@ bool RSTreeWidget::filterItem(QTreeWidgetItem *item, int filterColumn, const QSt
int visibleChildCount = 0; int visibleChildCount = 0;
int count = item->childCount(); int count = item->childCount();
for (int index = 0; index < count; ++index) { for (int index = 0; index < count; ++index) {
if (filterItem(item->child(index), filterColumn, text)) { if (filterItem(item->child(index), filterColumn, text, role)) {
++visibleChildCount; ++visibleChildCount;
} }
} }

View File

@ -35,7 +35,7 @@ public:
QString placeholderText() { return mPlaceholderText; } QString placeholderText() { return mPlaceholderText; }
void setPlaceholderText(const QString &text); 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 setSettingsVersion(qint32 version);
void processSettings(bool load); void processSettings(bool load);
@ -53,7 +53,7 @@ signals:
void columnVisibleChanged(int column, bool visible); void columnVisibleChanged(int column, bool visible);
private: private:
bool filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text); bool filterItem(QTreeWidgetItem *item, int filterColumn, const QString &text, int role);
private slots: private slots:
void headerContextMenuRequested(const QPoint &pos); void headerContextMenuRequested(const QPoint &pos);