1 /*
2     SPDX-FileCopyrightText: 2017 Nicolas Carion
3     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
4 */
5 
6 #include "effectfilter.hpp"
7 #include "abstractmodel/treeitem.hpp"
8 #include "assets/assetlist/model/assettreemodel.hpp"
9 #include "effecttreemodel.hpp"
10 
EffectFilter(QObject * parent)11 EffectFilter::EffectFilter(QObject *parent)
12     : AssetFilter(parent)
13 {
14     m_type_enabled = false;
15 }
16 
setFilterType(bool enabled,AssetListType::AssetType type)17 void EffectFilter::setFilterType(bool enabled, AssetListType::AssetType type)
18 {
19     m_type_enabled = enabled;
20     m_type_value = type;
21     invalidateFilter();
22 }
23 
reloadFilterOnFavorite()24 void EffectFilter::reloadFilterOnFavorite()
25 {
26     if (m_type_enabled && m_type_value == AssetListType::AssetType::Favorites) {
27         invalidateFilter();
28     }
29 }
30 
filterType(const std::shared_ptr<TreeItem> & item) const31 bool EffectFilter::filterType(const std::shared_ptr<TreeItem> &item) const
32 {
33     auto itemType = item->dataColumn(AssetTreeModel::typeCol).value<AssetListType::AssetType>();
34     if (itemType == AssetListType::AssetType::Hidden) {
35         return false;
36     }
37     if (!m_type_enabled) {
38         return true;
39     }
40     if (m_type_value == AssetListType::AssetType::Favorites) {
41         return item->dataColumn(AssetTreeModel::favCol).toBool();
42     }
43     if (m_type_value == AssetListType::AssetType::Preferred) {
44         return item->dataColumn(AssetTreeModel::preferredCol).toBool();
45     }
46     if (m_type_value == AssetListType::AssetType::Custom) {
47         return itemType == m_type_value || itemType == AssetListType::AssetType::CustomAudio;
48     }
49     return itemType == m_type_value;
50 }
51 
applyAll(std::shared_ptr<TreeItem> item) const52 bool EffectFilter::applyAll(std::shared_ptr<TreeItem> item) const
53 {
54     if (!m_name_value.isEmpty()) {
55         if (m_type_value == AssetListType::AssetType::Preferred) {
56             return filterName(item);
57         }
58         return filterType(item) && filterName(item);
59     } else {
60         return filterType(item);
61     }
62 }
63