summaryrefslogtreecommitdiffstats
path: root/archivebrowsermodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'archivebrowsermodel.cpp')
-rw-r--r--archivebrowsermodel.cpp53
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;
}