Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAbrStorage.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2019 Agata Cacko <cacko.azh@gmail.com>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8#include "KisAbrStorage.h"
10
11#include <QFileInfo>
13
16}
17
19{
20public:
21 AbrTagIterator(KisAbrBrushCollectionSP brushCollection, const QString &location, const QString &resourceType)
22 : m_brushCollection(brushCollection)
23 , m_location(location)
24 , m_resourceType(resourceType)
25 {}
26
27 bool hasNext() const override {
28 if (m_resourceType != ResourceType::Brushes) return false;
29 return !m_taggingDone;
30 }
31
32 void next() override { m_taggingDone = true; }
33
34 KisTagSP tag() const override
35 {
36 KisTagSP abrTag(new KisTag());
37 abrTag->setUrl(QFileInfo(m_location).fileName());
38 abrTag->setName(QFileInfo(m_location).fileName());
39 abrTag->setComment(QFileInfo(m_location).fileName());
40 abrTag->setFilename(QFileInfo(m_location).fileName());
41 abrTag->setResourceType(m_resourceType);
42 abrTag->setValid(true);
43 QStringList brushes;
44 Q_FOREACH(const KisAbrBrushSP brush, m_brushCollection->brushes()) {
45 brushes << brush->filename();
46 }
47 abrTag->setDefaultResources(brushes);
48
49 return abrTag;
50 }
51
52private:
53
54 bool m_taggingDone {false};
56 QString m_location;
58};
59
61{
62public:
65 QMap<QString, KisAbrBrushSP>::const_iterator m_brushCollectionIterator;
68 QString m_currentUrl;
70
71
72 AbrIterator(KisAbrBrushCollectionSP brushCollection, const QString& resourceType)
73 : m_brushCollection(brushCollection)
74 , isLoaded(false)
75 , m_resourceType(resourceType)
76 {
77 }
78
79 bool hasNext() const override
80 {
82 return false;
83 }
84
85 if (!isLoaded) {
86 bool success = m_brushCollection->load();
87 Q_UNUSED(success); // brush collection will be empty
88 const_cast<AbrIterator*>(this)->m_brushesMap = m_brushCollection->brushesMap();
89 const_cast<AbrIterator*>(this)->m_brushCollectionIterator = m_brushesMap->constBegin();
90 const_cast<AbrIterator*>(this)->isLoaded = true;
91 }
92
93 if (m_brushCollectionIterator == m_brushesMap->constEnd()) {
94 return false;
95 }
96
97 bool hasNext = (m_brushCollectionIterator != m_brushesMap->constEnd());
98 return hasNext;
99 }
100
111
112 QString url() const override { return m_currentUrl; }
113 QString type() const override { return ResourceType::Brushes; }
114 QDateTime lastModified() const override { return m_brushCollection->lastModified(); }
115
116 KoResourceSP resourceImpl() const override
117 {
118 return m_currentResource;
119 }
120};
121
122KisAbrStorage::KisAbrStorage(const QString &location)
123 : KisStoragePlugin(location)
124 , m_brushCollection(new KisAbrBrushCollection(location))
125{
126}
127
132
134{
136 item.url = url;
137 // last "_" with index is the suffix added by abr_collection
138 int indexOfUnderscore = url.lastIndexOf("_");
139 QString filenameUrl = url;
140 // filenameUrl contains the name of the collection (filename without .abr, brush name without index)
141 filenameUrl.remove(indexOfUnderscore, url.length() - indexOfUnderscore);
142 item.folder = filenameUrl;
144 item.lastModified = QFileInfo(m_brushCollection->filename()).lastModified();
145 return item;
146}
147
148
150{
151 if (!m_brushCollection->isLoaded()) {
152 m_brushCollection->load();
153 }
154 return m_brushCollection->brushByName(QFileInfo(url).fileName());
155}
156
158{
159 return false;
160}
161
163{
164 return false;
165}
166
171
176
178{
179 return m_brushCollection->image();
180}
KIS_DECLARE_STATIC_INITIALIZER
AbrIterator(KisAbrBrushCollectionSP brushCollection, const QString &resourceType)
QSharedPointer< QMap< QString, KisAbrBrushSP > > m_brushesMap
void next() override
The iterator is only valid if next() has been called at least once.
QMap< QString, KisAbrBrushSP >::const_iterator m_brushCollectionIterator
QString type() const override
QDateTime lastModified() const override
QString url() const override
KoResourceSP resourceImpl() const override
This only loads the resource when called.
KisAbrBrushCollectionSP m_brushCollection
KisAbrBrushSP m_currentResource
QString m_resourceType
QString m_currentUrl
bool hasNext() const override
KisTagSP tag() const override
A tag object on which we can set properties and which we can save.
bool hasNext() const override
KisAbrBrushCollectionSP m_brushCollection
AbrTagIterator(KisAbrBrushCollectionSP brushCollection, const QString &location, const QString &resourceType)
void next() override
The iterator is only valid if next() has been called at least once.
bool loadVersionedResource(KoResourceSP resource) override
QSharedPointer< KisResourceStorage::TagIterator > tags(const QString &resourceType) override
virtual ~KisAbrStorage()
KisAbrStorage(const QString &location)
KisAbrBrushCollectionSP m_brushCollection
KoResourceSP resource(const QString &url) override
QSharedPointer< KisResourceStorage::ResourceIterator > resources(const QString &resourceType) override
bool supportsVersioning() const override
QImage thumbnail() const override
KisResourceStorage::ResourceItem resourceItem(const QString &url) override
void addStoragePluginFactory(KisResourceStorage::StorageType storageType, KisStoragePluginFactoryBase *factory)
static KisStoragePluginRegistry * instance()
QString location() const
The KisTag loads a tag from a .tag file. A .tag file is a .desktop file. The following fields are imp...
Definition KisTag.h:34
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
const QString Brushes
A resource item is simply an entry in the storage,.