Krita Source Code Documentation
Loading...
Searching...
No Matches
KisResourceModel.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#ifndef KISRESOURCEMODEL_H
8#define KISRESOURCEMODEL_H
9
10#include <QAbstractTableModel>
11#include <QSortFilterProxyModel>
12
13#include <kritaresources_export.h>
14
15#include <KoResource.h>
16#include <KisTag.h>
17
18
23class KRITARESOURCES_EXPORT KisAbstractResourceModel {
24
25public:
26
61
63
67 virtual KoResourceSP resourceForIndex(QModelIndex index = QModelIndex()) const = 0;
68
74 virtual QModelIndex indexForResource(KoResourceSP resource) const = 0;
75
81 virtual QModelIndex indexForResourceId(int resourceId) const = 0;
82
89 virtual bool setResourceActive(const QModelIndex &index, bool value) = 0;
90
94 inline bool setResourceInactive(const QModelIndex &index) {
95 return setResourceActive(index, false);
96 }
97
103 virtual KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId = QString("")) = 0;
104
120 virtual KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId = QString("")) = 0;
121
134 virtual bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation = QString()) const = 0;
135
149 virtual bool exportResource(KoResourceSP resource, QIODevice *device) = 0;
150
163 virtual bool addResource(KoResourceSP resource, const QString &storageId = QString("")) = 0;
164
175 virtual bool addResourceDeduplicateFileName(KoResourceSP resource, const QString &storageId) = 0;
176
186 virtual bool updateResource(KoResourceSP resource) = 0;
187
193 virtual bool reloadResource(KoResourceSP resource) = 0;
194
203 virtual bool renameResource(KoResourceSP resource, const QString &name) = 0;
204
210 virtual bool setResourceMetaData(KoResourceSP resource, QMap<QString, QVariant> metadata) = 0;
211};
212
213class KRITARESOURCES_EXPORT KisAbstractResourceFilterInterface
214{
215public:
217
219 ShowInactiveResources = 0,
221 ShowAllResources
222 };
223
225 ShowInactiveStorages = 0,
227 ShowAllStorages
228 };
229public:
230
234 virtual void setResourceFilter(ResourceFilter filter) = 0;
235
239 virtual void setStorageFilter(StorageFilter filter) = 0;
240};
241
248class KRITARESOURCES_EXPORT KisAllResourcesModel : public QAbstractTableModel, public KisAbstractResourceModel
249{
250 Q_OBJECT
251
252private:
254 friend class KisResourceModel;
256 KisAllResourcesModel(const QString &resourceType, QObject *parent = 0);
257
258public:
259
260 ~KisAllResourcesModel() override;
261
262// QAbstractItemModel API
263
264 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
265 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
266 QVariant data(const QModelIndex &index, int role) const override;
267 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
268 bool setData(const QModelIndex &index, const QVariant &value, int role) override;
269 Qt::ItemFlags flags(const QModelIndex &index) const override;
270 QHash<int, QByteArray> roleNames() const override;
271
272// Resources API
273
274 KoResourceSP resourceForIndex(QModelIndex index = QModelIndex()) const override;
275 QModelIndex indexForResource(KoResourceSP resource) const override;
276 QModelIndex indexForResourceId(int resourceId) const override;
277 bool setResourceActive(const QModelIndex &index, bool value) override;
278 KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId = QString("")) override;
279 KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId = QString("")) override;
280 bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation = QString()) const override;
281 bool exportResource(KoResourceSP resource, QIODevice *device) override;
282 bool addResource(KoResourceSP resource, const QString &storageId = QString("")) override;
283 bool addResourceDeduplicateFileName(KoResourceSP resource, const QString &storageId = QString("")) override;
284 bool updateResource(KoResourceSP resource) override;
285 bool reloadResource(KoResourceSP resource) override;
286 bool renameResource(KoResourceSP resource, const QString &name) override;
287 bool setResourceMetaData(KoResourceSP resource, QMap<QString, QVariant> metadata) override;
288
289private Q_SLOTS:
290
291 void storageActiveStateChanged(const QString &location);
292 void storageResynchronized(const QString &storage, bool isBulkResynchronization);
293 void storagesBulkSynchronizationFinished();
294
305 void beginExternalResourceImport(const QString &resourceType, int numResources);
306
310 void endExternalResourceImport(const QString &resourceType);
311
317 void beginExternalResourceRemove(const QString &resourceType, const QVector<int> &resourceId);
318
322 void endExternalResourceRemove(const QString &resourceType);
323
328 void slotResourceActiveStateChanged(const QString &resourceType, int resourceId);
329
330public:
331
332 KoResourceSP resourceForId(int id) const;
333
338 bool resourceExists(const QString &md5, const QString &filename, const QString &name);
339
351 QVector<KoResourceSP> resourcesForFilename(QString filename) const;
352
361 QVector<KoResourceSP> resourcesForName(const QString &name) const;
362 QVector<KoResourceSP> resourcesForMD5(const QString &md5sum) const;
363 QVector<KisTagSP> tagsForResource(int resourceId) const;
364
365private:
366
367 bool prepareQuery();
368 bool resetQuery();
369 void closeQuery();
370
371 struct Private;
372 Private *const d;
373
374};
375
381class KRITARESOURCES_EXPORT KisResourceModel : public QSortFilterProxyModel, public KisAbstractResourceModel, public KisAbstractResourceFilterInterface
382{
383 Q_OBJECT
384
385public:
386
387 KisResourceModel(const QString &type, QObject *parent = 0);
388 ~KisResourceModel() override;
389
390
391 void setResourceFilter(ResourceFilter filter) override;
392 void setStorageFilter(StorageFilter filter) override;
393
394 void showOnlyUntaggedResources(bool showOnlyUntagged);
395
396public:
397
398 KoResourceSP resourceForIndex(QModelIndex index = QModelIndex()) const override;
399 QModelIndex indexForResource(KoResourceSP resource) const override;
400 QModelIndex indexForResourceId(int resourceId) const override;
401 bool setResourceActive(const QModelIndex &index, bool value) override;
402 KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId = QString("")) override;
403 KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId = QString("")) override;
404 bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation = QString()) const override;
405 bool exportResource(KoResourceSP resource, QIODevice *device) override;
406 bool addResource(KoResourceSP resource, const QString &storageId = QString("")) override;
407 bool addResourceDeduplicateFileName(KoResourceSP resource, const QString &storageId = QString("")) override;
408 bool updateResource(KoResourceSP resource) override;
409 bool reloadResource(KoResourceSP resource) override;
410 bool renameResource(KoResourceSP resource, const QString &name) override;
411 bool setResourceMetaData(KoResourceSP resource, QMap<QString, QVariant> metadata) override;
412
413public:
414
415 KoResourceSP resourceForId(int id) const;
416
424 QVector<KoResourceSP> resourcesForFilename(QString fileName) const;
425
432 QVector<KoResourceSP> resourcesForName(QString name) const;
433 QVector<KoResourceSP> resourcesForMD5(const QString md5sum) const;
434 QVector<KisTagSP> tagsForResource(int resourceId) const;
435
436protected:
437
438 bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const override;
439 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
440 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
441
442private:
443 QVector<KoResourceSP> filterByColumn(const QString filter, KisAllResourcesModel::Columns column) const;
444 bool filterResource(const QModelIndex &idx) const;
445
446 struct Private;
447 Private *const d;
448
449 Q_DISABLE_COPY(KisResourceModel)
450
451};
452
453
454
455#endif // KISRESOURCEMODEL_H
float value(const T *src, size_t ch)
virtual void setStorageFilter(StorageFilter filter)=0
virtual void setResourceFilter(ResourceFilter filter)=0
virtual KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId=QString(""))=0
importResource imports a resource from a QIODevice
virtual QModelIndex indexForResource(KoResourceSP resource) const =0
indexFromResource
virtual bool exportResource(KoResourceSP resource, QIODevice *device)=0
exportResource exports a resource into a QIODevice
virtual bool updateResource(KoResourceSP resource)=0
updateResource creates a new version of the resource in the storage and in the database....
virtual KoResourceSP resourceForIndex(QModelIndex index=QModelIndex()) const =0
resourceForIndex returns a properly versioned and id'ed resource object
virtual bool setResourceActive(const QModelIndex &index, bool value)=0
setResourceActive changes 'active' state of the resource
bool setResourceInactive(const QModelIndex &index)
virtual QModelIndex indexForResourceId(int resourceId) const =0
indexFromResource
Columns
The Columns enum indexes the columns in the model. To get the thumbnail for a particular resource,...
@ Status
Whether the resource is active. Duplicate of ResourceActive.
@ ResourceActive
Whether the current resource is active.
@ Dirty
A dirty resource is one that has been modified locally but not saved.
@ LargeThumbnail
A larger thumbnail for displaying in a tooltip. 200x200 or so.
@ MetaData
MetaData is a map of key, value pairs that is associated with this resource.
@ BrokenStatus
Whether the resource is broken (bool)
@ StorageActive
Whether the current resource's storage is active.
virtual KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId=QString(""))=0
importResourceFile
virtual bool addResource(KoResourceSP resource, const QString &storageId=QString(""))=0
addResource adds the given resource to the database and storage. If the resource already exists in th...
virtual bool renameResource(KoResourceSP resource, const QString &name)=0
renameResource name the given resource. The resource will have its name field reset,...
virtual bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation=QString()) const =0
importWillOverwriteResource checks is importing a resource with this filename will overwrite anything
virtual bool addResourceDeduplicateFileName(KoResourceSP resource, const QString &storageId)=0
addResource adds the given resource to the database and storage. If the resource already exists in th...
virtual bool reloadResource(KoResourceSP resource)=0
reloadResource
virtual bool setResourceMetaData(KoResourceSP resource, QMap< QString, QVariant > metadata)=0
setResourceMetaData
The KisAllresourcesModel class provides access to the cache database for a particular resource type....
The KisResourceModel class provides the main access to resources. It is possible to filter the resour...