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,5 +1,9 @@
|
||||
#include "qt/QtElementFactory.h"
|
||||
|
||||
#include "qt/element/QtArea.h"
|
||||
#include "qt/element/QtCanvas.h"
|
||||
#include "qt/QtWindow.h"
|
||||
|
||||
QtElementFactory::QtElementFactory()
|
||||
{
|
||||
}
|
||||
@@ -7,3 +11,15 @@ QtElementFactory::QtElementFactory()
|
||||
QtElementFactory::~QtElementFactory()
|
||||
{
|
||||
}
|
||||
|
||||
std::shared_ptr<GuiArea> QtElementFactory::createArea() const
|
||||
{
|
||||
return std::make_shared<QtArea>();
|
||||
}
|
||||
|
||||
std::shared_ptr<GuiCanvas> QtElementFactory::createCanvas(std::shared_ptr<GuiWindow> window) const
|
||||
{
|
||||
std::shared_ptr<GuiCanvas> canvas = std::make_shared<QtCanvas>();
|
||||
window->setCanvas(canvas);
|
||||
return canvas;
|
||||
}
|
||||
|
||||
@@ -3,11 +3,18 @@
|
||||
|
||||
#include "gui/GuiElementFactory.h"
|
||||
|
||||
class GuiArea;
|
||||
class GuiCanvas;
|
||||
class GuiWindow;
|
||||
|
||||
class QtElementFactory: public GuiElementFactory
|
||||
{
|
||||
public:
|
||||
QtElementFactory();
|
||||
~QtElementFactory();
|
||||
virtual ~QtElementFactory();
|
||||
|
||||
virtual std::shared_ptr<GuiArea> createArea() const;
|
||||
virtual std::shared_ptr<GuiCanvas> createCanvas(std::shared_ptr<GuiWindow> window) const;
|
||||
};
|
||||
|
||||
# endif // QT_ELEMENT_FACTORY_H
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#include "qt/QtWidgetWrapper.h"
|
||||
|
||||
#include "gui/GuiElement.h"
|
||||
#include "utility/logging/logging.h"
|
||||
|
||||
std::shared_ptr<QWidget> QtWidgetWrapper::getWidgetOfElement(std::shared_ptr<GuiElement> element)
|
||||
{
|
||||
return getWidgetOfElement(element.get());
|
||||
}
|
||||
|
||||
std::shared_ptr<QWidget> QtWidgetWrapper::getWidgetOfElement(GuiElement* element)
|
||||
{
|
||||
std::shared_ptr<QWidget> widget;
|
||||
std::shared_ptr<QtWidgetWrapper> qtWidgetWrapper = std::dynamic_pointer_cast<QtWidgetWrapper>(element->getWidgetWrapper());
|
||||
if (!qtWidgetWrapper || qtWidgetWrapper.use_count() == 0)
|
||||
{
|
||||
LOG_ERROR("Trying to get the qt widget of non qt gui element.");
|
||||
}
|
||||
else
|
||||
{
|
||||
widget = qtWidgetWrapper->getWidget();
|
||||
}
|
||||
return widget;
|
||||
}
|
||||
|
||||
QtWidgetWrapper::QtWidgetWrapper(std::shared_ptr<QWidget> widget)
|
||||
: m_widget(widget)
|
||||
{
|
||||
}
|
||||
|
||||
QtWidgetWrapper::~QtWidgetWrapper()
|
||||
{
|
||||
}
|
||||
|
||||
std::shared_ptr<QWidget> QtWidgetWrapper::getWidget()
|
||||
{
|
||||
return m_widget;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef QT_WIDGET_WRAPPER_H
|
||||
#define QT_WIDGET_WRAPPER_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <QtWidgets/qwidget.h>
|
||||
|
||||
#include "gui/WidgetWrapper.h"
|
||||
|
||||
class GuiElement;
|
||||
|
||||
class QtWidgetWrapper: public WidgetWrapper
|
||||
{
|
||||
public:
|
||||
static std::shared_ptr<QWidget> getWidgetOfElement(std::shared_ptr<GuiElement> element);
|
||||
static std::shared_ptr<QWidget> getWidgetOfElement(GuiElement* element);
|
||||
|
||||
QtWidgetWrapper(std::shared_ptr<QWidget> widget);
|
||||
virtual ~QtWidgetWrapper();
|
||||
|
||||
std::shared_ptr<QWidget> getWidget(); // not const because returned widget can be changed.
|
||||
|
||||
private:
|
||||
std::shared_ptr<QWidget> m_widget;
|
||||
};
|
||||
|
||||
#endif // QT_WIDGET_WRAPPER_H
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "qt/QtWindow.h"
|
||||
|
||||
#include "gui/GuiCanvas.h"
|
||||
#include "QtWidgetWrapper.h"
|
||||
|
||||
QtWindow::QtWindow()
|
||||
{
|
||||
m_window.setObjectName("QtWindow");
|
||||
m_window.show();
|
||||
}
|
||||
|
||||
QtWindow::~QtWindow()
|
||||
{
|
||||
}
|
||||
|
||||
void QtWindow::setCanvas(std::shared_ptr<GuiCanvas> canvas)
|
||||
{
|
||||
m_window.setCentralWidget(QtWidgetWrapper::getWidgetOfElement(canvas).get());
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef QT_WINDOW_H
|
||||
#define QT_WINDOW_H
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <QtWidgets/QMainWindow>
|
||||
|
||||
#include "gui/GuiWindow.h"
|
||||
|
||||
class GuiCanvas;
|
||||
|
||||
class QtWindow: public GuiWindow
|
||||
{
|
||||
public:
|
||||
QtWindow();
|
||||
~QtWindow();
|
||||
|
||||
void setCanvas(std::shared_ptr<GuiCanvas> canvas);
|
||||
|
||||
private:
|
||||
QMainWindow m_window;
|
||||
};
|
||||
|
||||
# endif // QT_WINDOW_H
|
||||
@@ -0,0 +1,43 @@
|
||||
#include "qt/element/QtArea.h"
|
||||
|
||||
#include <qframe.h>
|
||||
|
||||
#include "qt/QtWidgetWrapper.h"
|
||||
#include "utility/utilityQt.h"
|
||||
|
||||
QtArea::QtArea()
|
||||
: GuiArea(std::make_shared<QtWidgetWrapper>(std::make_shared<QFrame>()))
|
||||
{
|
||||
}
|
||||
|
||||
QtArea::~QtArea()
|
||||
{
|
||||
}
|
||||
|
||||
void QtArea::setPosition(Vec2i position)
|
||||
{
|
||||
}
|
||||
|
||||
Vec2i QtArea::getPosition() const
|
||||
{
|
||||
return Vec2i();
|
||||
}
|
||||
|
||||
void QtArea::setSize(Vec2i size)
|
||||
{
|
||||
}
|
||||
|
||||
Vec2i QtArea::getSize() const
|
||||
{
|
||||
return Vec2i();
|
||||
}
|
||||
|
||||
void QtArea::setBackgroundColor(Colori color)
|
||||
{
|
||||
utility::setWidgetBackgroundColor(getWidget(), color);
|
||||
}
|
||||
|
||||
std::shared_ptr<QWidget> QtArea::getWidget()
|
||||
{
|
||||
return QtWidgetWrapper::getWidgetOfElement(this);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
#ifndef QT_AREA_H
|
||||
#define QT_AREA_H
|
||||
|
||||
#include <qwidget.h>
|
||||
|
||||
#include "gui/GuiArea.h"
|
||||
|
||||
class QtArea: public GuiArea
|
||||
{
|
||||
public:
|
||||
QtArea();
|
||||
virtual ~QtArea();
|
||||
|
||||
virtual void setPosition(Vec2i position);
|
||||
virtual Vec2i getPosition() const;
|
||||
virtual void setSize(Vec2i size);
|
||||
virtual Vec2i getSize() const;
|
||||
|
||||
virtual void setBackgroundColor(Colori color);
|
||||
|
||||
private:
|
||||
std::shared_ptr<QWidget> getWidget();
|
||||
};
|
||||
|
||||
# endif // QT_AREA_H
|
||||
@@ -0,0 +1,59 @@
|
||||
#include "qt/element/QtCanvas.h"
|
||||
|
||||
#include <qgroupbox.h>
|
||||
#include <qlayout.h>
|
||||
|
||||
#include "qt/QtWidgetWrapper.h"
|
||||
#include "utility/utilityQt.h"
|
||||
|
||||
QtCanvas::QtCanvas()
|
||||
: GuiCanvas(std::make_shared<QtWidgetWrapper>(std::make_shared<QGroupBox>()))
|
||||
{
|
||||
QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom); // gets deleted by qt
|
||||
getWidget()->setLayout(layout);
|
||||
}
|
||||
|
||||
QtCanvas::~QtCanvas()
|
||||
{
|
||||
}
|
||||
|
||||
void QtCanvas::addChild(std::shared_ptr<GuiElement> element)
|
||||
{
|
||||
getWidget()->layout()->addWidget(QtWidgetWrapper::getWidgetOfElement(element).get());
|
||||
}
|
||||
|
||||
void QtCanvas::removeChild(std::shared_ptr<GuiElement> element)
|
||||
{
|
||||
std::shared_ptr<QWidget> widgetToRemove = QtWidgetWrapper::getWidgetOfElement(element);
|
||||
getWidget()->layout()->removeWidget(widgetToRemove.get());
|
||||
widgetToRemove->setGeometry(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
void QtCanvas::setPosition(Vec2i position)
|
||||
{
|
||||
}
|
||||
|
||||
Vec2i QtCanvas::getPosition() const
|
||||
{
|
||||
return Vec2i();
|
||||
}
|
||||
|
||||
void QtCanvas::setSize(Vec2i size)
|
||||
{
|
||||
}
|
||||
|
||||
Vec2i QtCanvas::getSize() const
|
||||
{
|
||||
return Vec2i();
|
||||
}
|
||||
|
||||
void QtCanvas::setBackgroundColor(Colori color)
|
||||
{
|
||||
utility::setWidgetBackgroundColor(getWidget(), color);
|
||||
}
|
||||
|
||||
std::shared_ptr<QWidget> QtCanvas::getWidget()
|
||||
{
|
||||
return QtWidgetWrapper::getWidgetOfElement(this);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef QT_CANVAS_H
|
||||
#define QT_CANVAS_H
|
||||
|
||||
#include <qwidget.h>
|
||||
#include <QtWidgets/QMainWindow>
|
||||
|
||||
#include "gui/GuiCanvas.h"
|
||||
|
||||
class QtCanvas: public GuiCanvas
|
||||
{
|
||||
public:
|
||||
QtCanvas();
|
||||
virtual ~QtCanvas();
|
||||
|
||||
virtual void addChild(std::shared_ptr<GuiElement> element);
|
||||
virtual void removeChild(std::shared_ptr<GuiElement> element);
|
||||
|
||||
virtual void setPosition(Vec2i position);
|
||||
virtual Vec2i getPosition() const;
|
||||
virtual void setSize(Vec2i size);
|
||||
virtual Vec2i getSize() const;
|
||||
|
||||
virtual void setBackgroundColor(Colori color);
|
||||
|
||||
private:
|
||||
std::shared_ptr<QWidget> getWidget();
|
||||
};
|
||||
|
||||
# endif // QT_CANVAS_H
|
||||
Reference in New Issue
Block a user