Ver código fonte

tag search: add comboBox for searching (#2628)

Co-authored-by: schips <[email protected]>
Schips 2 meses atrás
pai
commit
32bbdcb04b
2 arquivos alterados com 41 adições e 0 exclusões
  1. 35 0
      src/widgets/tagexplorer.cpp
  2. 6 0
      src/widgets/tagexplorer.h

+ 35 - 0
src/widgets/tagexplorer.cpp

@@ -9,8 +9,11 @@
 #include <QDebug>
 #include <QTimer>
 #include <QAbstractItemModel>
+#include <QLineEdit>
+#include <QCompleter>
 
 #include "titlebar.h"
+#include "propertydefs.h"
 
 #include <utils/widgetutils.h>
 #include <utils/iconutils.h>
@@ -57,6 +60,18 @@ void TagExplorer::setupUI()
     setupTitleBar(this);
     mainLayout->addWidget(m_titleBar);
 
+    m_tagSearchEdit = WidgetsFactory::createComboBox(this);
+    m_tagSearchEdit->setEditable(true);
+    m_tagSearchEdit->setLineEdit(WidgetsFactory::createLineEdit(this));
+    m_tagSearchEdit->lineEdit()->setProperty(PropertyDefs::c_embeddedLineEdit, true);
+    m_tagSearchEdit->lineEdit()->setPlaceholderText(tr(""));
+    m_tagSearchEdit->lineEdit()->setClearButtonEnabled(true);
+    m_tagSearchEdit->completer()->setCaseSensitivity(Qt::CaseSensitive);
+
+    connect(m_tagSearchEdit->lineEdit(), &QLineEdit::textChanged, this, &TagExplorer::filterTags);
+
+    mainLayout->addWidget(m_tagSearchEdit);
+
     m_splitter = new QSplitter(this);
     mainLayout->addWidget(m_splitter);
 
@@ -531,3 +546,23 @@ void TagExplorer::scrollToTag(const QString &p_name)
         m_tagTree->scrollToItem(item);
     }
 }
+
+void TagExplorer::filterTags(const QString &p_text)
+{
+    std::function<void(QTreeWidgetItem*)> processItem = [&](QTreeWidgetItem *p_item) {
+        bool show = p_item->text(Column::Name).contains(p_text, Qt::CaseInsensitive);
+
+        for (int i = 0; i < p_item->childCount(); ++i) {
+            processItem(p_item->child(i));
+            if (!p_item->child(i)->isHidden()) {
+                show = true;
+            }
+        }
+
+        p_item->setHidden(!show);
+    };
+
+    for (int i = 0; i < m_tagTree->topLevelItemCount(); ++i) {
+        processItem(m_tagTree->topLevelItem(i));
+    }
+}

+ 6 - 0
src/widgets/tagexplorer.h

@@ -4,6 +4,8 @@
 #include <QFrame>
 #include <QSharedPointer>
 #include <QScopedPointer>
+#include <QComboBox>
+
 
 #include "navigationmodewrapper.h"
 
@@ -40,6 +42,8 @@ namespace vnotex
 
         void handleTagMoved(QTreeWidgetItem *p_item);
 
+        void filterTags(const QString &p_text);
+
     private:
         enum Column { Name = 0 };
 
@@ -99,6 +103,8 @@ namespace vnotex
         QIcon m_tagIcon;
 
         QIcon m_nodeIcon;
+
+        QComboBox *m_tagSearchEdit = nullptr;
     };
 }