Krita Source Code Documentation
Loading...
Searching...
No Matches
KisReferenceImageCollection Class Reference

#include <KisReferenceImageCollection.h>

Public Member Functions

 KisReferenceImageCollection ()=default
 
 KisReferenceImageCollection (const QVector< KisReferenceImage * > &references)
 
bool load (QIODevice *io)
 
const QVector< KisReferenceImage * > & referenceImages () const
 
bool save (QIODevice *io)
 

Private Attributes

QVector< KisReferenceImage * > references
 

Detailed Description

Definition at line 15 of file KisReferenceImageCollection.h.

Constructor & Destructor Documentation

◆ KisReferenceImageCollection() [1/2]

KisReferenceImageCollection::KisReferenceImageCollection ( )
explicitdefault

◆ KisReferenceImageCollection() [2/2]

KisReferenceImageCollection::KisReferenceImageCollection ( const QVector< KisReferenceImage * > & references)
explicit

Definition at line 17 of file KisReferenceImageCollection.cpp.

19{}
QVector< KisReferenceImage * > references

Member Function Documentation

◆ load()

bool KisReferenceImageCollection::load ( QIODevice * io)

Definition at line 59 of file KisReferenceImageCollection.cpp.

60{
61 QScopedPointer<KoStore> store(KoStore::createStore(io, KoStore::Read, "application/x-krita-reference-images", KoStore::Zip));
62 if (!store || store->bad()) {
63 return false;
64 }
65
66 if (!store->hasFile(METADATA_FILE) || !store->open(METADATA_FILE)) {
67 return false;
68 }
69
70 QByteArray xml = store->device()->readAll();
71 store->close();
72
73 QDomDocument doc;
74 doc.setContent(xml);
75 QDomElement root = doc.documentElement();
76
77 QStringList failures;
78
79 QDomElement element = root.firstChildElement("referenceimage");
80 while (!element.isNull()) {
82
83 if (reference->loadImage(store.data())) {
84 references.append(reference);
85 } else {
86 failures << (reference->embed() ? reference->internalFile() : reference->filename());
87 delete reference;
88 }
89 element = element.nextSiblingElement("referenceimage");
90 }
91
92 if (!failures.isEmpty()) {
93 QMessageBox::warning(
94 0,
95 i18nc("@title:window", "Krita"),
96 i18n("The following reference images could not be loaded:\n%1", failures.join('\n')),
97 QMessageBox::Ok, QMessageBox::Ok
98 );
99
100 }
101
102 return true;
103}
const QString METADATA_FILE
The KisReferenceImage class represents a single reference image.
bool loadImage(KoStore *store)
QString filename() const
QString internalFile() const
static KisReferenceImage * fromXml(const QDomElement &elem)
@ Read
Definition KoStore.h:29
@ Zip
Definition KoStore.h:30
static KoStore * createStore(const QString &fileName, Mode mode, const QByteArray &appIdentification=QByteArray(), Backend backend=Auto, bool writeMimetype=true)
Definition KoStore.cpp:39

References KoStore::createStore(), KisReferenceImage::embed(), KisReferenceImage::filename(), KisReferenceImage::fromXml(), KisReferenceImage::internalFile(), KisReferenceImage::loadImage(), METADATA_FILE, KoStore::Read, references, and KoStore::Zip.

◆ referenceImages()

const QVector< KisReferenceImage * > & KisReferenceImageCollection::referenceImages ( ) const

Definition at line 21 of file KisReferenceImageCollection.cpp.

22{
23 return references;
24}

References references.

◆ save()

bool KisReferenceImageCollection::save ( QIODevice * io)

Definition at line 26 of file KisReferenceImageCollection.cpp.

27{
28 QScopedPointer<KoStore> store(KoStore::createStore(io, KoStore::Write, "application/x-krita-reference-images]", KoStore::Zip));
29 if (store.isNull()) return false;
30
31 QDomDocument doc;
32 QDomElement root = doc.createElement("referenceimages");
33 doc.insertBefore(root, QDomNode());
34
35 std::sort(references.begin(), references.end(), KoShape::compareShapeZIndex);
36
37 int nextId = 0;
38 Q_FOREACH(KisReferenceImage *reference, references) {
39 reference->saveXml(doc, root, nextId++);
40
41 if (reference->embed()) {
42 bool ok = reference->saveImage(store.data());
43 if (!ok) return false;
44 }
45 }
46
47 if (!store->open(METADATA_FILE)) {
48 return false;
49 }
50
51 KoStoreDevice xmlDev(store.data());
52 xmlDev.write(doc.toByteArray());
53 xmlDev.close();
54 store->close();
55
56 return true;
57}
bool saveImage(KoStore *store) const
void saveXml(QDomDocument &document, QDomElement &parentElement, int id)
static bool compareShapeZIndex(KoShape *s1, KoShape *s2)
Definition KoShape.cpp:434
@ Write
Definition KoStore.h:29

References KoStoreDevice::close(), KoShape::compareShapeZIndex(), KoStore::createStore(), KisReferenceImage::embed(), METADATA_FILE, references, KisReferenceImage::saveImage(), KisReferenceImage::saveXml(), KoStore::Write, and KoStore::Zip.

Member Data Documentation

◆ references

QVector<KisReferenceImage*> KisReferenceImageCollection::references
private

Definition at line 27 of file KisReferenceImageCollection.h.


The documentation for this class was generated from the following files: