ui: implemented gui abstraction and dummy view
- added abstract class tree for gui elements. - implemented concrete gui classes that wrap the qt specific content. - implemented first DummyView which plays nice with the ViewManager. review id = 12
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#include "component/Component.h"
|
||||
|
||||
Component::Component(const std::shared_ptr<Controller>& controller, const std::shared_ptr<View>& view)
|
||||
: m_controller(controller)
|
||||
, m_view(view)
|
||||
Component::Component(std::shared_ptr<View> view, std::shared_ptr<Controller> controller)
|
||||
: m_controller(controller)
|
||||
, m_view(view)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
class Component
|
||||
{
|
||||
public:
|
||||
Component(const std::shared_ptr<Controller>& controller, const std::shared_ptr<View>& view);
|
||||
Component(std::shared_ptr<View> view, std::shared_ptr<Controller> controller);
|
||||
|
||||
~Component();
|
||||
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
#include "component/ComponentFactory.h"
|
||||
|
||||
#include "component/view/DummyView.h"
|
||||
#include "component/controller/DummyController.h"
|
||||
|
||||
std::shared_ptr<ComponentFactory> ComponentFactory::create(
|
||||
const std::shared_ptr<ViewManager>& viewManager,
|
||||
const std::shared_ptr<GuiElementFactory>& guiElementFactory,
|
||||
const std::shared_ptr<CodeAccess>& codeAccess,
|
||||
const std::shared_ptr<GraphAccess>& graphAccess)
|
||||
std::shared_ptr<ViewManager> viewManager,
|
||||
std::shared_ptr<GuiElementFactory> guiElementFactory,
|
||||
std::shared_ptr<CodeAccess> codeAccess,
|
||||
std::shared_ptr<GraphAccess> graphAccess)
|
||||
{
|
||||
std::shared_ptr<ComponentFactory> ptr(new ComponentFactory());
|
||||
ptr->m_viewManger = viewManager;
|
||||
@@ -14,10 +17,19 @@ std::shared_ptr<ComponentFactory> ComponentFactory::create(
|
||||
return ptr;
|
||||
}
|
||||
|
||||
ComponentFactory::ComponentFactory()
|
||||
{
|
||||
}
|
||||
|
||||
ComponentFactory::~ComponentFactory()
|
||||
{
|
||||
}
|
||||
|
||||
std::shared_ptr<Component> ComponentFactory::createDummyComponent()
|
||||
{
|
||||
std::shared_ptr<View> view = std::make_shared<DummyView>(m_viewManger, m_guiElementFactory);
|
||||
std::shared_ptr<Controller> controller = std::make_shared<DummyController>();
|
||||
|
||||
std::shared_ptr<Component> component = std::make_shared<Component>(view, controller);
|
||||
return component;
|
||||
}
|
||||
|
||||
ComponentFactory::ComponentFactory()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -13,13 +13,15 @@ class ComponentFactory
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<ComponentFactory> create(
|
||||
const std::shared_ptr<ViewManager>& viewManager,
|
||||
const std::shared_ptr<GuiElementFactory>& guiElementFactory,
|
||||
const std::shared_ptr<CodeAccess>& codeAccess,
|
||||
const std::shared_ptr<GraphAccess>& graphAccess);
|
||||
std::shared_ptr<ViewManager> viewManager,
|
||||
std::shared_ptr<GuiElementFactory> guiElementFactory,
|
||||
std::shared_ptr<CodeAccess> codeAccess,
|
||||
std::shared_ptr<GraphAccess> graphAccess);
|
||||
|
||||
~ComponentFactory();
|
||||
|
||||
std::shared_ptr<Component> createDummyComponent();
|
||||
|
||||
private:
|
||||
ComponentFactory();
|
||||
ComponentFactory(const ComponentFactory&);
|
||||
|
||||
@@ -1,16 +1,21 @@
|
||||
#include "component/ComponentManager.h"
|
||||
|
||||
std::shared_ptr<ComponentManager> ComponentManager::create(
|
||||
const std::shared_ptr<ViewManager>& viewManager,
|
||||
const std::shared_ptr<GuiElementFactory>& guiElementFactory,
|
||||
const std::shared_ptr<CodeAccess>& codeAccess,
|
||||
const std::shared_ptr<GraphAccess>& graphAccess)
|
||||
std::shared_ptr<ViewManager> viewManager,
|
||||
std::shared_ptr<GuiElementFactory> guiElementFactory,
|
||||
std::shared_ptr<CodeAccess> codeAccess,
|
||||
std::shared_ptr<GraphAccess> graphAccess)
|
||||
{
|
||||
std::shared_ptr<ComponentManager> ptr(new ComponentManager());
|
||||
ptr->m_componentFactory = ComponentFactory::create(viewManager, guiElementFactory, codeAccess, graphAccess);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void ComponentManager::setup()
|
||||
{
|
||||
m_components.push_back(m_componentFactory->createDummyComponent());
|
||||
}
|
||||
|
||||
ComponentManager::ComponentManager()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -15,13 +15,15 @@ class ComponentManager
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<ComponentManager> create(
|
||||
const std::shared_ptr<ViewManager>& viewManager,
|
||||
const std::shared_ptr<GuiElementFactory>& guiElementFactory,
|
||||
const std::shared_ptr<CodeAccess>& codeAccess,
|
||||
const std::shared_ptr<GraphAccess>& graphAccess);
|
||||
std::shared_ptr<ViewManager> viewManager,
|
||||
std::shared_ptr<GuiElementFactory> guiElementFactory,
|
||||
std::shared_ptr<CodeAccess> codeAccess,
|
||||
std::shared_ptr<GraphAccess> graphAccess);
|
||||
|
||||
~ComponentManager();
|
||||
|
||||
void setup();
|
||||
|
||||
private:
|
||||
ComponentManager();
|
||||
ComponentManager(const ComponentManager&);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#include "component/controller/DummyController.h"
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef DUMMY_CONTROLLER_H
|
||||
#define DUMMY_CONTROLLER_H
|
||||
|
||||
#include "component/controller/Controller.h"
|
||||
|
||||
class DummyController: public Controller
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
#endif // DUMMY_CONTROLLER_H
|
||||
@@ -1,2 +0,0 @@
|
||||
#include "component/view/CodeView.h"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef CODE_VIEW_H
|
||||
#define CODE_VIEW_H
|
||||
|
||||
#include "component/view/View.h"
|
||||
|
||||
class CodeView: public View
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
#endif // CODE_VIEW_H
|
||||
@@ -0,0 +1,15 @@
|
||||
#include "component/view/DummyView.h"
|
||||
|
||||
#include "gui/GuiArea.h"
|
||||
#include "gui/GuiElementFactory.h"
|
||||
|
||||
DummyView::DummyView(std::shared_ptr<ViewManager> viewManager, std::shared_ptr<GuiElementFactory> guiElementFactory)
|
||||
: View(viewManager, guiElementFactory->createArea(), Vec2i(100, 100))
|
||||
, m_guiElementFactory(guiElementFactory)
|
||||
{
|
||||
getRootElement()->setBackgroundColor(0, 255, 0, 255);
|
||||
}
|
||||
|
||||
DummyView::~DummyView()
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef DUMMY_VIEW_H
|
||||
#define DUMMY_VIEW_H
|
||||
|
||||
#include "component/view/View.h"
|
||||
|
||||
class GuiElementFactory;
|
||||
|
||||
class DummyView: public View
|
||||
{
|
||||
public:
|
||||
DummyView(std::shared_ptr<ViewManager> viewManager, std::shared_ptr<GuiElementFactory> guiElementFactory);
|
||||
virtual ~DummyView();
|
||||
|
||||
private:
|
||||
std::shared_ptr<GuiElementFactory> m_guiElementFactory;
|
||||
};
|
||||
|
||||
|
||||
#endif // DUMMY_VIEW_H
|
||||
@@ -1,5 +1,35 @@
|
||||
#include "component/view/View.h"
|
||||
#include "component/view/ViewManager.h"
|
||||
|
||||
View::View(std::shared_ptr<ViewManager> viewManager, std::shared_ptr<GuiElement> rootElement, const Vec2i& minSize)
|
||||
: m_viewManager(viewManager)
|
||||
, m_rootElement(rootElement)
|
||||
, m_minSize(minSize)
|
||||
{
|
||||
m_viewManager->addView(this);
|
||||
}
|
||||
|
||||
View::~View()
|
||||
{
|
||||
m_viewManager->removeView(this);
|
||||
}
|
||||
|
||||
std::shared_ptr<GuiElement> View::getRootElement()
|
||||
{
|
||||
return m_rootElement;
|
||||
}
|
||||
|
||||
int View::getMinWidth() const
|
||||
{
|
||||
return m_minSize.x;
|
||||
}
|
||||
|
||||
int View::getMinHeight() const
|
||||
{
|
||||
return m_minSize.y;
|
||||
}
|
||||
|
||||
Vec2i View::getMinSize() const
|
||||
{
|
||||
return m_minSize;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,29 @@
|
||||
#ifndef VIEW_H
|
||||
#define VIEW_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "utility/math/Vector2.h"
|
||||
|
||||
class GuiElement;
|
||||
class ViewManager;
|
||||
|
||||
class View
|
||||
{
|
||||
public:
|
||||
View(std::shared_ptr<ViewManager> viewManager, std::shared_ptr<GuiElement> rootElement, const Vec2i& minSize);
|
||||
virtual ~View();
|
||||
|
||||
std::shared_ptr<GuiElement> getRootElement();
|
||||
|
||||
int getMinWidth() const;
|
||||
int getMinHeight() const;
|
||||
Vec2i getMinSize() const;
|
||||
|
||||
private:
|
||||
std::shared_ptr<ViewManager> m_viewManager;
|
||||
std::shared_ptr<GuiElement> m_rootElement;
|
||||
Vec2i m_minSize;
|
||||
};
|
||||
|
||||
|
||||
#endif // VIEW_H
|
||||
|
||||
@@ -1,9 +1,29 @@
|
||||
#include "component/view/ViewManager.h"
|
||||
|
||||
ViewManager::ViewManager()
|
||||
#include "gui/GuiCanvas.h"
|
||||
#include "View.h"
|
||||
|
||||
ViewManager::ViewManager(std::shared_ptr<GuiCanvas> canvas)
|
||||
: m_canvas(canvas)
|
||||
{
|
||||
}
|
||||
|
||||
ViewManager::~ViewManager()
|
||||
{
|
||||
}
|
||||
|
||||
void ViewManager::addView(View* view)
|
||||
{
|
||||
m_views.push_back(view);
|
||||
m_canvas->addChild(view->getRootElement());
|
||||
}
|
||||
|
||||
void ViewManager::removeView(View* view)
|
||||
{
|
||||
std::vector<View*>::iterator it = std::find(m_views.begin(), m_views.end(), view);
|
||||
if (it != m_views.end())
|
||||
{
|
||||
m_canvas->removeChild((*it)->getRootElement());
|
||||
m_views.erase(it);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,16 +4,21 @@
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "component/view/View.h"
|
||||
class GuiCanvas;
|
||||
class View;
|
||||
|
||||
class ViewManager
|
||||
{
|
||||
public:
|
||||
ViewManager();
|
||||
ViewManager(std::shared_ptr<GuiCanvas> canvas);
|
||||
~ViewManager();
|
||||
|
||||
void addView(View* view);
|
||||
void removeView(View* view);
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr<View> > m_views;
|
||||
std::shared_ptr<GuiCanvas> m_canvas;
|
||||
std::vector<View*> m_views;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user