File indexing completed on 2024-05-26 04:33:33
0001 /* 0002 * SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org> 0003 * SPDX-FileCopyrightText: 2005 C. Boemann <cbo@boemann.dk> 0004 * 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef KIS_KRA_SAVEXML_VISITOR_H_ 0008 #define KIS_KRA_SAVEXML_VISITOR_H_ 0009 0010 #include <QDomDocument> 0011 #include <QDomElement> 0012 #include <QStringList> 0013 0014 #include "kis_node_visitor.h" 0015 #include "kis_types.h" 0016 #include "kritalibkra_export.h" 0017 0018 class KRITALIBKRA_EXPORT KisSaveXmlVisitor : public KisNodeVisitor 0019 { 0020 public: 0021 KisSaveXmlVisitor(QDomDocument doc, const QDomElement & element, quint32 &count, const QString &url, bool root); 0022 0023 void setSelectedNodes(vKisNodeSP selectedNodes); 0024 0025 using KisNodeVisitor::visit; 0026 0027 QStringList errorMessages() const; 0028 0029 public: 0030 0031 bool visit(KisNode*) override { 0032 return true; 0033 } 0034 bool visit(KisExternalLayer *) override; 0035 bool visit(KisPaintLayer *layer) override; 0036 bool visit(KisGroupLayer *layer) override; 0037 bool visit(KisAdjustmentLayer* layer) override; 0038 bool visit(KisGeneratorLayer *layer) override; 0039 bool visit(KisCloneLayer *layer) override; 0040 bool visit(KisFilterMask *mask) override; 0041 bool visit(KisTransformMask *mask) override; 0042 bool visit(KisTransparencyMask *mask) override; 0043 bool visit(KisSelectionMask *mask) override; 0044 bool visit(KisColorizeMask *mask) override; 0045 0046 QMap<const KisNode*, QString> nodeFileNames() { 0047 return m_nodeFileNames; 0048 } 0049 0050 QMap<const KisNode*, QString> keyframeFileNames() { 0051 return m_keyframeFileNames; 0052 } 0053 0054 public: 0055 QDomElement savePaintLayerAttributes(KisPaintLayer *layer, QDomDocument &doc); 0056 0057 // used by EXR to save properties of Krita layers inside .exr 0058 static void loadPaintLayerAttributes(const QDomElement &el, KisPaintLayer *layer); 0059 0060 private: 0061 static void loadLayerAttributes(const QDomElement &el, KisLayer *layer); 0062 0063 private: 0064 0065 void saveLayer(QDomElement & el, const QString & layerType, const KisLayer * layer); 0066 void saveMask(QDomElement & el, const QString & maskType, const KisMaskSP mask); 0067 bool saveMasks(KisNode * node, QDomElement & layerElement); 0068 void saveNodeKeyframes(const KisNode *node, QString filename, QDomElement& el); 0069 0070 friend class KisKraSaveXmlVisitorTest; 0071 0072 vKisNodeSP m_selectedNodes; 0073 QMap<const KisNode*, QString> m_nodeFileNames; 0074 QMap<const KisNode*, QString> m_keyframeFileNames; 0075 QDomDocument m_doc; 0076 QDomElement m_elem; 0077 quint32 &m_count; 0078 QString m_url; 0079 bool m_root; 0080 QStringList m_errorMessages; 0081 0082 bool saveReferenceImagesLayer(KisExternalLayer *layer); 0083 }; 0084 0085 #endif 0086