File indexing completed on 2024-05-12 15:58:24

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_layer_properties_icons.h"
0008 
0009 #include <QMap>
0010 
0011 #include <QGlobalStatic>
0012 Q_GLOBAL_STATIC(KisLayerPropertiesIcons, s_instance)
0013 
0014 #include <kis_icon_utils.h>
0015 #include <kis_node.h>
0016 #include <commands/kis_node_property_list_command.h>
0017 #include "kis_image.h"
0018 
0019 
0020 const KoID KisLayerPropertiesIcons::locked("locked", ki18n("Locked"));
0021 const KoID KisLayerPropertiesIcons::visible("visible", ki18n("Visible"));
0022 const KoID KisLayerPropertiesIcons::layerStyle("layer-style", ki18n("Layer Style"));
0023 const KoID KisLayerPropertiesIcons::inheritAlpha("inherit-alpha", ki18n("Inherit Alpha"));
0024 const KoID KisLayerPropertiesIcons::alphaLocked("alpha-locked", ki18n("Alpha Locked"));
0025 const KoID KisLayerPropertiesIcons::onionSkins("onion-skins", ki18n("Onion Skins"));
0026 const KoID KisLayerPropertiesIcons::passThrough("pass-through", ki18n("Pass Through"));
0027 const KoID KisLayerPropertiesIcons::selectionActive("selection-active", ki18n("Active"));
0028 const KoID KisLayerPropertiesIcons::colorLabelIndex("color-label", ki18n("Color Label"));
0029 const KoID KisLayerPropertiesIcons::colorizeNeedsUpdate("colorize-needs-update", ki18n("Update Result"));
0030 const KoID KisLayerPropertiesIcons::colorizeEditKeyStrokes("colorize-show-key-strokes", ki18n("Edit Key Strokes"));
0031 const KoID KisLayerPropertiesIcons::colorizeShowColoring("colorize-show-coloring", ki18n("Show Coloring"));
0032 const KoID KisLayerPropertiesIcons::openFileLayerFile("open-file-layer-file", ki18n("Open File"));
0033 const KoID KisLayerPropertiesIcons::layerError("layer-error", ki18n("Error"));
0034 
0035 struct IconsPair {
0036     IconsPair() {}
0037     IconsPair(const QIcon &_on, const QIcon &_off) : on(_on), off(_off) {}
0038 
0039     QIcon on;
0040     QIcon off;
0041 
0042     const QIcon& getIcon(bool state) {
0043         return state ? on : off;
0044     }
0045 };
0046 
0047 struct KisLayerPropertiesIcons::Private
0048 {
0049     QMap<QString, IconsPair> icons;
0050 };
0051 
0052 KisLayerPropertiesIcons::KisLayerPropertiesIcons()
0053     : m_d(new Private)
0054 {
0055     updateIcons();
0056 }
0057 
0058 KisLayerPropertiesIcons::~KisLayerPropertiesIcons()
0059 {
0060 }
0061 
0062 KisLayerPropertiesIcons *KisLayerPropertiesIcons::instance()
0063 {
0064     return s_instance;
0065 }
0066 
0067 void KisLayerPropertiesIcons::updateIcons()
0068 {
0069     m_d->icons.clear();
0070     m_d->icons.insert(locked.id(), IconsPair(KisIconUtils::loadIcon("layer-locked"), KisIconUtils::loadIcon("layer-unlocked")));
0071     m_d->icons.insert(visible.id(), IconsPair(KisIconUtils::loadIcon("visible"), KisIconUtils::loadIcon("novisible")));
0072     m_d->icons.insert(layerStyle.id(), IconsPair(KisIconUtils::loadIcon("layer-style-enabled"), KisIconUtils::loadIcon("layer-style-disabled")));
0073     m_d->icons.insert(inheritAlpha.id(), IconsPair(KisIconUtils::loadIcon("transparency-disabled"), KisIconUtils::loadIcon("transparency-enabled")));
0074     m_d->icons.insert(alphaLocked.id(), IconsPair(KisIconUtils::loadIcon("transparency-locked"), KisIconUtils::loadIcon("transparency-unlocked")));
0075     m_d->icons.insert(onionSkins.id(), IconsPair(KisIconUtils::loadIcon("onionOn"), KisIconUtils::loadIcon("onionOff")));
0076     m_d->icons.insert(passThrough.id(), IconsPair(KisIconUtils::loadIcon("passthrough-enabled"), KisIconUtils::loadIcon("passthrough-disabled")));
0077     m_d->icons.insert(selectionActive.id(), IconsPair(KisIconUtils::loadIcon("local-selection-active"), KisIconUtils::loadIcon("local-selection-inactive")));
0078     m_d->icons.insert(colorizeNeedsUpdate.id(), IconsPair(KisIconUtils::loadIcon("updateColorize"), KisIconUtils::loadIcon("updateColorize")));
0079     m_d->icons.insert(colorizeEditKeyStrokes.id(), IconsPair(KisIconUtils::loadIcon("showMarks"), KisIconUtils::loadIcon("showMarksOff")));
0080     m_d->icons.insert(colorizeShowColoring.id(), IconsPair(KisIconUtils::loadIcon("showColoring"), KisIconUtils::loadIcon("showColoringOff")));
0081     m_d->icons.insert(openFileLayerFile.id(), IconsPair(KisIconUtils::loadIcon("document-open"), KisIconUtils::loadIcon("document-open")));
0082     m_d->icons.insert(layerError.id(), IconsPair(KisIconUtils::loadIcon("warning"), KisIconUtils::loadIcon("warning")));
0083 }
0084 
0085 KisBaseNode::Property KisLayerPropertiesIcons::getProperty(const KoID &id, bool state)
0086 {
0087     const IconsPair &pair = instance()->m_d->icons[id.id()];
0088     return KisBaseNode::Property(id,
0089                                  pair.on, pair.off, state);
0090 }
0091 
0092 KisBaseNode::Property KisLayerPropertiesIcons::getProperty(const KoID &id, bool state,
0093                                                                        bool isInStasis, bool stateInStasis)
0094 {
0095     const IconsPair &pair = instance()->m_d->icons[id.id()];
0096     return KisBaseNode::Property(id,
0097                                  pair.on, pair.off, state,
0098                                  isInStasis, stateInStasis);
0099 }
0100 
0101 KisBaseNode::Property KisLayerPropertiesIcons::getErrorProperty(const QString &message)
0102 {
0103     const IconsPair &pair = instance()->m_d->icons[layerError.id()];
0104 
0105     KisBaseNode::Property prop;
0106     prop.id = layerError.id();
0107     prop.name =  layerError.name();
0108     prop.state = message;
0109     prop.onIcon = pair.on;
0110     prop.offIcon = pair.off;
0111 
0112     return prop;
0113 }
0114 
0115 void KisLayerPropertiesIcons::setNodePropertyAutoUndo(KisNodeSP node, const KoID &id, const QVariant &value, KisImageSP image)
0116 {
0117     KisBaseNode::PropertyList props = node->sectionModelProperties();
0118     setNodeProperty(&props, id, value);
0119     KisNodePropertyListCommand::setNodePropertiesAutoUndo(node, image, props);
0120 }
0121 
0122 void KisLayerPropertiesIcons::setNodeProperty(KisBaseNode::PropertyList *props, const KoID &id, const QVariant &value)
0123 {
0124     KisBaseNode::PropertyList::iterator it = props->begin();
0125     KisBaseNode::PropertyList::iterator end = props->end();
0126     for (; it != end; ++it) {
0127         if (it->id == id.id()) {
0128             it->state = value;
0129             break;
0130         }
0131     }
0132 }
0133 
0134 QVariant KisLayerPropertiesIcons::nodeProperty(KisNodeSP node, const KoID &id, const QVariant &defaultValue)
0135 {
0136     KisBaseNode::PropertyList props = node->sectionModelProperties();
0137 
0138     KisBaseNode::PropertyList::const_iterator it = props.constBegin();
0139     KisBaseNode::PropertyList::const_iterator end = props.constEnd();
0140     for (; it != end; ++it) {
0141         if (it->id == id.id()) {
0142             return it->state;
0143         }
0144     }
0145 
0146     return defaultValue;
0147 }