diff options
author | Arno <am@disconnect.de> | 2014-02-07 06:39:49 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2014-02-07 06:39:49 +0100 |
commit | 9c85c8e441b5bc6bd9e6441a828599c137ea36be (patch) | |
tree | d1e3eaab343aa2d85e9ea05ce49f73ceed8be97d /archivebrowser.cpp | |
parent | 3ac6968ebaf087aeb4bb3deeb1ded2bbbd54dfa5 (diff) | |
download | SheMov-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.cpp | 75 |
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; } |