summaryrefslogtreecommitdiffstats
path: root/archivebrowser.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2014-02-07 06:39:49 +0100
committerArno <am@disconnect.de>2014-02-07 06:39:49 +0100
commit9c85c8e441b5bc6bd9e6441a828599c137ea36be (patch)
treed1e3eaab343aa2d85e9ea05ce49f73ceed8be97d /archivebrowser.cpp
parent3ac6968ebaf087aeb4bb3deeb1ded2bbbd54dfa5 (diff)
downloadSheMov-9c85c8e441b5bc6bd9e6441a828599c137ea36be.tar.gz
SheMov-9c85c8e441b5bc6bd9e6441a828599c137ea36be.tar.bz2
SheMov-9c85c8e441b5bc6bd9e6441a828599c137ea36be.zip
Implement ArchiveBrowser filtering
Filter ArchiveBrowser by Quality and/or size: * Quality: only show series with a quality less or equal * Size: only show series still fitting onto the DVD * Both: only show series with a quality less or equal _and_ still fitting on the DVD Use QItemSelection instead of going through the selected items in the tree. Seems to work somehow...
Diffstat (limited to 'archivebrowser.cpp')
-rw-r--r--archivebrowser.cpp75
1 files changed, 62 insertions, 13 deletions
diff --git a/archivebrowser.cpp b/archivebrowser.cpp
index c39805b..e6a1efb 100644
--- a/archivebrowser.cpp
+++ b/archivebrowser.cpp
@@ -6,6 +6,10 @@
*/
#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QComboBox>
+#include <QCheckBox>
#include <QSortFilterProxyModel>
#include "archivebrowser.h"
@@ -14,39 +18,84 @@
#include "smglobals.h"
#include "delegates.h"
-ArchiveBrowser::ArchiveBrowser(QWidget *parent) : QWidget(parent){
+ArchiveBrowser::ArchiveBrowser(QWidget *parent) : QWidget(parent), mSelectedSize(0), mSelectedItems(0){
//prep
mModel = static_cast<ArchiveBrowserModel*>(SmGlobals::instance()->model("BrowserModel"));
- mProxy = new QSortFilterProxyModel;
+ mProxy = new ArchiveBrowserModelProxy;
mProxy->setSourceModel(mModel);
mTree = new SmTreeView;
mTree->setModel(mProxy);
mTree->setColumnHidden(ArchiveBrowserModel::GenericId, true);
mTree->setColumnHidden(ArchiveBrowserModel::NodeType, true);
- mTree->setSortingEnabled(true);
+
mTree->setItemDelegateForColumn(ArchiveBrowserModel::TotalSize, new SizeDelegate(this));
mTree->setItemDelegateForColumn(ArchiveBrowserModel::FileType, new FileTypeDelegate(this));
mTree->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ //filters
+ QHBoxLayout *filterLayout = new QHBoxLayout;
+ mQualityFilter = new QComboBox;
+ QLabel *filterL = new QLabel(tr("Filters:"));
+ QLabel *qualityL = new QLabel(tr("Quality"));
+ filterLayout->addWidget(filterL);
+ filterLayout->addWidget(qualityL);
+ setupQualityFilter();
+ connect(mQualityFilter, SIGNAL(currentIndexChanged(QString)), mProxy, SLOT(setQualityFilter(QString)));
+ filterLayout->addWidget(mQualityFilter);
+ mSizeFilter = new QCheckBox(tr("Size Filter"));
+ connect(mSizeFilter, SIGNAL(stateChanged(int)), mProxy, SLOT(setSizeFilter(int)));
+ filterLayout->addWidget(mSizeFilter);
+ filterLayout->addStretch();
+
//connect
connect(mTree->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(browserSelectionChanged(QItemSelection,QItemSelection)));
//make widget
QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addLayout(filterLayout);
mainLayout->addWidget(mTree);
setLayout(mainLayout);
+ mTree->setSortingEnabled(true);
}
void ArchiveBrowser::browserSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) {
- Q_UNUSED(selected);
- Q_UNUSED(deselected);
- QModelIndexList sel = mTree->selectionModel()->selectedRows();
- qint64 size = 0;
- int selItems = 0;
- foreach(QModelIndex idx, sel){
- size += idx.data(ArchiveBrowserModel::TotalSizeRole).toDouble();
- ++selItems;
+ QModelIndexList selectedIdx = selectedRows(selected);
+ QModelIndexList deselectedIdx = selectedRows(deselected);
+ foreach(QModelIndex sel, selectedIdx){
+ mSelectedSize += sel.data(ArchiveBrowserModel::TotalSizeRole).toDouble();
+ ++mSelectedItems;
+ mModel->setData(sel, true, ArchiveBrowserModel::SelectedRole);
+ }
+ foreach(QModelIndex desel, deselectedIdx){
+ mSelectedSize -= desel.data(ArchiveBrowserModel::TotalSizeRole).toDouble();
+ --mSelectedItems;
+ mModel->setData(desel, false, ArchiveBrowserModel::SelectedRole);
+ }
+ emit sizeChanged(mSelectedSize);
+ emit itemCountChanged(mSelectedItems);
+ qint64 remaining = Q_INT64_C(1024 * 1024 * 1024 * 4) - mSelectedSize;
+ mProxy->setBytesRemaining(remaining);
+}
+
+void ArchiveBrowser::setupQualityFilter(){
+ mQualityFilter->clear();
+ QList<int> qualities = mModel->availableQualities();
+ qSort(qualities);
+ QStringList qualityList = QStringList() << tr("(none)");
+ foreach(int q, qualities){
+ qualityList << QString::number(q);
+ }
+ mQualityFilter->addItems(qualityList);
+}
+
+QModelIndexList ArchiveBrowser::selectedRows(const QItemSelection &sel){
+ QModelIndexList retval;
+ QModelIndexList selIdx = sel.indexes();
+ foreach(QModelIndex idx, selIdx){
+ QModelIndex real = mProxy->mapToSource(idx);
+ if(real.column() == 0){
+ retval << real;
+ }
}
- emit sizeChanged(size);
- emit itemCountChanged(selItems);
+ return retval;
}