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