From ed5de88d481c31fbad120332651eb746a0c03de3 Mon Sep 17 00:00:00 2001 From: Arno Date: Tue, 28 Dec 2010 13:32:12 +0100 Subject: Pimp my filters! Enhanced the filter function in ArchiveTreeView. The prefixes are gone. The filter mode is now selectable by menu or toolbar. Created 7 new icons, also selectable in the configuration menu. As a bonus the filter QLineEdit now comes with a QCompleter. The QStringListModel of the completer is filled in a separate thread. The QThread is only used as a resource for control. The work is done in a QObject connected to the QThread's started() signal as described in http://labs.qt.nokia.com/2006/12/04/threading-without-the-headache/ --- seriestreewidget.h | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'seriestreewidget.h') diff --git a/seriestreewidget.h b/seriestreewidget.h index fc55415..02a6693 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -12,6 +12,8 @@ #include #include #include +#include +#include class QLineEdit; class QPushButton; @@ -19,6 +21,10 @@ class QSortFilterProxyModel; class QComboBox; class QEvent; class QLabel; +class QCompleter; +class QStringListModel; +class QSqlQuery; +class QThread; class SeriesTreeModel; class SeriesTreeView; class SeriesTreeSortModel; @@ -26,13 +32,16 @@ class HoverWindow; class FilesTreeModel; class AddCoverDialog; class HoverWindow; +class CompleterProducer; class SeriesTreeWidget : public QWidget { Q_OBJECT public: + enum FilterMode { FilterSeries = 1, FilterActor = 2, FilterGenre = 3, FilterSize = 4, FilterQuality = 5, FilterFileName = 6, FilterDvdNo = 7 }; explicit SeriesTreeWidget(QWidget *parent = 0); SeriesTreeView *seriesTree() { return mView; } SeriesTreeSortModel *seriesProxy() { return mProxy; } + int filterMode() const { return mFilterMode; } public slots: void newSeries(); @@ -42,15 +51,17 @@ class SeriesTreeWidget : public QWidget { void writeSettings(); void expandCurrent(); void addCover(); + void setFilterMode(int mode); + void filter(); private slots: - void filter(); void clearFilter(); void resort(); void itemExpanded(const QModelIndex &); void itemCollaped(const QModelIndex &); void expandItems(const QStringList &items); void editItem(); + void producerFinished(QStringListModel *model); signals: void filesReload(); @@ -64,6 +75,10 @@ class SeriesTreeWidget : public QWidget { SeriesTreeModel *mModel; AddCoverDialog *mCoverDialog; QStringList mExpandedItems; + int mFilterMode; + QCompleter *mFilterCompleter; + QThread *mCompleterProducerThread; + CompleterProducer *mCompleterProducer; }; class SeriesTreeView : public QTreeView { @@ -119,4 +134,31 @@ class AddCoverDialog : public QDialog { FilesTreeModel *mFilesModel; }; +class CompleterProducer : public QObject { + Q_OBJECT + public: + CompleterProducer(int Mode = SeriesTreeWidget::FilterSeries, QObject *parent = 0); + ~CompleterProducer(); + + public slots: + void produce(); + void setMode(int mode) { mMode = mode; } + + signals: + void done(QStringListModel *model); + + private: + QStringListModel *mModel; + int mMode; + QSqlDatabase mDb; + QSqlQuery *mSeriesQuery; + QSqlQuery *mActorsQuery; + QSqlQuery *mGenresQuery; + QSqlQuery *mSizeQuery; + QSqlQuery *mQualityQuery; + QSqlQuery *mFileNameQuery; + QSqlQuery *mDvdNoQuery; + QHash mQueryHash; +}; + #endif -- cgit v1.2.3-70-g09d2