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:
malte_langkabel
2014-05-07 13:00:17 +02:00
parent 387618d922
commit 37d0dd33a4
51 changed files with 812 additions and 58 deletions
+3 -3
View File
@@ -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)
{
}
+1 -1
View File
@@ -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();
+20 -8
View File
@@ -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()
{
}
+6 -4
View File
@@ -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&);
+9 -4
View File
@@ -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()
{
}
+6 -4
View File
@@ -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
-2
View File
@@ -1,2 +0,0 @@
#include "component/view/CodeView.h"
-11
View File
@@ -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
+15
View File
@@ -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()
{
}
+19
View File
@@ -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
+30
View File
@@ -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;
}
+19 -1
View File
@@ -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
+21 -1
View File
@@ -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);
}
}
+8 -3
View File
@@ -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;
};