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 }