summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--BeetPlayer.pro6
-rw-r--r--collectionwidget.cpp11
-rw-r--r--collectionwidget.h2
-rw-r--r--collectionwidgetproxy.cpp20
-rw-r--r--collectionwidgetproxy.h14
5 files changed, 44 insertions, 9 deletions
diff --git a/BeetPlayer.pro b/BeetPlayer.pro
index 66d9073..37d9542 100644
--- a/BeetPlayer.pro
+++ b/BeetPlayer.pro
@@ -41,7 +41,8 @@ SOURCES += main.cpp\
collectiondatesview.cpp \
collectionfavoritesview.cpp \
collectionwebradioview.cpp \
- collectionfoldersview.cpp
+ collectionfoldersview.cpp \
+ collectionwidgetproxy.cpp
HEADERS += beetplayer.h \
configurationdialog.h \
@@ -59,7 +60,8 @@ HEADERS += beetplayer.h \
collectiondatesview.h \
collectionfavoritesview.h \
collectionwebradioview.h \
- collectionfoldersview.h
+ collectionfoldersview.h \
+ collectionwidgetproxy.h
LIBS += -ltag
diff --git a/collectionwidget.cpp b/collectionwidget.cpp
index 0066e22..af75520 100644
--- a/collectionwidget.cpp
+++ b/collectionwidget.cpp
@@ -7,13 +7,14 @@
#include <QVBoxLayout>
#include "collectionwidget.h"
+#include "collectionwidgetproxy.h"
CollectionWidget::CollectionWidget(QWidget *parent) : QWidget(parent){
mView = new QTreeView;
mModel = new QStandardItemModel(this);
- mProxy = new QSortFilterProxyModel(this);
- mProxy->setSourceModel(mModel);
- mView->setModel(mProxy);
+ CollectionWidgetProxy *proxy = new CollectionWidgetProxy(this);
+ proxy->setSourceModel(mModel);
+ mView->setModel(proxy);
mView->setSortingEnabled(true);
mView->setAlternatingRowColors(true);
QGroupBox *filterGB = new QGroupBox(tr("Filter"));
@@ -22,10 +23,10 @@ CollectionWidget::CollectionWidget(QWidget *parent) : QWidget(parent){
filterGBL->addWidget(mFilter);
QToolBar *filterTB = new QToolBar;
QAction *clearFilter = new QAction(QIcon(":/clean_tampon.png"), tr("Clear filter"), this);
- connect(clearFilter, &QAction::triggered, [this] { mFilter->clear(); proxy()->setFilterRegExp("");} );
+ connect(clearFilter, &QAction::triggered, [this, proxy] { mFilter->clear(); proxy->setFilterRegExp("");} );
filterTB->addAction(clearFilter);
QAction *activateFilter = new QAction(QIcon(":/stomp.png"), tr("Filter!"), this);
- connect(activateFilter, &QAction::triggered, [this] { proxy()->setFilterRegExp(mFilter->text());} );
+ connect(activateFilter, &QAction::triggered, [this, proxy] { proxy->setFilterRegExp(mFilter->text());} );
connect(mFilter, &QLineEdit::returnPressed, activateFilter, &QAction::trigger);
filterTB->addAction(activateFilter);
filterGBL->addWidget(filterTB);
diff --git a/collectionwidget.h b/collectionwidget.h
index e2aaa02..33799eb 100644
--- a/collectionwidget.h
+++ b/collectionwidget.h
@@ -16,7 +16,6 @@ class CollectionWidget : public QWidget {
explicit CollectionWidget(QWidget *parent = nullptr);
QTreeView *view() { return mView; }
QStandardItemModel *model() { return mModel; }
- QSortFilterProxyModel *proxy() { return mProxy; }
void setHeaders(const QStringList headers) { mHeaders = headers; }
const QStringList headers() const { return mHeaders; }
void disableSorting() { mView->setSortingEnabled(false); }
@@ -30,7 +29,6 @@ class CollectionWidget : public QWidget {
private:
QTreeView *mView;
QStandardItemModel *mModel;
- QSortFilterProxyModel *mProxy;
QLineEdit *mFilter;
QStringList mHeaders;
diff --git a/collectionwidgetproxy.cpp b/collectionwidgetproxy.cpp
new file mode 100644
index 0000000..b3427b2
--- /dev/null
+++ b/collectionwidgetproxy.cpp
@@ -0,0 +1,20 @@
+#include <QStandardItemModel>
+
+#include "collectionwidgetproxy.h"
+
+CollectionWidgetProxy::CollectionWidgetProxy(QObject *parent) : QSortFilterProxyModel(parent) {
+}
+
+bool CollectionWidgetProxy::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {
+ const QStandardItemModel *srcM = qobject_cast<const QStandardItemModel*>(sourceModel());
+ QModelIndex rootIdx = srcM->invisibleRootItem()->index();
+ QModelIndex curIdx = srcM->index(source_row, 0, source_parent);
+ if(curIdx == rootIdx){
+ return true;
+ }
+ while(curIdx.parent() != rootIdx){
+ curIdx = curIdx.parent();
+ }
+ QString cur = curIdx.data().toString();
+ return cur.contains(filterRegExp());
+}
diff --git a/collectionwidgetproxy.h b/collectionwidgetproxy.h
new file mode 100644
index 0000000..d67f615
--- /dev/null
+++ b/collectionwidgetproxy.h
@@ -0,0 +1,14 @@
+#ifndef COLLECTIONWIDGETPROXY_H
+#define COLLECTIONWIDGETPROXY_H
+
+#include <QSortFilterProxyModel>
+
+class CollectionWidgetProxy : public QSortFilterProxyModel {
+ public:
+ CollectionWidgetProxy(QObject *parent = nullptr);
+
+ protected:
+ bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
+};
+
+#endif // COLLECTIONWIDGETPROXY_H