diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-04-10 04:29:29 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-04-30 23:59:23 +0200 |
commit | 47e37635f50c09b4f9a9ee7699e3120bab3e4088 (patch) | |
tree | 061c2f675fb7e244ebe4b54ef206bfbd615c91f8 /logic/resources/ResourceObserver.h | |
parent | fcd4a482f759cd58ee319a51082d0146b7e426e2 (diff) | |
download | MultiMC-47e37635f50c09b4f9a9ee7699e3120bab3e4088.tar MultiMC-47e37635f50c09b4f9a9ee7699e3120bab3e4088.tar.gz MultiMC-47e37635f50c09b4f9a9ee7699e3120bab3e4088.tar.lz MultiMC-47e37635f50c09b4f9a9ee7699e3120bab3e4088.tar.xz MultiMC-47e37635f50c09b4f9a9ee7699e3120bab3e4088.zip |
NOISSUE split GUI stuff from logic library
Diffstat (limited to 'logic/resources/ResourceObserver.h')
-rw-r--r-- | logic/resources/ResourceObserver.h | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/logic/resources/ResourceObserver.h b/logic/resources/ResourceObserver.h deleted file mode 100644 index c42e41ba..00000000 --- a/logic/resources/ResourceObserver.h +++ /dev/null @@ -1,73 +0,0 @@ -#pragma once - -#include <memory> -#include <functional> - -#include <QObject> -#include <QMetaProperty> -#include "multimc_logic_export.h" - -class QVariant; -class Resource; - -/// Base class for things that can use a resource -class MULTIMC_LOGIC_EXPORT ResourceObserver -{ -public: - virtual ~ResourceObserver(); - -protected: // these methods are called by the Resource when something changes - virtual void resourceUpdated() = 0; - virtual void setFailure(const QString &) {} - virtual void setProgress(const int) {} - -private: - friend class Resource; - void setSource(std::shared_ptr<Resource> resource) { m_resource = resource; } - -protected: - template<typename T> - T get() const { return getInternal(qMetaTypeId<T>()).template value<T>(); } - QVariant getInternal(const int typeId) const; - -private: - std::shared_ptr<Resource> m_resource; -}; - -/** Observer for QObject properties - * - * Give it a target and the name of a property, and that property will be set when the resource changes. - * - * If no name is given an attempt to find a default property for some common classes is done. - */ -class MULTIMC_LOGIC_EXPORT QObjectResourceObserver : public QObject, public ResourceObserver -{ -public: - explicit QObjectResourceObserver(QObject *target, const char *property = nullptr); - - void resourceUpdated() override; - -private: - QObject *m_target; - QMetaProperty m_property; -}; - -/** Observer for functions, lambdas etc. - * Template arguments: - * * We need Ret and Arg in order to create the std::function - * * We need Func in order to std::forward the function - */ -template <typename Ret, typename Arg, typename Func> -class FunctionResourceObserver : public ResourceObserver -{ - std::function<Ret(Arg)> m_function; -public: - template <typename T> - explicit FunctionResourceObserver(T &&func) - : m_function(std::forward<Func>(func)) {} - - void resourceUpdated() override - { - m_function(get<Arg>()); - } -}; |