From 271ad9e4fdb4f003abd33b59ca9cadfb5bab9823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 26 Sep 2015 13:45:29 +0200 Subject: GH-1072 split resource system to UI and logic parts --- logic/resources/Resource.cpp | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'logic/resources/Resource.cpp') diff --git a/logic/resources/Resource.cpp b/logic/resources/Resource.cpp index 3cc6b648..e95675d7 100644 --- a/logic/resources/Resource.cpp +++ b/logic/resources/Resource.cpp @@ -2,38 +2,45 @@ #include -#include "WebResourceHandler.h" -#include "IconResourceHandler.h" #include "ResourceObserver.h" +#include "ResourceHandler.h" // definition of static members of Resource QMap(const QString &)>> Resource::m_handlers; QMap, std::function> Resource::m_transfomers; QMap> Resource::m_resources; +struct NullResourceResult {}; +Q_DECLARE_METATYPE(NullResourceResult) +class NullResourceHandler : public ResourceHandler +{ +public: + explicit NullResourceHandler() + { + setResult(QVariant::fromValue(NullResourceResult())); + } +}; + Resource::Resource(const QString &resource) : m_resource(resource) { - // register default handlers - // QUESTION: move elsewhere? - if (!m_handlers.contains("web")) + if (!resource.isEmpty()) { - registerHandler("web"); + // a valid resource identifier has the format : + Q_ASSERT(resource.contains(':')); + // "parse" the resource identifier into id and data + const QString resourceId = resource.left(resource.indexOf(':')); + const QString resourceData = resource.mid(resource.indexOf(':') + 1); + + // create and set up the handler + Q_ASSERT(m_handlers.contains(resourceId)); + m_handler = m_handlers.value(resourceId)(resourceData); } - if (!m_handlers.contains("icon")) + else { - registerHandler("icon"); + m_handler = std::make_shared(); } - // a valid resource identifier has the format : - Q_ASSERT(resource.contains(':')); - // "parse" the resource identifier into id and data - const QString resourceId = resource.left(resource.indexOf(':')); - const QString resourceData = resource.mid(resource.indexOf(':') + 1); - - // create and set up the handler - Q_ASSERT(m_handlers.contains(resourceId)); - m_handler = m_handlers.value(resourceId)(resourceData); Q_ASSERT(m_handler); m_handler->init(m_handler); m_handler->setResource(this); -- cgit v1.2.3