Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
2.1 KiB

#ifndef QTMVVM_VIEWMODEL_H
#define QTMVVM_VIEWMODEL_H
#include <type_traits>
#include <QtCore/qobject.h>
#include <QtCore/qscopedpointer.h>
7 years ago
#include <QtCore/qvariant.h>
#include <QtCore/qpointer.h>
#include "QtMvvmCore/qtmvvmcore_global.h"
namespace QtMvvm {
class CoreApp;
class ViewModelPrivate;
class Q_MVVMCORE_EXPORT ViewModel : public QObject
{
Q_OBJECT
public:
explicit ViewModel(QObject *parent = nullptr);
~ViewModel();
public Q_SLOTS:
virtual void onInit(const QVariantHash &params);
virtual void onResult(quint32 requestCode, const QVariant &result);
Q_SIGNALS:
void resultReady(const QVariant &result);
protected:
7 years ago
template <typename TViewModel>
inline void show(const QVariantHash &params = {}) const;
void show(const char *viewModelName, const QVariantHash &params = {}) const;
void show(const QMetaObject *viewMetaObject, const QVariantHash &params = {}) const;
template <typename TViewModel>
inline void showForResult(quint32 requestCode, const QVariantHash &params = {}) const;
void showForResult(quint32 requestCode, const char *viewModelName, const QVariantHash &params = {}) const;
void showForResult(quint32 requestCode, const QMetaObject *viewMetaObject, const QVariantHash &params = {}) const;
7 years ago
private:
friend class QtMvvm::CoreApp;
QScopedPointer<ViewModelPrivate> d;
static void showImp(const QMetaObject *metaObject, const QVariantHash &params, QPointer<ViewModel> parent, quint32 requestCode = 0);
};
// ------------- Generic Implementation -------------
template<typename TViewModel>
inline void ViewModel::show(const QVariantHash &params) const
7 years ago
{
static_assert(std::is_base_of<ViewModel, TViewModel>::value, "TViewModel must extend QtMvvm::ViewModel");
showImp(&TViewModel::staticMetaObject, params, const_cast<ViewModel*>(this));
7 years ago
}
template<typename TViewModel>
void ViewModel::showForResult(quint32 requestCode, const QVariantHash &params) const
{
static_assert(std::is_base_of<ViewModel, TViewModel>::value, "TViewModel must extend QtMvvm::ViewModel");
showImp(&TViewModel::staticMetaObject, params, const_cast<ViewModel*>(this), requestCode);
}
}
#endif // QTMVVM_VIEWMODEL_H