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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "KisEmbeddedResourceStorageProxy.h"
0008 
0009 #include "kis_assert.h"
0010 #include "KisGlobalResourcesInterface.h"
0011 
0012 KisEmbeddedResourceStorageProxy::KisEmbeddedResourceStorageProxy(const QString &storageLocation)
0013     : m_storageLocation(storageLocation),
0014       m_stylesModel(ResourceType::LayerStyles),
0015       m_patternsModel(ResourceType::Patterns),
0016       m_gradientsModel(ResourceType::Gradients)
0017 {
0018     if (m_storageLocation.isEmpty()) {
0019         m_fallbackResourcesInterface.reset(new KisLocalStrokeResources());
0020         m_rootResourcesInterface = m_fallbackResourcesInterface;
0021     } else {
0022         m_rootResourcesInterface = KisGlobalResourcesInterface::instance();
0023     }
0024 }
0025 
0026 void KisEmbeddedResourceStorageProxy::addResource(KoResourceSP resource)
0027 {
0028     if (m_fallbackResourcesInterface) {
0029         if (resource->resourceType().first == ResourceType::LayerStyles) {
0030             resource = resource->clone();
0031         } else {
0032             m_fallbackResourcesInterface->addResource(resource);
0033         }
0034     } else {
0035         if (resource->resourceType().first == ResourceType::LayerStyles) {
0036             m_stylesModel.addResource(resource, m_storageLocation);
0037         } else if (resource->resourceType().first == ResourceType::Patterns) {
0038             m_patternsModel.addResource(resource, m_storageLocation);
0039         } else if (resource->resourceType().first == ResourceType::Gradients) {
0040             m_gradientsModel.addResource(resource, m_storageLocation);
0041         } else {
0042             qWarning() << "WARNING: fallback resource proxy is not implemented for type" << resource->resourceType().first;
0043             KIS_SAFE_ASSERT_RECOVER_NOOP(0 && "fallback resource proxy is not implemented");
0044         }
0045     }
0046 }
0047 
0048 KisResourcesInterfaceSP KisEmbeddedResourceStorageProxy::resourcesInterface()
0049 {
0050     return m_rootResourcesInterface;
0051 }
0052 
0053 KisResourcesInterfaceSP KisEmbeddedResourceStorageProxy::detachedResourcesInterface()
0054 {
0055     return m_fallbackResourcesInterface ?
0056         KisResourcesInterfaceSP(m_fallbackResourcesInterface->clone()) :
0057         m_rootResourcesInterface;
0058 }