File indexing completed on 2024-05-19 04:29:08

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2011 Sven Langkamp <sven.langkamp@gmail.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "kis_workspace_resource.h"
0008 
0009 #include <QFile>
0010 #include <QDomDocument>
0011 #include <QTextStream>
0012 #include <QBuffer>
0013 
0014 
0015 #define WORKSPACE_VERSION 1
0016 
0017 KisWorkspaceResource::KisWorkspaceResource(const QString& filename): KoResource(filename)
0018 {
0019 }
0020 
0021 KisWorkspaceResource::~KisWorkspaceResource()
0022 {
0023 }
0024 
0025 KisWorkspaceResource::KisWorkspaceResource(const KisWorkspaceResource &rhs)
0026     : KoResource(rhs)
0027     , KisPropertiesConfiguration(rhs)
0028     , m_dockerState(rhs.m_dockerState)
0029 {
0030 }
0031 
0032 KoResourceSP KisWorkspaceResource::clone() const
0033 {
0034     return KoResourceSP(new KisWorkspaceResource(*this));
0035 }
0036 
0037 bool KisWorkspaceResource::saveToDevice(QIODevice *dev) const
0038 {
0039     QDomDocument doc;
0040     QDomElement root = doc.createElement("Workspace");
0041     root.setAttribute("name", name() );
0042     root.setAttribute("version", WORKSPACE_VERSION);
0043     QDomElement state = doc.createElement("state");
0044     state.appendChild(doc.createCDATASection(m_dockerState.toBase64()));
0045     root.appendChild(state);
0046 
0047     // Save KisPropertiesConfiguration settings
0048     QDomElement settings = doc.createElement("settings");
0049     KisPropertiesConfiguration::toXML(doc, settings);
0050     root.appendChild(settings);
0051 
0052     if (!image().isNull()) {
0053         QDomElement thumb = doc.createElement("image");
0054         QBuffer buffer;
0055         buffer.open(QIODevice::WriteOnly);
0056         image().save(&buffer, "PNG");
0057         buffer.close();
0058         thumb.appendChild(doc.createCDATASection(buffer.data().toBase64()));
0059         root.appendChild(thumb);
0060     }
0061 
0062     doc.appendChild(root);
0063 
0064     QTextStream textStream(dev);
0065     textStream.setCodec("UTF-8");
0066     doc.save(textStream, 4);
0067 
0068     return true;
0069 
0070 }
0071 
0072 bool KisWorkspaceResource::loadFromDevice(QIODevice *dev, KisResourcesInterfaceSP resourcesInterface)
0073 {
0074     Q_UNUSED(resourcesInterface);
0075 
0076     QDomDocument doc;
0077     if (!doc.setContent(dev)) {
0078         return false;
0079     }
0080 
0081     QDomElement element = doc.documentElement();
0082     setName(element.attribute("name"));
0083 
0084     QDomElement state = element.firstChildElement("state");
0085 
0086     if (!state.isNull()) {
0087         m_dockerState = QByteArray::fromBase64(state.text().toLatin1());
0088     }
0089 
0090     QDomElement settings = element.firstChildElement("settings");
0091     if (!settings.isNull()) {
0092         KisPropertiesConfiguration::fromXML(settings);
0093     }
0094 
0095     QDomElement thumb = element.firstChildElement("image");
0096     if (!thumb.isNull()) {
0097         QImage img;
0098         img.loadFromData(QByteArray::fromBase64(thumb.text().toLatin1()));
0099         this->setImage(img);
0100     }
0101 
0102     setValid(true);
0103     return true;
0104 }
0105 
0106 QString KisWorkspaceResource::defaultFileExtension() const
0107 {
0108     return QString(".kws");
0109 }
0110 
0111 void KisWorkspaceResource::setDockerState(const QByteArray& state)
0112 {
0113     m_dockerState = state;
0114 }
0115 
0116 QByteArray KisWorkspaceResource::dockerState()
0117 {
0118     return m_dockerState;
0119 }