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 "abstracteffectitem.hpp" 0007 0008 #include "core.h" 0009 #include "effects/effectsrepository.hpp" 0010 #include "effectstackmodel.hpp" 0011 #include <KLocalizedString> 0012 #include <utility> 0013 0014 AbstractEffectItem::AbstractEffectItem(EffectItemType type, const QList<QVariant> &data, const std::shared_ptr<AbstractTreeModel> &stack, bool isRoot, 0015 bool isEnabled) 0016 : TreeItem(data, stack, isRoot) 0017 , m_effectItemType(type) 0018 , m_enabled(isEnabled) 0019 , m_effectStackEnabled(true) 0020 { 0021 } 0022 0023 void AbstractEffectItem::markEnabled(const QString &name, bool enabled) 0024 { 0025 Fun undo = [this, enabled]() { 0026 setEnabled(!enabled); 0027 return true; 0028 }; 0029 Fun redo = [this, enabled]() { 0030 setEnabled(enabled); 0031 return true; 0032 }; 0033 redo(); 0034 pCore->pushUndo(undo, redo, enabled ? i18n("Enable %1", name) : i18n("Disable %1", name)); 0035 } 0036 0037 void AbstractEffectItem::setEnabled(bool enabled) 0038 { 0039 m_enabled = enabled; 0040 updateEnable(); 0041 } 0042 0043 void AbstractEffectItem::setEffectStackEnabled(bool enabled) 0044 { 0045 if (m_effectStackEnabled == enabled) { 0046 // nothing to do 0047 return; 0048 } 0049 m_effectStackEnabled = enabled; 0050 for (int i = 0; i < childCount(); ++i) { 0051 std::static_pointer_cast<AbstractEffectItem>(child(i))->setEffectStackEnabled(enabled); 0052 } 0053 updateEnable(false); 0054 } 0055 0056 bool AbstractEffectItem::isEnabled() const 0057 { 0058 bool parentEnabled = true; 0059 if (auto ptr = std::static_pointer_cast<AbstractEffectItem>(m_parentItem.lock())) { 0060 parentEnabled = ptr->isEnabled(); 0061 } else { 0062 // Root item, always return true 0063 return true; 0064 } 0065 return m_enabled && m_effectStackEnabled && parentEnabled; 0066 } 0067 0068 EffectItemType AbstractEffectItem::effectItemType() const 0069 { 0070 return m_effectItemType; 0071 }