Skip to content

Commit 32bbdcb

Browse files
Schips-WongSugarWong97
authored andcommitted
tag search: add comboBox for searching (#2628)
Co-authored-by: schips <schips@dingtalk.com>
1 parent e2caf50 commit 32bbdcb

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/widgets/tagexplorer.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99
#include <QDebug>
1010
#include <QTimer>
1111
#include <QAbstractItemModel>
12+
#include <QLineEdit>
13+
#include <QCompleter>
1214

1315
#include "titlebar.h"
16+
#include "propertydefs.h"
1417

1518
#include <utils/widgetutils.h>
1619
#include <utils/iconutils.h>
@@ -57,6 +60,18 @@ void TagExplorer::setupUI()
5760
setupTitleBar(this);
5861
mainLayout->addWidget(m_titleBar);
5962

63+
m_tagSearchEdit = WidgetsFactory::createComboBox(this);
64+
m_tagSearchEdit->setEditable(true);
65+
m_tagSearchEdit->setLineEdit(WidgetsFactory::createLineEdit(this));
66+
m_tagSearchEdit->lineEdit()->setProperty(PropertyDefs::c_embeddedLineEdit, true);
67+
m_tagSearchEdit->lineEdit()->setPlaceholderText(tr(""));
68+
m_tagSearchEdit->lineEdit()->setClearButtonEnabled(true);
69+
m_tagSearchEdit->completer()->setCaseSensitivity(Qt::CaseSensitive);
70+
71+
connect(m_tagSearchEdit->lineEdit(), &QLineEdit::textChanged, this, &TagExplorer::filterTags);
72+
73+
mainLayout->addWidget(m_tagSearchEdit);
74+
6075
m_splitter = new QSplitter(this);
6176
mainLayout->addWidget(m_splitter);
6277

@@ -531,3 +546,23 @@ void TagExplorer::scrollToTag(const QString &p_name)
531546
m_tagTree->scrollToItem(item);
532547
}
533548
}
549+
550+
void TagExplorer::filterTags(const QString &p_text)
551+
{
552+
std::function<void(QTreeWidgetItem*)> processItem = [&](QTreeWidgetItem *p_item) {
553+
bool show = p_item->text(Column::Name).contains(p_text, Qt::CaseInsensitive);
554+
555+
for (int i = 0; i < p_item->childCount(); ++i) {
556+
processItem(p_item->child(i));
557+
if (!p_item->child(i)->isHidden()) {
558+
show = true;
559+
}
560+
}
561+
562+
p_item->setHidden(!show);
563+
};
564+
565+
for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {
566+
processItem(m_tagTree->topLevelItem(i));
567+
}
568+
}

src/widgets/tagexplorer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#include <QFrame>
55
#include <QSharedPointer>
66
#include <QScopedPointer>
7+
#include <QComboBox>
8+
79

810
#include "navigationmodewrapper.h"
911

@@ -40,6 +42,8 @@ namespace vnotex
4042

4143
void handleTagMoved(QTreeWidgetItem *p_item);
4244

45+
void filterTags(const QString &p_text);
46+
4347
private:
4448
enum Column { Name = 0 };
4549

@@ -99,6 +103,8 @@ namespace vnotex
99103
QIcon m_tagIcon;
100104

101105
QIcon m_nodeIcon;
106+
107+
QComboBox *m_tagSearchEdit = nullptr;
102108
};
103109
}
104110

0 commit comments

Comments
 (0)