File indexing completed on 2024-05-12 15:59:49
0001 /* 0002 * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #ifndef KISRESOURCELOADER_H 0008 #define KISRESOURCELOADER_H 0009 0010 #include <QString> 0011 #include <QStringList> 0012 #include <QImage> 0013 #include <QScopedPointer> 0014 #include <QSharedPointer> 0015 0016 #include <KoResource.h> 0017 #include <KoID.h> 0018 0019 #include <kritaresources_export.h> 0020 0021 0022 /** 0023 * @brief The KisResourceLoader class is an abstract interface 0024 * class that must be implemented by actual resource classes and 0025 * registered with the KisResourceLoaderRegistry. 0026 */ 0027 class KRITARESOURCES_EXPORT KisResourceLoaderBase 0028 { 0029 public: 0030 0031 KisResourceLoaderBase(const QString &resourceSubType, const QString &resourceType, const QString &name, const QStringList &mimetypes) 0032 { 0033 m_resourceSubType = resourceSubType; 0034 m_resourceType = resourceType; 0035 m_mimetypes = mimetypes; 0036 m_name = name; 0037 } 0038 0039 virtual ~KisResourceLoaderBase() 0040 { 0041 } 0042 0043 /** 0044 * @return a set of filters ("*.bla,*.foo") that is suitable for filtering 0045 * the contents of a directory. 0046 */ 0047 QStringList filters() const; 0048 0049 /** 0050 * @return the mimetypes this resource can load 0051 */ 0052 QStringList mimetypes() const 0053 { 0054 return m_mimetypes; 0055 } 0056 0057 /** 0058 * @return the folder in the resource storage where resources 0059 * of this type are located 0060 */ 0061 QString resourceType() const 0062 { 0063 return m_resourceType; 0064 } 0065 0066 QString resourceSubType() const 0067 { 0068 return id(); 0069 } 0070 0071 /// For registration in KisResourceLoaderRegistry 0072 QString id() const 0073 { 0074 return m_resourceSubType; 0075 } 0076 0077 /// The user-friendly name of the category 0078 QString name() const 0079 { 0080 return m_name; 0081 } 0082 0083 virtual KoResourceSP create(const QString &name) = 0; 0084 0085 bool load(KoResourceSP resource, QIODevice &dev, KisResourcesInterfaceSP resourcesInterface) 0086 { 0087 Q_ASSERT(dev.isOpen() && dev.isReadable()); 0088 return resource->loadFromDevice(&dev, resourcesInterface); 0089 } 0090 0091 /** 0092 * Load this resource. 0093 * @return a resource if loading the resource succeeded, 0 otherwise 0094 */ 0095 KoResourceSP load(const QString &name, QIODevice &dev, KisResourcesInterfaceSP resourcesInterface) 0096 { 0097 KoResourceSP resource = create(name); 0098 return load(resource, dev, resourcesInterface) ? resource : 0; 0099 } 0100 0101 0102 private: 0103 QString m_resourceSubType; 0104 QString m_resourceType; 0105 QStringList m_mimetypes; 0106 QString m_name; 0107 0108 }; 0109 0110 template<typename T> 0111 class KisResourceLoader : public KisResourceLoaderBase { 0112 public: 0113 KisResourceLoader(const QString &id, const QString &folder, const QString &name, const QStringList &mimetypes) 0114 : KisResourceLoaderBase(id, folder, name, mimetypes) 0115 { 0116 } 0117 0118 virtual KoResourceSP create(const QString &name) override 0119 { 0120 QSharedPointer<T> resource = QSharedPointer<T>::create(name); 0121 return resource; 0122 } 0123 }; 0124 0125 0126 0127 #endif // KISRESOURCELOADER_H