File indexing completed on 2024-05-12 15:59:51

0001 /*
0002  *  SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisResourceModelProvider.h"
0007 
0008 #include "KisResourceModel.h"
0009 #include "KisTagModel.h"
0010 #include "KisTagResourceModel.h"
0011 
0012 #include "KoResource.h"
0013 
0014 #include <memory>
0015 
0016 #include <QGlobalStatic>
0017 
0018 Q_GLOBAL_STATIC(KisResourceModelProvider, s_instance)
0019 
0020 struct KisResourceModelProvider::Private
0021 {
0022     QMap<QString, KisAllResourcesModel*> resourceModels;
0023     QMap<QString, KisAllTagsModel*> tagModels;
0024     QMap<QString, KisAllTagResourceModel*> tagResourceModels;
0025 };
0026 
0027 KisResourceModelProvider::KisResourceModelProvider()
0028     : d(new Private())
0029 {
0030 }
0031 
0032 KisResourceModelProvider::~KisResourceModelProvider()
0033 {
0034     qDeleteAll(d->resourceModels);
0035     qDeleteAll(d->tagModels);
0036     qDeleteAll(d->tagResourceModels);
0037     delete d;
0038 }
0039 
0040 KisAllResourcesModel *KisResourceModelProvider::resourceModel(const QString &resourceType)
0041 {
0042     if (!s_instance->d->resourceModels.contains(resourceType)) {
0043        s_instance->d->resourceModels[resourceType] = new KisAllResourcesModel(resourceType);
0044     }
0045     return s_instance->d->resourceModels[resourceType];
0046 }
0047 
0048 KisAllTagsModel *KisResourceModelProvider::tagModel(const QString &resourceType)
0049 {
0050     if (!s_instance->d->tagModels.contains(resourceType)) {
0051        s_instance->d->tagModels[resourceType] = new KisAllTagsModel(resourceType);
0052     }
0053     return s_instance->d->tagModels[resourceType];
0054 }
0055 
0056 
0057 KisAllTagResourceModel *KisResourceModelProvider::tagResourceModel(const QString &resourceType)
0058 {
0059     if (!s_instance->d->tagResourceModels.contains(resourceType)) {
0060        s_instance->d->tagResourceModels[resourceType] = new KisAllTagResourceModel(resourceType);
0061     }
0062     return s_instance->d->tagResourceModels[resourceType];
0063 }
0064 
0065 void KisResourceModelProvider::testingResetAllModels()
0066 {
0067     for (auto it = s_instance->d->tagModels.begin(); it != s_instance->d->tagModels.end(); ++it) {
0068         it.value()->resetQuery();
0069     }
0070     for (auto it = s_instance->d->resourceModels.begin(); it != s_instance->d->resourceModels.end(); ++it) {
0071         it.value()->resetQuery();
0072     }
0073     for (auto it = s_instance->d->tagResourceModels.begin(); it != s_instance->d->tagResourceModels.end(); ++it) {
0074         it.value()->resetQuery();
0075     }
0076 }