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

0001 /*
0002  *  SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_ASL_LAYER_STYLE_SERIALIZER_H
0008 #define __KIS_ASL_LAYER_STYLE_SERIALIZER_H
0009 
0010 #include "kritaimage_export.h"
0011 
0012 class QIODevice;
0013 class KoPattern;
0014 class KisResourceModel;
0015 
0016 #include "kis_psd_layer_style.h"
0017 #include "asl/kis_asl_callback_object_catcher.h"
0018 #include "KisLocalStrokeResources.h"
0019 
0020 class KRITAIMAGE_EXPORT KisAslLayerStyleSerializer
0021 {
0022 public:
0023     KisAslLayerStyleSerializer();
0024     ~KisAslLayerStyleSerializer();
0025 
0026     void saveToDevice(QIODevice &device);
0027     bool saveToFile(const QString& filename);
0028     void readFromDevice(QIODevice &device);
0029     bool readFromFile(const QString& filename);
0030 
0031     void assignAllLayerStylesToLayers(KisNodeSP root, const QString &storageLocation);
0032     static QVector<KisPSDLayerStyleSP> collectAllLayerStyles(KisNodeSP root);
0033 
0034     QVector<KisPSDLayerStyleSP> styles() const;
0035     void setStyles(const QVector<KisPSDLayerStyleSP> &styles);
0036 
0037     QHash<QString, KoPatternSP> patterns() const;
0038     QVector<KoAbstractGradientSP> gradients() const;
0039     QHash<QString, KisPSDLayerStyleSP> stylesHash();
0040 
0041 
0042     void registerPSDPattern(const QDomDocument &doc);
0043     void readFromPSDXML(const QDomDocument &doc);
0044 
0045     QDomDocument formXmlDocument() const;
0046     QDomDocument formPsdXmlDocument() const;
0047 
0048     bool isInitialized() {
0049         return m_initialized;
0050     }
0051 
0052     bool isValid() {
0053         return isInitialized() && m_isValid;
0054     }
0055 
0056     static QVector<KoResourceSP> fetchEmbeddedResources(const KisPSDLayerStyle *style);
0057 
0058 private:
0059     void registerPatternObject(const KoPatternSP pattern, const  QString& patternUuid);
0060 
0061     void assignPatternObject(const QString &patternUuid, const QString &patternName, std::function<void(KoPatternSP)> setPattern);
0062     void assignGradientObject(KoAbstractGradientSP gradient, std::function<void(KoAbstractGradientSP)> setGradient);
0063 
0064     static QVector<KoPatternSP> fetchAllPatterns(const KisPSDLayerStyle *style);
0065 
0066     void newStyleStarted(bool isPsdStructure);
0067     void connectCatcherToStyle(KisPSDLayerStyle *style, const QString &prefix);
0068 
0069 private:
0070     QHash<QString, KoPatternSP> m_patternsStore;
0071 
0072     KisAslCallbackObjectCatcher m_catcher;
0073     QVector<KisPSDLayerStyleSP> m_stylesVector;
0074     QVector<KoAbstractGradientSP> m_gradientsStore;
0075     QHash<QString, KisPSDLayerStyleSP> m_stylesHash;
0076     bool m_initialized {false};
0077     bool m_isValid {true};
0078     QSharedPointer<KisLocalStrokeResources> m_localResourcesInterface;
0079 };
0080 
0081 #endif /* __KIS_ASL_LAYER_STYLE_SERIALIZER_H */