summaryrefslogtreecommitdiffstats
path: root/archiveview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archiveview.cpp')
-rw-r--r--archiveview.cpp74
1 files changed, 70 insertions, 4 deletions
diff --git a/archiveview.cpp b/archiveview.cpp
index dc4b135..def3609 100644
--- a/archiveview.cpp
+++ b/archiveview.cpp
@@ -10,7 +10,7 @@
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
-#include <QSortFilterProxyModel>
+#include <QSettings>
#include <QSplitter>
#include <QVBoxLayout>
@@ -18,11 +18,12 @@
#include "smglobals.h"
ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
+ QSettings s;
mArchiveModel = static_cast<ArchiveModel*>(SmGlobals::instance()->model("ArchiveModel"));
- QSortFilterProxyModel *proxy = new QSortFilterProxyModel;
- proxy->setSourceModel(mArchiveModel);
+ mProxy = new ArchiveProxy;
+ mProxy->setSourceModel(mArchiveModel);
mTree = new ArchiveTree;
- mTree->setModel(proxy);
+ mTree->setModel(mProxy);
mTree->setColumnHidden(ArchiveModel::GenericId, true);
mTree->setColumnHidden(ArchiveModel::SeriesPartId, true);
mTree->setColumnHidden(ArchiveModel::SeriesPart, true);
@@ -31,13 +32,22 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
mTree->setColumnHidden(ArchiveModel::Subtitle, true);
mTree->setColumnHidden(ArchiveModel::Count, true);
mTree->resizeColumnToContents(ArchiveModel::Name);
+ QString sortOrderName = s.value("archivemodel/sortorder", "Series Name").toString();
mSortOrder = new QComboBox;
mSortOrder->addItems(mArchiveModel->availableOrders());
connect(mSortOrder, SIGNAL(currentIndexChanged(QString)), mArchiveModel, SLOT(setOrder(QString)));
+ connect(mSortOrder, SIGNAL(currentTextChanged(QString)), mArchiveModel, SLOT(setOrder(QString)));
+ mSortOrder->setCurrentText(sortOrderName);
QLabel *l1 = new QLabel(tr("Filter"));
mFilter = new QLineEdit;
+ QString savedFilter = s.value("archivemodel/filter", QString()).toString();
+ connect(mFilter, SIGNAL(returnPressed()), this, SLOT(setFilter()));
QPushButton *filter = new QPushButton(tr("Filter"));
+ connect(filter, SIGNAL(clicked()), this, SLOT(setFilter()));
QPushButton *clear = new QPushButton(tr("Clear"));
+ mFilter->setText(savedFilter);
+ connect(clear, SIGNAL(clicked()), this, SLOT(clearFilter()));
+ mProxy->setFilter(savedFilter, currentSortOrder());
QHBoxLayout *filterLayout = new QHBoxLayout;
filterLayout->addWidget(l1);
filterLayout->addWidget(mFilter);
@@ -60,8 +70,64 @@ ArchiveView::ArchiveView(QWidget *parent) : QWidget(parent) {
setLayout(mainLayout);
}
+int ArchiveView::currentSortOrder() const {
+ return mArchiveModel->availableOrdersHash().value(mSortOrder->currentText());
+}
+
+void ArchiveView::writeSettings() {
+ QSettings s;
+ s.setValue("archivemodel/sortorder", mSortOrder->currentText());
+ s.setValue("archivemodel/filter", mFilter->text());
+}
+
+void ArchiveView::setFilter(){
+ QString filter = mFilter->text();
+ mProxy->setFilter(filter, currentSortOrder());
+ mTree->expandAll();
+}
+
+void ArchiveView::clearFilter(){
+ mFilter->clear();
+ mProxy->setFilter(QString(), currentSortOrder());
+ mTree->collapseAll();
+}
+
ArchiveTree::ArchiveTree(QWidget *parent) : SmTreeView(parent) {
}
ArchiveFiles::ArchiveFiles(QWidget *parent) : SmTreeView(parent){
}
+
+ArchiveProxy::ArchiveProxy(QObject *parent) : QSortFilterProxyModel(parent) {}
+
+void ArchiveProxy::setFilter(const QString &filter, int sortOrder){
+ mFilter = QRegExp(filter);
+ mSortOrder = sortOrder;
+ invalidateFilter();
+}
+
+bool ArchiveProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
+ if(mFilter.isEmpty()){
+ return true;
+ }
+ QModelIndex nodeIdx = sourceModel()->index(sourceRow, ArchiveModel::Type, sourceParent);
+ if(mSortOrder == ArchiveModel::SeriesName){
+ if(nodeIdx.data().toInt() == ArchiveModel::SeriesNode){
+ QModelIndex nameIdx = sourceModel()->index(sourceRow, ArchiveModel::Name, sourceParent);
+ QString name = nameIdx.data().toString();
+ return name.contains(mFilter);
+ }else{
+ return true;
+ }
+ }else if(mSortOrder == ArchiveModel::Genre || mSortOrder == ArchiveModel::Actor){
+ int nodeType = nodeIdx.data().toInt();
+ if(nodeType == ArchiveModel::ActorNode || nodeType == ArchiveModel::GenreNode){
+ QModelIndex nameIdx = sourceModel()->index(sourceRow, ArchiveModel::Name, sourceParent);
+ QString name = nameIdx.data().toString();
+ return name.contains(mFilter);
+ }else{
+ return true;
+ }
+ }
+ return false;
+}