#ifndef VIEW_H #define VIEW_H #include #include #include "component/Component.h" #include "component/view/ViewLayout.h" class ViewWidgetWrapper; template class ControllerProxy; class View { public: template static std::shared_ptr createInitAndAddToLayout(ViewLayout* viewLayout); template static std::shared_ptr createAndInit(ViewLayout* viewLayout); View(ViewLayout* viewLayout); virtual ~View(); virtual std::string getName() const = 0; virtual void createWidgetWrapper() = 0; virtual void initView() = 0; virtual void refreshView() = 0; void init(); void addToLayout(); void showDockWidget(); void setComponent(Component* component); ViewWidgetWrapper* getWidgetWrapper() const; ViewLayout* getViewLayout() const; protected: template ControllerType* getController(); void setWidgetWrapper(std::shared_ptr widgetWrapper); private: template friend class ControllerProxy; Component* m_component; ViewLayout* const m_viewLayout; std::shared_ptr m_widgetWrapper; }; template std::shared_ptr View::createInitAndAddToLayout(ViewLayout* viewLayout) { std::shared_ptr ptr = View::createAndInit(viewLayout); ptr->addToLayout(); return ptr; } template std::shared_ptr View::createAndInit(ViewLayout* viewLayout) { std::shared_ptr ptr = std::make_shared(viewLayout); ptr->init(); return ptr; } template ControllerType* View::getController() { if (m_component) { return m_component->getController(); } return nullptr; } #endif // VIEW_H