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 }