diff options
Diffstat (limited to 'archivebrowsermodel.cpp')
-rw-r--r-- | archivebrowsermodel.cpp | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/archivebrowsermodel.cpp b/archivebrowsermodel.cpp index 9181d3f..e572a41 100644 --- a/archivebrowsermodel.cpp +++ b/archivebrowsermodel.cpp @@ -243,6 +243,16 @@ void ArchiveBrowserModelProxy::toggleGenre(QAction *a){ invalidateFilter(); } +void ArchiveBrowserModelProxy::toggleExcludedGenre(QAction *a){ + QString text = a->text(); + if(a->isChecked()){ + mExcludedGenreFilters << text; + }else{ + mExcludedGenreFilters.removeAll(text); + } + invalidateFilter(); +} + void ArchiveBrowserModelProxy::setSizeFilter(int activate){ mSizeFilter = activate; invalidateFilter(); @@ -255,7 +265,7 @@ void ArchiveBrowserModelProxy::setBytesRemaining(qint64 bytes){ bool ArchiveBrowserModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - if(mQuality == -1 && !mSizeFilter && mGenreFilters.isEmpty()){ + if(mQuality == -1 && !mSizeFilter && mGenreFilters.isEmpty() && mExcludedGenreFilters.isEmpty()){ return true; } QModelIndex selIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Selected, sourceParent); @@ -267,37 +277,36 @@ bool ArchiveBrowserModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex if(nodeType == ArchiveBrowserModel::FileNode){ return true; } + QModelIndex genreIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Genres, sourceParent); + QStringList genres = genreIdx.data().toStringList(); + if(!mExcludedGenreFilters.isEmpty()){ + for(const QString &exg : std::as_const(mExcludedGenreFilters)){ + if(genres.contains(exg)){ + return false; + } + } + } + bool retval = true; if(!mGenreFilters.isEmpty()){ - QModelIndex genreIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Genres, sourceParent); - QStringList genres = genreIdx.data().toStringList(); for(const QString &fg : std::as_const(mGenreFilters)){ - if(genres.contains(fg)){ - return true; + if(!genres.contains(fg)){ + retval = false; } } - return false; } QModelIndex qualIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::Quality, sourceParent); int quality = qualIdx.data().toInt(); QModelIndex sizeIdx = sourceModel()->index(sourceRow, ArchiveBrowserModel::TotalSize, sourceParent); qint64 size = sizeIdx.data().toLongLong(); - if(mQuality > -1 && mSizeFilter){ - if(quality <= mQuality && size <= mBytesRemaining){ - return true; - } - return false; - } - if(mQuality > -1){ - if(quality <= mQuality){ - return true; + if(retval){ + if(quality < mQuality){ + retval = false; } - return false; - } - if(mSizeFilter){ - if(size <= mBytesRemaining){ - return true; + if(mSizeFilter){ + if(size > mBytesRemaining){ + retval = false; + } } - return false; } - return false; + return retval; } |