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

0001 /*
0002  * SPDX-FileCopyrightText: 2019 Agata Cacko <cacko.azh@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisTagModelProvider.h"
0007 
0008 #include <QMap>
0009 #include <QString>
0010 #include <memory>
0011 
0012 Q_GLOBAL_STATIC(KisTagModelProvider, s_instance)
0013 
0014 struct KisTagModelProvider::Private {
0015 
0016     std::map<QString, std::unique_ptr<KisTagModel>> tagModelsMap;
0017     std::unique_ptr<KisTagResourceModel> tagResourceModel;
0018 
0019 };
0020 
0021 KisTagModelProvider::KisTagModelProvider()
0022     : d(new Private())
0023 {
0024 }
0025 
0026 
0027 KisTagModelProvider::~KisTagModelProvider()
0028 {
0029     delete d;
0030 }
0031 
0032 KisTagModel *KisTagModelProvider::tagModel(const QString& resourceType)
0033 {
0034     std::map<QString, std::unique_ptr<KisTagModel> >::const_iterator found = s_instance->d->tagModelsMap.find(resourceType);
0035 
0036     if (found == s_instance->d->tagModelsMap.end()) {
0037         std::unique_ptr<KisTagModel> modelStorage(new KisTagModel(resourceType));
0038         KisTagModel *model = modelStorage.get();
0039         s_instance->d->tagModelsMap.insert(std::make_pair(resourceType, std::move(modelStorage)));
0040         return model;
0041     }
0042     return found->second.get();
0043 }
0044 
0045 KisTagResourceModel *KisTagModelProvider::tagResourceModel(const QString &resourceType)
0046 {
0047     return s_instance->d->tagResourceModel.get();
0048 }