#ifndef QTMVVM_VIEWMODEL_H #define QTMVVM_VIEWMODEL_H #include #include #include #include #include #include "QtMvvmCore/qtmvvmcore_global.h" namespace QtMvvm { class ViewModelPrivate; class Q_MVVMCORE_EXPORT ViewModel : public QObject { Q_OBJECT Q_PROPERTY(bool deleteOnClose READ deleteOnClose WRITE setDeleteOnClose NOTIFY deleteOnCloseChanged) public: explicit ViewModel(QObject *parent = nullptr); ~ViewModel(); virtual ViewModel *parentViewModel() const; bool deleteOnClose() const; template inline static void show(const QVariantHash ¶ms = {}); public Q_SLOTS: void setDeleteOnClose(bool deleteOnClose); virtual void onInit(const QVariantHash ¶ms); Q_SIGNALS: void deleteOnCloseChanged(bool deleteOnClose, QPrivateSignal); protected: template inline void showChild(const QVariantHash ¶ms = {}) const; private: QScopedPointer d; static void showImp(const QMetaObject *mo, const QVariantHash ¶ms, QPointer parent); }; template inline void ViewModel::show(const QVariantHash ¶ms) { static_assert(std::is_base_of::value, "TViewModel must extend QtMvvm::ViewModel"); showImp(&TViewModel::staticMetaObject, params, nullptr); } template inline void ViewModel::showChild(const QVariantHash ¶ms) const { static_assert(std::is_base_of::value, "TViewModel must extend QtMvvm::ViewModel"); showImp(&TViewModel::staticMetaObject, params, const_cast(this)); } } #endif // QTMVVM_VIEWMODEL_H