File indexing completed on 2024-05-19 04:54:22

0001 /*
0002     SPDX-FileCopyrightText: 2017 Nicolas Carion
0003     SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 */
0005 
0006 #include "effectfilter.hpp"
0007 #include "abstractmodel/treeitem.hpp"
0008 #include "assets/assetlist/model/assettreemodel.hpp"
0009 #include "effecttreemodel.hpp"
0010 
0011 EffectFilter::EffectFilter(QObject *parent)
0012     : AssetFilter(parent)
0013 {
0014     m_type_enabled = false;
0015 }
0016 
0017 void EffectFilter::setFilterType(bool enabled, AssetListType::AssetType type)
0018 {
0019     m_type_enabled = enabled;
0020     m_type_value = type;
0021     invalidateFilter();
0022 }
0023 
0024 void EffectFilter::reloadFilterOnFavorite()
0025 {
0026     if (m_type_enabled && m_type_value == AssetListType::AssetType::Favorites) {
0027         invalidateFilter();
0028     }
0029 }
0030 
0031 bool EffectFilter::filterType(const std::shared_ptr<TreeItem> &item) const
0032 {
0033     auto itemType = item->dataColumn(AssetTreeModel::TypeCol).value<AssetListType::AssetType>();
0034     if (itemType == AssetListType::AssetType::Hidden) {
0035         return false;
0036     }
0037     if (!m_type_enabled) {
0038         return true;
0039     }
0040     if (m_type_value == AssetListType::AssetType::Favorites) {
0041         return item->dataColumn(AssetTreeModel::FavCol).toBool();
0042     }
0043     if (m_type_value == AssetListType::AssetType::Preferred) {
0044         return item->dataColumn(AssetTreeModel::PreferredCol).toBool();
0045     }
0046     if (m_type_value == AssetListType::AssetType::Custom) {
0047         return itemType == m_type_value || itemType == AssetListType::AssetType::CustomAudio || itemType == AssetListType::Template ||
0048                itemType == AssetListType::TemplateAudio;
0049     }
0050     return itemType == m_type_value;
0051 }
0052 
0053 bool EffectFilter::applyAll(std::shared_ptr<TreeItem> item) const
0054 {
0055     if (!m_name_value.isEmpty()) {
0056         if (m_type_value == AssetListType::AssetType::Preferred) {
0057             return filterName(item);
0058         }
0059         return filterType(item) && filterName(item);
0060     } else {
0061         return filterType(item);
0062     }
0063 }