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 }