Krita Source Code Documentation
Loading...
Searching...
No Matches
KisResourcesInterface.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KISRESOURCESINTERFACE_H
7#define KISRESOURCESINTERFACE_H
8
9#include "kritaresources_export.h"
10
11#include <QScopedPointer>
12#include <KoResource.h>
14
15class QString;
16class QByteArray;
18
40class KRITARESOURCES_EXPORT KisResourcesInterface
41{
42public:
43 class KRITARESOURCES_EXPORT ResourceSourceAdapter
44 {
45 public:
46 ResourceSourceAdapter(const QString &type);
47 virtual ~ResourceSourceAdapter();
48//protected:
50 virtual QVector<KoResourceSP> resourcesForFilename(const QString& filename) const = 0;
51 virtual QVector<KoResourceSP> resourcesForName(const QString& name) const = 0;
52 virtual QVector<KoResourceSP> resourcesForMD5(const QString& md5) const = 0;
53public:
66 KoResourceSP bestMatch(const QString md5, const QString filename, const QString name);
67
74 KoResourceLoadResult bestMatchLoadResult(const QString md5, const QString filename, const QString name);
75
76 virtual KoResourceSP fallbackResource() const = 0;
77
78 private:
80 const QString m_type;
81 };
82
83 template <typename T>
85 {
86 public:
88 : m_source(adapter)
89 {
90 }
91private:
92 QVector<QSharedPointer<T>> resourcesForFilename(const QString& filename) const
93 {
95 Q_FOREACH(KoResourceSP resource, m_source->resourcesForFilename(filename)) {
96 r << resource.dynamicCast<T>();
97 }
98 return r;
99 }
100
101 QVector<QSharedPointer<T>> resourcesForName(const QString& name) const
102 {
104 Q_FOREACH(KoResourceSP resource, m_source->resourcesForName(name)) {
105 r << resource.dynamicCast<T>();
106 }
107 return r;
108 }
109
111 {
113 Q_FOREACH(KoResourceSP resource, m_source->resourcesForMD5(md5)) {
114 r << resource.dynamicCast<T>();
115 }
116 return r;
117 }
118public:
130 QSharedPointer<T> bestMatch(const QString md5, const QString filename, const QString name) {
131 return m_source->bestMatch(md5, filename, name).dynamicCast<T>();
132 }
133
140 KoResourceLoadResult bestMatchLoadResult(const QString md5, const QString filename, const QString name) {
141 return m_source->bestMatchLoadResult(md5, filename, name);
142 }
143
145 {
146 return m_source->fallbackResource().dynamicCast<T>();
147 }
148
149 protected:
151 };
152
153public:
155 virtual ~KisResourcesInterface();
156
163 ResourceSourceAdapter& source(const QString &type) const;
164
178 template<typename T>
179 TypedResourceSourceAdapter<T> source(const QString &type) const {
180 return TypedResourceSourceAdapter<T>(&this->source(type));
181 }
182
183protected:
185 virtual ResourceSourceAdapter* createSourceImpl(const QString &type) const = 0;
186
187protected:
188 QScopedPointer<KisResourcesInterfacePrivate> d_ptr;
189
190private:
191 Q_DECLARE_PRIVATE(KisResourcesInterface)
192};
193
195
196#endif // KISRESOURCESINTERFACE_H
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
virtual QVector< KoResourceSP > resourcesForFilename(const QString &filename) const =0
virtual QVector< KoResourceSP > resourcesForMD5(const QString &md5) const =0
virtual QVector< KoResourceSP > resourcesForName(const QString &name) const =0
virtual KoResourceSP fallbackResource() const =0
TypedResourceSourceAdapter(ResourceSourceAdapter *adapter)
QSharedPointer< T > bestMatch(const QString md5, const QString filename, const QString name)
resource retrieves a resource, preferably by md5, but with filename and name as fallback for older fi...
QVector< QSharedPointer< T > > resourcesForFilename(const QString &filename) const
QVector< QSharedPointer< T > > resourcesForName(const QString &name) const
KoResourceLoadResult bestMatchLoadResult(const QString md5, const QString filename, const QString name)
QVector< QSharedPointer< T > > resourcesForMD5(const QString &md5) const
a provider-like interface class for accessing resource sources in Krita.
virtual ResourceSourceAdapter * createSourceImpl(const QString &type) const =0
QScopedPointer< KisResourcesInterfacePrivate > d_ptr
TypedResourceSourceAdapter< T > source(const QString &type) const