diff options
-rw-r--r-- | BeetPlayer.pro | 6 | ||||
-rw-r--r-- | collectionwidget.cpp | 11 | ||||
-rw-r--r-- | collectionwidget.h | 2 | ||||
-rw-r--r-- | collectionwidgetproxy.cpp | 20 | ||||
-rw-r--r-- | collectionwidgetproxy.h | 14 |
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 |