#ifndef VIEW_H #define VIEW_H #include #include #include "component/Component.h" #include "component/view/ViewLayout.h" #include "utility/math/Vector2.h" class ViewWidgetWrapper; class View { public: template static std::shared_ptr create(ViewLayout* viewLayout); View(ViewLayout* viewLayout, const Vec2i& minSize); virtual ~View(); virtual std::string getName() const = 0; virtual void createWidgetWrapper() = 0; virtual void initView() = 0; virtual void refreshView() = 0; void setComponent(Component* component); void setWidgetWrapper(std::shared_ptr widgetWrapper); ViewWidgetWrapper* getWidgetWrapper() const; int getMinWidth() const; int getMinHeight() const; Vec2i getMinSize() const; protected: template ControllerType* getController(); ViewLayout* getViewLayout() const; private: Component* m_component; ViewLayout* const m_viewLayout; std::shared_ptr m_widgetWrapper; Vec2i m_minSize; }; template std::shared_ptr View::create(ViewLayout* viewLayout) { std::shared_ptr ptr = std::make_shared(viewLayout); ptr->createWidgetWrapper(); ptr->initView(); viewLayout->addView(ptr.get()); return ptr; } template ControllerType* View::getController() { if (m_component) { return m_component->getController(); } return NULL; } #endif // VIEW_H