From fdba1b2a8495503bf279ffb401554d2bfd286b4d Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Wed, 2 Jul 2014 12:25:51 +0200 Subject: [PATCH] ui: Abstracting the UI on view level instead of element level This change switches the view creation architecture from element based creation in the lib to view based creation in the app. This avoids wrapping of the Qt elements and instead defines interfaces for the different View implementations. * GuiElementFactory was renamed to GuiFactory and is now responsible for View creation instead of Element creation. * WidgetWrappers are now used on Views to access their root widget. * Removed DummyView and DummyController. * Removed GuiElement and corresponding QtElement files. * Removed ViewManager, functionality is now handled via MainView. * Added MainView, where Views are registered via the ViewLayout interface. * Added QtMainWindow, derived from QMainWindow and instantiated by QtMainView, which displays the Views as QDockWidgets. fortune cookie message = All your hard work will soon pay off. --- src/app/CMakeLists.txt | 21 +++--- src/app/main.cpp | 9 +-- src/app/qt/QtElementFactory.cpp | 38 ---------- src/app/qt/QtElementFactory.h | 22 ------ src/app/qt/QtGuiFactory.cpp | 22 ++++++ src/app/qt/QtGuiFactory.h | 16 +++++ src/app/qt/QtWidgetWrapper.cpp | 29 ++++---- src/app/qt/QtWidgetWrapper.h | 11 ++- src/app/qt/QtWindow.cpp | 19 ----- src/app/qt/QtWindow.h | 24 ------- src/app/qt/element/QtArea.cpp | 43 ------------ src/app/qt/element/QtArea.h | 25 ------- src/app/qt/element/QtCanvas.cpp | 59 ---------------- src/app/qt/element/QtCanvas.h | 29 -------- src/app/qt/element/QtLayout.cpp | 70 ------------------- src/app/qt/element/QtLayout.h | 33 --------- src/app/qt/element/QtMainWindow.cpp | 37 ++++++++++ src/app/qt/element/QtMainWindow.h | 27 +++++++ src/app/{ => qt}/utility/utilityQt.cpp | 3 +- src/app/{ => qt}/utility/utilityQt.h | 2 +- src/app/qt/view/QtCodeView.cpp | 29 +++++--- src/app/qt/view/QtCodeView.h | 8 ++- src/app/qt/view/QtMainView.cpp | 33 +++++++++ src/app/qt/view/QtMainView.h | 27 +++++++ src/lib/Application.cpp | 14 ++-- src/lib/Application.h | 10 +-- src/lib/CMakeLists.txt | 36 +++------- src/lib/component/ComponentFactory.cpp | 23 ++---- src/lib/component/ComponentFactory.h | 14 ++-- src/lib/component/ComponentManager.cpp | 17 +++-- src/lib/component/ComponentManager.h | 13 ++-- .../component/controller/DummyController.cpp | 1 - .../component/controller/DummyController.h | 11 --- src/lib/component/view/CodeView.cpp | 9 ++- src/lib/component/view/CodeView.h | 8 +-- src/lib/component/view/DummyView.cpp | 15 ---- src/lib/component/view/DummyView.h | 19 ----- src/lib/component/view/MainView.cpp | 9 +++ src/lib/component/view/MainView.h | 13 ++++ src/lib/component/view/View.cpp | 28 +++++--- src/lib/component/view/View.h | 38 ++++++++-- src/lib/component/view/ViewLayout.cpp | 9 +++ src/lib/component/view/ViewLayout.h | 16 +++++ src/lib/component/view/ViewManager.cpp | 31 -------- src/lib/component/view/ViewManager.h | 25 ------- src/lib/gui/GuiArea.cpp | 10 --- src/lib/gui/GuiArea.h | 14 ---- src/lib/gui/GuiCanvas.cpp | 10 --- src/lib/gui/GuiCanvas.h | 13 ---- src/lib/gui/GuiContainer.cpp | 10 --- src/lib/gui/GuiContainer.h | 19 ----- src/lib/gui/GuiControl.cpp | 10 --- src/lib/gui/GuiControl.h | 14 ---- src/lib/gui/GuiElement.cpp | 22 ------ src/lib/gui/GuiElement.h | 32 --------- src/lib/gui/GuiElementFactory.cpp | 5 -- src/lib/gui/GuiElementFactory.h | 27 ------- src/lib/gui/GuiFactory.cpp | 9 +++ src/lib/gui/GuiFactory.h | 20 ++++++ src/lib/gui/GuiLayout.cpp | 10 --- src/lib/gui/GuiLayout.h | 24 ------- src/lib/gui/GuiWidgetWrapper.cpp | 9 +++ src/lib/gui/GuiWidgetWrapper.h | 11 +++ src/lib/gui/GuiWindow.cpp | 11 --- src/lib/gui/GuiWindow.h | 17 ----- src/lib/gui/WidgetWrapper.cpp | 9 --- src/lib/gui/WidgetWrapper.h | 11 --- 67 files changed, 424 insertions(+), 888 deletions(-) delete mode 100644 src/app/qt/QtElementFactory.cpp delete mode 100644 src/app/qt/QtElementFactory.h create mode 100644 src/app/qt/QtGuiFactory.cpp create mode 100644 src/app/qt/QtGuiFactory.h delete mode 100644 src/app/qt/QtWindow.cpp delete mode 100644 src/app/qt/QtWindow.h delete mode 100644 src/app/qt/element/QtArea.cpp delete mode 100644 src/app/qt/element/QtArea.h delete mode 100644 src/app/qt/element/QtCanvas.cpp delete mode 100644 src/app/qt/element/QtCanvas.h delete mode 100644 src/app/qt/element/QtLayout.cpp delete mode 100644 src/app/qt/element/QtLayout.h create mode 100644 src/app/qt/element/QtMainWindow.cpp create mode 100644 src/app/qt/element/QtMainWindow.h rename src/app/{ => qt}/utility/utilityQt.cpp (74%) rename src/app/{ => qt}/utility/utilityQt.h (65%) create mode 100644 src/app/qt/view/QtMainView.cpp create mode 100644 src/app/qt/view/QtMainView.h delete mode 100644 src/lib/component/controller/DummyController.cpp delete mode 100644 src/lib/component/controller/DummyController.h delete mode 100644 src/lib/component/view/DummyView.cpp delete mode 100644 src/lib/component/view/DummyView.h create mode 100644 src/lib/component/view/MainView.cpp create mode 100644 src/lib/component/view/MainView.h create mode 100644 src/lib/component/view/ViewLayout.cpp create mode 100644 src/lib/component/view/ViewLayout.h delete mode 100644 src/lib/component/view/ViewManager.cpp delete mode 100644 src/lib/component/view/ViewManager.h delete mode 100644 src/lib/gui/GuiArea.cpp delete mode 100644 src/lib/gui/GuiArea.h delete mode 100644 src/lib/gui/GuiCanvas.cpp delete mode 100644 src/lib/gui/GuiCanvas.h delete mode 100644 src/lib/gui/GuiContainer.cpp delete mode 100644 src/lib/gui/GuiContainer.h delete mode 100644 src/lib/gui/GuiControl.cpp delete mode 100644 src/lib/gui/GuiControl.h delete mode 100644 src/lib/gui/GuiElement.cpp delete mode 100644 src/lib/gui/GuiElement.h delete mode 100644 src/lib/gui/GuiElementFactory.cpp delete mode 100644 src/lib/gui/GuiElementFactory.h create mode 100644 src/lib/gui/GuiFactory.cpp create mode 100644 src/lib/gui/GuiFactory.h delete mode 100644 src/lib/gui/GuiLayout.cpp delete mode 100644 src/lib/gui/GuiLayout.h create mode 100644 src/lib/gui/GuiWidgetWrapper.cpp create mode 100644 src/lib/gui/GuiWidgetWrapper.h delete mode 100644 src/lib/gui/GuiWindow.cpp delete mode 100644 src/lib/gui/GuiWindow.h delete mode 100644 src/lib/gui/WidgetWrapper.cpp delete mode 100644 src/lib/gui/WidgetWrapper.h diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index a0e952ed..51696964 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -1,28 +1,23 @@ add_files( APP_FILES - qt/element/QtArea.cpp - qt/element/QtArea.h - qt/element/QtCanvas.cpp - qt/element/QtCanvas.h - qt/element/QtLayout.cpp - qt/element/QtLayout.h + qt/element/QtMainWindow.cpp + qt/element/QtMainWindow.h qt/utility/QtHighLighter.cpp qt/utility/QtHighLighter.h + qt/utility/utilityQt.cpp + qt/utility/utilityQt.h qt/view/QtCodeView.cpp qt/view/QtCodeView.h + qt/view/QtMainView.cpp + qt/view/QtMainView.h + qt/QtGuiFactory.cpp + qt/QtGuiFactory.h qt/QtWidgetWrapper.cpp qt/QtWidgetWrapper.h - qt/QtElementFactory.cpp - qt/QtElementFactory.h - qt/QtWindow.cpp - qt/QtWindow.h - - utility/utilityQt.cpp - utility/utilityQt.h includesWindows.h main.cpp diff --git a/src/app/main.cpp b/src/app/main.cpp index f1b26f94..c6d5d76f 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -4,17 +4,14 @@ #include "Application.h" #include "includes.h" -#include "qt/QtElementFactory.h" -#include "qt/QtWindow.h" +#include "qt/QtGuiFactory.h" int main(int argc, char *argv[]) { QApplication qtApp(argc, argv); - std::shared_ptr elementFactory = std::make_shared(); + QtGuiFactory guiFactory; - std::shared_ptr window = std::make_shared(); - - std::shared_ptr app = Application::create(elementFactory, window); + std::shared_ptr app = Application::create(&guiFactory); app->loadProject(); return qtApp.exec(); diff --git a/src/app/qt/QtElementFactory.cpp b/src/app/qt/QtElementFactory.cpp deleted file mode 100644 index 490ddbf3..00000000 --- a/src/app/qt/QtElementFactory.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "qt/QtElementFactory.h" - -#include "component/view/CodeView.h" -#include "qt/element/QtArea.h" -#include "qt/element/QtCanvas.h" -#include "qt/element/QtLayout.h" -#include "qt/view/QtCodeView.h" -#include "qt/QtWindow.h" - -QtElementFactory::QtElementFactory() -{ -} - -QtElementFactory::~QtElementFactory() -{ -} - -std::shared_ptr QtElementFactory::createArea() const -{ - return std::make_shared(); -} - -std::shared_ptr QtElementFactory::createCanvas(std::shared_ptr window) const -{ - std::shared_ptr canvas = std::make_shared(); - window->setCanvas(canvas); - return canvas; -} - -std::shared_ptr QtElementFactory::createLayout() const -{ - return std::make_shared(); -} - -std::shared_ptr QtElementFactory::createCodeView(std::shared_ptr viewManager) const -{ - return std::make_shared(viewManager); -} diff --git a/src/app/qt/QtElementFactory.h b/src/app/qt/QtElementFactory.h deleted file mode 100644 index f4e777fc..00000000 --- a/src/app/qt/QtElementFactory.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef QT_ELEMENT_FACTORY_H -#define QT_ELEMENT_FACTORY_H - -#include "gui/GuiElementFactory.h" - -class CodeView; -class ViewManager; - -class QtElementFactory: public GuiElementFactory -{ -public: - QtElementFactory(); - virtual ~QtElementFactory(); - - virtual std::shared_ptr createArea() const; - virtual std::shared_ptr createCanvas(std::shared_ptr window) const; - virtual std::shared_ptr createLayout() const; - - virtual std::shared_ptr createCodeView(std::shared_ptr viewManager) const; -}; - -# endif // QT_ELEMENT_FACTORY_H diff --git a/src/app/qt/QtGuiFactory.cpp b/src/app/qt/QtGuiFactory.cpp new file mode 100644 index 00000000..da6e69c9 --- /dev/null +++ b/src/app/qt/QtGuiFactory.cpp @@ -0,0 +1,22 @@ +#include "qt/QtGuiFactory.h" + +#include "qt/view/QtCodeView.h" +#include "qt/view/QtMainView.h" + +QtGuiFactory::QtGuiFactory() +{ +} + +QtGuiFactory::~QtGuiFactory() +{ +} + +std::shared_ptr QtGuiFactory::createMainView() const +{ + return std::make_shared(); +} + +std::shared_ptr QtGuiFactory::createCodeView(ViewLayout* viewLayout) const +{ + return View::create(viewLayout); +} diff --git a/src/app/qt/QtGuiFactory.h b/src/app/qt/QtGuiFactory.h new file mode 100644 index 00000000..af0e2700 --- /dev/null +++ b/src/app/qt/QtGuiFactory.h @@ -0,0 +1,16 @@ +#ifndef QT_GUI_FACTORY_H +#define QT_GUI_FACTORY_H + +#include "gui/GuiFactory.h" + +class QtGuiFactory: public GuiFactory +{ +public: + QtGuiFactory(); + virtual ~QtGuiFactory(); + + virtual std::shared_ptr createMainView() const; + virtual std::shared_ptr createCodeView(ViewLayout* viewLayout) const; +}; + +#endif // QT_GUI_FACTORY_H diff --git a/src/app/qt/QtWidgetWrapper.cpp b/src/app/qt/QtWidgetWrapper.cpp index eaec0dd2..fbfe0b3c 100644 --- a/src/app/qt/QtWidgetWrapper.cpp +++ b/src/app/qt/QtWidgetWrapper.cpp @@ -1,26 +1,25 @@ #include "qt/QtWidgetWrapper.h" -#include "gui/GuiElement.h" +#include "component/view/View.h" #include "utility/logging/logging.h" -std::shared_ptr QtWidgetWrapper::getWidgetOfElement(std::shared_ptr element) +QWidget* QtWidgetWrapper::getWidgetOfView(View* view) { - return getWidgetOfElement(element.get()); -} + QtWidgetWrapper* widgetWrapper = dynamic_cast(view->getWidgetWrapper()); -std::shared_ptr QtWidgetWrapper::getWidgetOfElement(GuiElement* element) -{ - std::shared_ptr widget; - std::shared_ptr qtWidgetWrapper = std::dynamic_pointer_cast(element->getWidgetWrapper()); - if (!qtWidgetWrapper || qtWidgetWrapper.use_count() == 0) + if (!widgetWrapper) { - LOG_ERROR("Trying to get the qt widget of non qt gui element."); + LOG_ERROR("Trying to get the qt widget of non qt view."); + return nullptr; } - else + + if (!widgetWrapper->getWidget()) { - widget = qtWidgetWrapper->getWidget(); + LOG_ERROR("The QtWidgetWrapper is not holdling a QWidget."); + return nullptr; } - return widget; + + return widgetWrapper->getWidget(); } QtWidgetWrapper::QtWidgetWrapper(std::shared_ptr widget) @@ -32,7 +31,7 @@ QtWidgetWrapper::~QtWidgetWrapper() { } -std::shared_ptr QtWidgetWrapper::getWidget() +QWidget* QtWidgetWrapper::getWidget() { - return m_widget; + return m_widget.get(); } diff --git a/src/app/qt/QtWidgetWrapper.h b/src/app/qt/QtWidgetWrapper.h index c9674404..a5d4d2c4 100644 --- a/src/app/qt/QtWidgetWrapper.h +++ b/src/app/qt/QtWidgetWrapper.h @@ -5,20 +5,19 @@ #include -#include "gui/WidgetWrapper.h" +#include "gui/GuiWidgetWrapper.h" -class GuiElement; +class View; -class QtWidgetWrapper: public WidgetWrapper +class QtWidgetWrapper: public GuiWidgetWrapper { public: - static std::shared_ptr getWidgetOfElement(std::shared_ptr element); - static std::shared_ptr getWidgetOfElement(GuiElement* element); + static QWidget* getWidgetOfView(View* view); QtWidgetWrapper(std::shared_ptr widget); virtual ~QtWidgetWrapper(); - std::shared_ptr getWidget(); // not const because returned widget can be changed. + QWidget* getWidget(); private: std::shared_ptr m_widget; diff --git a/src/app/qt/QtWindow.cpp b/src/app/qt/QtWindow.cpp deleted file mode 100644 index 1230a6e0..00000000 --- a/src/app/qt/QtWindow.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#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 canvas) -{ - m_window.setCentralWidget(QtWidgetWrapper::getWidgetOfElement(canvas).get()); -} diff --git a/src/app/qt/QtWindow.h b/src/app/qt/QtWindow.h deleted file mode 100644 index b11ad4e1..00000000 --- a/src/app/qt/QtWindow.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef QT_WINDOW_H -#define QT_WINDOW_H - -#include - -#include - -#include "gui/GuiWindow.h" - -class GuiCanvas; - -class QtWindow: public GuiWindow -{ -public: - QtWindow(); - ~QtWindow(); - - void setCanvas(std::shared_ptr canvas); - -private: - QMainWindow m_window; -}; - -# endif // QT_WINDOW_H diff --git a/src/app/qt/element/QtArea.cpp b/src/app/qt/element/QtArea.cpp deleted file mode 100644 index d51dd4d3..00000000 --- a/src/app/qt/element/QtArea.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "qt/element/QtArea.h" - -#include - -#include "qt/QtWidgetWrapper.h" -#include "utility/utilityQt.h" - -QtArea::QtArea() - : GuiArea(std::make_shared(std::make_shared())) -{ -} - -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 QtArea::getWidget() -{ - return QtWidgetWrapper::getWidgetOfElement(this); -} diff --git a/src/app/qt/element/QtArea.h b/src/app/qt/element/QtArea.h deleted file mode 100644 index c8d234af..00000000 --- a/src/app/qt/element/QtArea.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef QT_AREA_H -#define QT_AREA_H - -#include - -#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 getWidget(); -}; - -# endif // QT_AREA_H diff --git a/src/app/qt/element/QtCanvas.cpp b/src/app/qt/element/QtCanvas.cpp deleted file mode 100644 index 630ffa09..00000000 --- a/src/app/qt/element/QtCanvas.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "qt/element/QtCanvas.h" - -#include -#include - -#include "qt/QtWidgetWrapper.h" -#include "utility/utilityQt.h" - -QtCanvas::QtCanvas() - : GuiCanvas(std::make_shared(std::make_shared())) -{ - QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom); // gets deleted by qt - getWidget()->setLayout(layout); -} - -QtCanvas::~QtCanvas() -{ -} - -void QtCanvas::addChild(std::shared_ptr element) -{ - getWidget()->layout()->addWidget(QtWidgetWrapper::getWidgetOfElement(element).get()); -} - -void QtCanvas::removeChild(std::shared_ptr element) -{ - std::shared_ptr 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 QtCanvas::getWidget() -{ - return QtWidgetWrapper::getWidgetOfElement(this); -} - diff --git a/src/app/qt/element/QtCanvas.h b/src/app/qt/element/QtCanvas.h deleted file mode 100644 index c6a8411a..00000000 --- a/src/app/qt/element/QtCanvas.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef QT_CANVAS_H -#define QT_CANVAS_H - -#include -#include - -#include "gui/GuiCanvas.h" - -class QtCanvas: public GuiCanvas -{ -public: - QtCanvas(); - virtual ~QtCanvas(); - - virtual void addChild(std::shared_ptr element); - virtual void removeChild(std::shared_ptr 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 getWidget(); -}; - -# endif // QT_CANVAS_H diff --git a/src/app/qt/element/QtLayout.cpp b/src/app/qt/element/QtLayout.cpp deleted file mode 100644 index 9ea52754..00000000 --- a/src/app/qt/element/QtLayout.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "qt/element/QtLayout.h" - -#include -#include - -#include "qt/QtWidgetWrapper.h" -#include "utility/utilityQt.h" - -QtLayout::QtLayout() - : GuiLayout(std::make_shared(std::make_shared())) -{ - m_layout = new QBoxLayout(QBoxLayout::TopToBottom); // gets deleted by qt - getWidget()->setLayout(m_layout); -} - -QtLayout::~QtLayout() -{ -} - -void QtLayout::setDirection(LayoutDirectionType direction) -{ - switch (direction) - { - case LAYOUT_DIRECTION_HORIZONTAL: - m_layout->setDirection(QBoxLayout::LeftToRight); - case LAYOUT_DIRECTION_VERTICAL: - m_layout->setDirection(QBoxLayout::TopToBottom); - } - getWidget()->setLayout(m_layout); -} - -void QtLayout::addChild(std::shared_ptr element) -{ - m_layout->addWidget(QtWidgetWrapper::getWidgetOfElement(element).get()); -} - -void QtLayout::removeChild(std::shared_ptr element) -{ - std::shared_ptr widgetToRemove = QtWidgetWrapper::getWidgetOfElement(element); - m_layout->removeWidget(widgetToRemove.get()); - widgetToRemove->setGeometry(0, 0, 0, 0); -} - -void QtLayout::setPosition(Vec2i position) -{ -} - -Vec2i QtLayout::getPosition() const -{ - return Vec2i(); -} - -void QtLayout::setSize(Vec2i size) -{ -} - -Vec2i QtLayout::getSize() const -{ - return Vec2i(); -} - -void QtLayout::setBackgroundColor(Colori color) -{ - utility::setWidgetBackgroundColor(getWidget(), color); -} - -std::shared_ptr QtLayout::getWidget() -{ - return QtWidgetWrapper::getWidgetOfElement(this); -} diff --git a/src/app/qt/element/QtLayout.h b/src/app/qt/element/QtLayout.h deleted file mode 100644 index 9d0ea7c7..00000000 --- a/src/app/qt/element/QtLayout.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef QT_LAYOUT_H -#define QT_LAYOUT_H - -#include -#include - -#include "gui/GuiLayout.h" - -class QtLayout: public GuiLayout -{ -public: - QtLayout(); - virtual ~QtLayout(); - - virtual void setDirection(LayoutDirectionType direction); - - virtual void addChild(std::shared_ptr element); - virtual void removeChild(std::shared_ptr 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 getWidget(); - - QBoxLayout* m_layout; -}; - -# endif // QT_LAYOUT_H diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp new file mode 100644 index 00000000..d4ff4cef --- /dev/null +++ b/src/app/qt/element/QtMainWindow.cpp @@ -0,0 +1,37 @@ +#include "qt/element/QtMainWindow.h" + +#include + +#include "component/view/View.h" +#include "qt/QtWidgetWrapper.h" + +QtMainWindow::QtMainWindow() +{ + setObjectName("QtMainWindow"); + setCentralWidget(nullptr); +} + +QtMainWindow::~QtMainWindow() +{ +} + +void QtMainWindow::addView(View* view) +{ + QDockWidget* dock = new QDockWidget(tr(view->getName().c_str()), this); + dock->setWidget(QtWidgetWrapper::getWidgetOfView(view)); + addDockWidget(Qt::TopDockWidgetArea, dock); + m_dockWidgets.push_back(std::make_pair(view, dock)); +} + +void QtMainWindow::removeView(View* view) +{ + for (size_t i = 0; i < m_dockWidgets.size(); i++) + { + if (m_dockWidgets[i].first == view) + { + removeDockWidget(m_dockWidgets[i].second); + m_dockWidgets.erase(m_dockWidgets.begin() + i); + return; + } + } +} diff --git a/src/app/qt/element/QtMainWindow.h b/src/app/qt/element/QtMainWindow.h new file mode 100644 index 00000000..0034562f --- /dev/null +++ b/src/app/qt/element/QtMainWindow.h @@ -0,0 +1,27 @@ +#ifndef QT_MAIN_WINDOW_H +#define QT_MAIN_WINDOW_H + +#include +#include + +#include + +class QDockWidget; +class View; + +class QtMainWindow: public QMainWindow +{ + Q_OBJECT + +public: + QtMainWindow(); + ~QtMainWindow(); + + void addView(View* view); + void removeView(View* view); + +private: + std::vector > m_dockWidgets; +}; + +#endif // QT_MAIN_WINDOW_H diff --git a/src/app/utility/utilityQt.cpp b/src/app/qt/utility/utilityQt.cpp similarity index 74% rename from src/app/utility/utilityQt.cpp rename to src/app/qt/utility/utilityQt.cpp index db4e9363..17d1b78b 100644 --- a/src/app/utility/utilityQt.cpp +++ b/src/app/qt/utility/utilityQt.cpp @@ -2,7 +2,7 @@ namespace utility { - void setWidgetBackgroundColor(std::shared_ptr widget, const Colori& color) + void setWidgetBackgroundColor(QWidget* widget, const Colori& color) { QPalette palette = widget->palette(); palette.setColor(widget->backgroundRole(), QColor(color.r, color.g, color.b, color.a)); @@ -10,4 +10,3 @@ namespace utility widget->setAutoFillBackground(true); } } - diff --git a/src/app/utility/utilityQt.h b/src/app/qt/utility/utilityQt.h similarity index 65% rename from src/app/utility/utilityQt.h rename to src/app/qt/utility/utilityQt.h index 9b7f8101..8e915f25 100644 --- a/src/app/utility/utilityQt.h +++ b/src/app/qt/utility/utilityQt.h @@ -8,7 +8,7 @@ namespace utility { - void setWidgetBackgroundColor(std::shared_ptr widget, const Colori& color); + void setWidgetBackgroundColor(QWidget* widget, const Colori& color); } # endif // UTILITY_QT_H diff --git a/src/app/qt/view/QtCodeView.cpp b/src/app/qt/view/QtCodeView.cpp index e1660165..a4f1554e 100644 --- a/src/app/qt/view/QtCodeView.cpp +++ b/src/app/qt/view/QtCodeView.cpp @@ -2,16 +2,29 @@ #include -#include "qt/element/QtArea.h" #include "qt/QtWidgetWrapper.h" #include "qt/utility/QtHighLighter.h" +#include "qt/utility/utilityQt.h" -QtCodeView::QtCodeView(std::shared_ptr viewManager) - : CodeView(viewManager, std::make_shared()) +QtCodeView::QtCodeView(ViewLayout* viewLayout) + : CodeView(viewLayout) { - getRootElement()->setBackgroundColor(255, 125, 0, 255); +} + +QtCodeView::~QtCodeView() +{ +} + +void QtCodeView::createWidgetWrapper() +{ + setWidgetWrapper(std::make_shared(std::make_shared())); +} + +void QtCodeView::initGui() +{ + QWidget* widget = QtWidgetWrapper::getWidgetOfView(this); + utility::setWidgetBackgroundColor(widget, Colori(255, 125, 0, 255)); - std::shared_ptr widget = QtWidgetWrapper::getWidgetOfElement(getRootElement()); QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom); layout->setSpacing(3); layout->setContentsMargins(3, 3, 3, 3); @@ -22,10 +35,6 @@ QtCodeView::QtCodeView(std::shared_ptr viewManager) m_font.setPointSize(10); } -QtCodeView::~QtCodeView() -{ -} - void QtCodeView::addCodeSnippet(std::string str) { std::shared_ptr snippet = std::make_shared(); @@ -38,7 +47,7 @@ void QtCodeView::addCodeSnippet(std::string str) snippet->textField->setPlainText(QString::fromUtf8(str.c_str())); - std::shared_ptr widget = QtWidgetWrapper::getWidgetOfElement(getRootElement()); + QWidget* widget = QtWidgetWrapper::getWidgetOfView(this); widget->layout()->addWidget(snippet->textField.get()); m_snippets.push_back(snippet); diff --git a/src/app/qt/view/QtCodeView.h b/src/app/qt/view/QtCodeView.h index db09ba0c..fe8215ed 100644 --- a/src/app/qt/view/QtCodeView.h +++ b/src/app/qt/view/QtCodeView.h @@ -3,7 +3,6 @@ #include #include -#include #include @@ -11,14 +10,17 @@ class QtHighlighter; class QTextEdit; -class ViewManager; class QtCodeView: public CodeView { public: - QtCodeView(std::shared_ptr viewManager); + QtCodeView(ViewLayout* viewLayout); ~QtCodeView(); + // View implementation + virtual void createWidgetWrapper(); + virtual void initGui(); + // CodeView implementation virtual void addCodeSnippet(std::string str); virtual void clearCodeSnippets(); diff --git a/src/app/qt/view/QtMainView.cpp b/src/app/qt/view/QtMainView.cpp new file mode 100644 index 00000000..4c0c7c83 --- /dev/null +++ b/src/app/qt/view/QtMainView.cpp @@ -0,0 +1,33 @@ +#include "qt/view/QtMainView.h" + +#include "qt/element/QtMainWindow.h" +#include "utility/logging/logging.h" + +QtMainView::QtMainView() +{ + m_window = new QtMainWindow(); + m_window->show(); +} + +QtMainView::~QtMainView() +{ +} + +void QtMainView::addView(View* view) +{ + m_views.push_back(view); + m_window->addView(view); +} + +void QtMainView::removeView(View* view) +{ + std::vector::iterator it = std::find(m_views.begin(), m_views.end(), view); + if (it == m_views.end()) + { + LOG_ERROR("View was not found."); + return; + } + + m_window->removeView(view); + m_views.erase(it); +} diff --git a/src/app/qt/view/QtMainView.h b/src/app/qt/view/QtMainView.h new file mode 100644 index 00000000..d536eeeb --- /dev/null +++ b/src/app/qt/view/QtMainView.h @@ -0,0 +1,27 @@ +#ifndef QT_MAIN_VIEW_H +#define QT_MAIN_VIEW_H + +#include +#include + +#include "component/view/MainView.h" + +class QtMainWindow; +class View; + +class QtMainView: public MainView +{ +public: + QtMainView(); + virtual ~QtMainView(); + + // ViewLayout implementation + void addView(View* view); + void removeView(View* view); + +private: + QtMainWindow* m_window; + std::vector m_views; +}; + +#endif // QT_MAIN_VIEW_H diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 8a999a17..8cfba9cc 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -1,23 +1,23 @@ #include "Application.h" -#include "gui/GuiCanvas.h" +#include "component/view/MainView.h" +#include "gui/GuiFactory.h" #include "utility/logging/ConsoleLogger.h" #include "utility/logging/LogManager.h" -std::shared_ptr Application::create(std::shared_ptr guiElementFactory, std::shared_ptr window) +std::shared_ptr Application::create(GuiFactory* guiFactory) { std::shared_ptr consoleLogger = std::make_shared(); LogManager::getInstance()->addLogger(consoleLogger); - std::shared_ptr canvas = guiElementFactory->createCanvas(window); - canvas->setBackgroundColor(255, 0, 0, 255); - std::shared_ptr ptr(new Application()); - ptr->m_viewManager = std::make_shared(canvas); + ptr->m_codeAccess = std::make_shared(); ptr->m_graphAccess = std::make_shared(); + + ptr->m_mainView = guiFactory->createMainView(); ptr->m_componentManager = - ComponentManager::create(ptr->m_viewManager, guiElementFactory, ptr->m_codeAccess, ptr->m_graphAccess); + ComponentManager::create(guiFactory, ptr->m_mainView.get(), ptr->m_codeAccess, ptr->m_graphAccess); return ptr; } diff --git a/src/lib/Application.h b/src/lib/Application.h index af82c237..b3988125 100644 --- a/src/lib/Application.h +++ b/src/lib/Application.h @@ -4,16 +4,17 @@ #include #include "component/ComponentManager.h" -#include "component/view/ViewManager.h" #include "data/access/CodeAccess.h" #include "data/access/GraphAccess.h" -#include "gui/GuiElementFactory.h" #include "Project.h" +class GuiFactory; +class MainView; + class Application { public: - static std::shared_ptr create(std::shared_ptr guiElementFactory, std::shared_ptr window); + static std::shared_ptr create(GuiFactory* guiFactory); ~Application(); @@ -27,9 +28,8 @@ private: std::shared_ptr m_codeAccess; std::shared_ptr m_graphAccess; + std::shared_ptr m_mainView; std::shared_ptr m_componentManager; - std::shared_ptr m_viewManager; }; - #endif // APPLICATION_H diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index cd931d05..df182c5d 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -20,17 +20,15 @@ add_files( component/controller/CodeController.h component/controller/Controller.cpp component/controller/Controller.h - component/controller/DummyController.cpp - component/controller/DummyController.h component/view/CodeView.cpp component/view/CodeView.h - component/view/DummyView.cpp - component/view/DummyView.h + component/view/MainView.cpp + component/view/MainView.h component/view/View.cpp component/view/View.h - component/view/ViewManager.cpp - component/view/ViewManager.h + component/view/ViewLayout.cpp + component/view/ViewLayout.h component/Component.cpp component/Component.h @@ -78,27 +76,11 @@ add_files( data/Storage.cpp data/Storage.h - gui/GuiArea.cpp - gui/GuiArea.h - gui/GuiCanvas.cpp - gui/GuiCanvas.h - gui/GuiContainer.cpp - gui/GuiContainer.h - gui/GuiControl.cpp - gui/GuiControl.h - gui/GuiElement.cpp - gui/GuiElement.h - gui/GuiElementFactory.cpp - gui/GuiElementFactory.h - gui/GuiLayout.cpp - gui/GuiLayout.h - gui/GuiWindow.cpp - gui/GuiWindow.h - gui/WidgetWrapper.cpp - gui/WidgetWrapper.h + gui/GuiFactory.cpp + gui/GuiFactory.h + gui/GuiWidgetWrapper.cpp + gui/GuiWidgetWrapper.h - utility/logging/PlainFileLogger.cpp - utility/logging/PlainFileLogger.h utility/logging/ConsoleLogger.cpp utility/logging/ConsoleLogger.h utility/logging/FileLogger.cpp @@ -111,6 +93,8 @@ add_files( utility/logging/LogManagerImplementation.cpp utility/logging/LogManagerImplementation.h utility/logging/LogMessage.h + utility/logging/PlainFileLogger.cpp + utility/logging/PlainFileLogger.h utility/math/Color.h utility/math/Vector2.h diff --git a/src/lib/component/ComponentFactory.cpp b/src/lib/component/ComponentFactory.cpp index 4ca7e08b..1140b4d4 100644 --- a/src/lib/component/ComponentFactory.cpp +++ b/src/lib/component/ComponentFactory.cpp @@ -1,19 +1,19 @@ #include "component/ComponentFactory.h" #include "component/controller/CodeController.h" -#include "component/controller/DummyController.h" #include "component/view/CodeView.h" -#include "component/view/DummyView.h" +#include "component/view/ViewLayout.h" +#include "gui/GuiFactory.h" std::shared_ptr ComponentFactory::create( - std::shared_ptr viewManager, - std::shared_ptr guiElementFactory, + GuiFactory* guiFactory, + ViewLayout* viewLayout, std::shared_ptr codeAccess, std::shared_ptr graphAccess) { std::shared_ptr ptr(new ComponentFactory()); - ptr->m_viewManger = viewManager; - ptr->m_guiElementFactory = guiElementFactory; + ptr->m_guiFactory = guiFactory; + ptr->m_viewLayout = viewLayout; ptr->m_codeAccess = codeAccess; ptr->m_graphAccess = graphAccess; return ptr; @@ -23,18 +23,9 @@ ComponentFactory::~ComponentFactory() { } -std::shared_ptr ComponentFactory::createDummyComponent() -{ - std::shared_ptr view = std::make_shared(m_viewManger, m_guiElementFactory); - std::shared_ptr controller = std::make_shared(); - - std::shared_ptr component = std::make_shared(view, controller); - return component; -} - std::shared_ptr ComponentFactory::createCodeComponent() { - std::shared_ptr view = m_guiElementFactory->createCodeView(m_viewManger); + std::shared_ptr view = m_guiFactory->createCodeView(m_viewLayout); std::shared_ptr controller = std::make_shared(); std::shared_ptr component = std::make_shared(view, controller); diff --git a/src/lib/component/ComponentFactory.h b/src/lib/component/ComponentFactory.h index ba098cef..ef74b800 100644 --- a/src/lib/component/ComponentFactory.h +++ b/src/lib/component/ComponentFactory.h @@ -4,31 +4,31 @@ #include #include "component/Component.h" -#include "component/view/ViewManager.h" #include "data/access/CodeAccess.h" #include "data/access/GraphAccess.h" -#include "gui/GuiElementFactory.h" + +class GuiFactory; +class ViewLayout; class ComponentFactory { public: static std::shared_ptr create( - std::shared_ptr viewManager, - std::shared_ptr guiElementFactory, + GuiFactory* guiFactory, + ViewLayout* viewLayout, std::shared_ptr codeAccess, std::shared_ptr graphAccess); ~ComponentFactory(); - std::shared_ptr createDummyComponent(); std::shared_ptr createCodeComponent(); private: ComponentFactory(); ComponentFactory(const ComponentFactory&); - std::shared_ptr m_viewManger; - std::shared_ptr m_guiElementFactory; + GuiFactory* m_guiFactory; + ViewLayout* m_viewLayout; std::shared_ptr m_codeAccess; std::shared_ptr m_graphAccess; diff --git a/src/lib/component/ComponentManager.cpp b/src/lib/component/ComponentManager.cpp index 93bc88e7..d8e451f7 100644 --- a/src/lib/component/ComponentManager.cpp +++ b/src/lib/component/ComponentManager.cpp @@ -1,22 +1,25 @@ #include "component/ComponentManager.h" #include "component/view/CodeView.h" +#include "component/view/ViewLayout.h" std::shared_ptr ComponentManager::create( - std::shared_ptr viewManager, - std::shared_ptr guiElementFactory, + GuiFactory* guiFactory, + ViewLayout* viewLayout, std::shared_ptr codeAccess, std::shared_ptr graphAccess) { std::shared_ptr ptr(new ComponentManager()); - ptr->m_componentFactory = ComponentFactory::create(viewManager, guiElementFactory, codeAccess, graphAccess); + ptr->m_componentFactory = ComponentFactory::create(guiFactory, viewLayout, codeAccess, graphAccess); return ptr; } +ComponentManager::~ComponentManager() +{ +} + void ComponentManager::setup() { - m_components.push_back(m_componentFactory->createDummyComponent()); - std::shared_ptr codeComponent = m_componentFactory->createCodeComponent(); m_components.push_back(codeComponent); @@ -29,7 +32,3 @@ void ComponentManager::setup() ComponentManager::ComponentManager() { } - -ComponentManager::~ComponentManager() -{ -} diff --git a/src/lib/component/ComponentManager.h b/src/lib/component/ComponentManager.h index 905cc49f..7b8a945e 100644 --- a/src/lib/component/ComponentManager.h +++ b/src/lib/component/ComponentManager.h @@ -4,19 +4,20 @@ #include #include -#include "data/access/CodeAccess.h" -#include "data/access/GraphAccess.h" #include "component/Component.h" #include "component/ComponentFactory.h" -#include "component/view/ViewManager.h" -#include "gui/GuiElementFactory.h" +#include "data/access/CodeAccess.h" +#include "data/access/GraphAccess.h" + +class GuiFactory; +class ViewLayout; class ComponentManager { public: static std::shared_ptr create( - std::shared_ptr viewManager, - std::shared_ptr guiElementFactory, + GuiFactory* guiFactory, + ViewLayout* viewLayout, std::shared_ptr codeAccess, std::shared_ptr graphAccess); diff --git a/src/lib/component/controller/DummyController.cpp b/src/lib/component/controller/DummyController.cpp deleted file mode 100644 index 6435691e..00000000 --- a/src/lib/component/controller/DummyController.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "component/controller/DummyController.h" diff --git a/src/lib/component/controller/DummyController.h b/src/lib/component/controller/DummyController.h deleted file mode 100644 index e9a394ec..00000000 --- a/src/lib/component/controller/DummyController.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef DUMMY_CONTROLLER_H -#define DUMMY_CONTROLLER_H - -#include "component/controller/Controller.h" - -class DummyController: public Controller -{ -}; - - -#endif // DUMMY_CONTROLLER_H diff --git a/src/lib/component/view/CodeView.cpp b/src/lib/component/view/CodeView.cpp index 4b7f01b7..8641739f 100644 --- a/src/lib/component/view/CodeView.cpp +++ b/src/lib/component/view/CodeView.cpp @@ -1,10 +1,15 @@ #include "component/view/CodeView.h" -CodeView::CodeView(std::shared_ptr viewManager, std::shared_ptr rootElement) - : View(viewManager, rootElement, Vec2i(100, 100)) +CodeView::CodeView(ViewLayout* viewLayout) + : View(viewLayout, Vec2i(100, 100)) { } CodeView::~CodeView() { } + +std::string CodeView::getName() const +{ + return "CodeView"; +} diff --git a/src/lib/component/view/CodeView.h b/src/lib/component/view/CodeView.h index be91d3db..7d9a8105 100644 --- a/src/lib/component/view/CodeView.h +++ b/src/lib/component/view/CodeView.h @@ -1,18 +1,16 @@ #ifndef CODE_VIEW_H #define CODE_VIEW_H -#include - #include "component/view/View.h" -class GuiElementFactory; - class CodeView: public View { public: - CodeView(std::shared_ptr viewManager, std::shared_ptr rootElement); + CodeView(ViewLayout* viewLayout); virtual ~CodeView(); + virtual std::string getName() const; + virtual void addCodeSnippet(std::string str) = 0; virtual void clearCodeSnippets() = 0; }; diff --git a/src/lib/component/view/DummyView.cpp b/src/lib/component/view/DummyView.cpp deleted file mode 100644 index b231ccc7..00000000 --- a/src/lib/component/view/DummyView.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "component/view/DummyView.h" - -#include "gui/GuiArea.h" -#include "gui/GuiElementFactory.h" - -DummyView::DummyView(std::shared_ptr viewManager, std::shared_ptr guiElementFactory) - : View(viewManager, guiElementFactory->createArea(), Vec2i(100, 100)) - , m_guiElementFactory(guiElementFactory) -{ - getRootElement()->setBackgroundColor(0, 255, 0, 255); -} - -DummyView::~DummyView() -{ -} diff --git a/src/lib/component/view/DummyView.h b/src/lib/component/view/DummyView.h deleted file mode 100644 index ffaa3c5b..00000000 --- a/src/lib/component/view/DummyView.h +++ /dev/null @@ -1,19 +0,0 @@ -#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, std::shared_ptr guiElementFactory); - virtual ~DummyView(); - -private: - std::shared_ptr m_guiElementFactory; -}; - - -#endif // DUMMY_VIEW_H diff --git a/src/lib/component/view/MainView.cpp b/src/lib/component/view/MainView.cpp new file mode 100644 index 00000000..046c0401 --- /dev/null +++ b/src/lib/component/view/MainView.cpp @@ -0,0 +1,9 @@ +#include "component/view/MainView.h" + +MainView::MainView() +{ +} + +MainView::~MainView() +{ +} diff --git a/src/lib/component/view/MainView.h b/src/lib/component/view/MainView.h new file mode 100644 index 00000000..b1f90af4 --- /dev/null +++ b/src/lib/component/view/MainView.h @@ -0,0 +1,13 @@ +#ifndef MAIN_VIEW_H +#define MAIN_VIEW_H + +#include "component/view/ViewLayout.h" + +class MainView: public ViewLayout +{ +public: + MainView(); + virtual ~MainView(); +}; + +#endif // MAIN_VIEW_H diff --git a/src/lib/component/view/View.cpp b/src/lib/component/view/View.cpp index b9fdf0ae..e946e40b 100644 --- a/src/lib/component/view/View.cpp +++ b/src/lib/component/view/View.cpp @@ -1,22 +1,21 @@ #include "component/view/View.h" -#include "component/view/ViewManager.h" -View::View(std::shared_ptr viewManager, std::shared_ptr rootElement, const Vec2i& minSize) - : m_viewManager(viewManager) - , m_rootElement(rootElement) - , m_minSize(minSize) -{ - m_viewManager->addView(this); -} +#include "component/view/ViewLayout.h" +#include "gui/GuiWidgetWrapper.h" View::~View() { - m_viewManager->removeView(this); + m_viewLayout->removeView(this); } -std::shared_ptr View::getRootElement() +void View::setWidgetWrapper(std::shared_ptr widgetWrapper) { - return m_rootElement; + m_widgetWrapper = widgetWrapper; +} + +GuiWidgetWrapper* View::getWidgetWrapper() +{ + return m_widgetWrapper.get(); } int View::getMinWidth() const @@ -33,3 +32,10 @@ Vec2i View::getMinSize() const { return m_minSize; } + +View::View(ViewLayout* viewLayout, const Vec2i& minSize) + : m_viewLayout(viewLayout) + , m_widgetWrapper(nullptr) + , m_minSize(minSize) +{ +} diff --git a/src/lib/component/view/View.h b/src/lib/component/view/View.h index 539854f0..50bfa9ad 100644 --- a/src/lib/component/view/View.h +++ b/src/lib/component/view/View.h @@ -2,28 +2,54 @@ #define VIEW_H #include +#include +#include "component/view/ViewLayout.h" #include "utility/math/Vector2.h" -class GuiElement; -class ViewManager; +class GuiWidgetWrapper; +class ViewLayout; class View { public: - View(std::shared_ptr viewManager, std::shared_ptr rootElement, const Vec2i& minSize); + template + static std::shared_ptr create(ViewLayout* viewLayout); + virtual ~View(); - std::shared_ptr getRootElement(); + virtual std::string getName() const = 0; + + virtual void createWidgetWrapper() = 0; + void setWidgetWrapper(std::shared_ptr widgetWrapper); + GuiWidgetWrapper* getWidgetWrapper(); + + virtual void initGui() = 0; int getMinWidth() const; int getMinHeight() const; Vec2i getMinSize() const; +protected: + View(ViewLayout* viewLayout, const Vec2i& minSize); + private: - std::shared_ptr m_viewManager; - std::shared_ptr m_rootElement; + 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->initGui(); + + viewLayout->addView(ptr.get()); + + return ptr; +} + #endif // VIEW_H diff --git a/src/lib/component/view/ViewLayout.cpp b/src/lib/component/view/ViewLayout.cpp new file mode 100644 index 00000000..1b3c5ac9 --- /dev/null +++ b/src/lib/component/view/ViewLayout.cpp @@ -0,0 +1,9 @@ +#include "component/view/ViewLayout.h" + +ViewLayout::ViewLayout() +{ +} + +ViewLayout::~ViewLayout() +{ +} diff --git a/src/lib/component/view/ViewLayout.h b/src/lib/component/view/ViewLayout.h new file mode 100644 index 00000000..10a4d459 --- /dev/null +++ b/src/lib/component/view/ViewLayout.h @@ -0,0 +1,16 @@ +#ifndef VIEW_LAYOUT_H +#define VIEW_LAYOUT_H + +class View; + +class ViewLayout +{ +public: + ViewLayout(); + virtual ~ViewLayout(); + + virtual void addView(View* view) = 0; + virtual void removeView(View* view) = 0; +}; + +#endif // VIEW_LAYOUT_H diff --git a/src/lib/component/view/ViewManager.cpp b/src/lib/component/view/ViewManager.cpp deleted file mode 100644 index e95f40bf..00000000 --- a/src/lib/component/view/ViewManager.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "component/view/ViewManager.h" - -#include - -#include "gui/GuiCanvas.h" -#include "View.h" - -ViewManager::ViewManager(std::shared_ptr 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::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); - } -} diff --git a/src/lib/component/view/ViewManager.h b/src/lib/component/view/ViewManager.h deleted file mode 100644 index 3116bb6f..00000000 --- a/src/lib/component/view/ViewManager.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef VIEW_MANAGER_H -#define VIEW_MANAGER_H - -#include -#include - -class GuiCanvas; -class View; - -class ViewManager -{ -public: - ViewManager(std::shared_ptr canvas); - ~ViewManager(); - - void addView(View* view); - void removeView(View* view); - -private: - std::shared_ptr m_canvas; - std::vector m_views; -}; - - -#endif // VIEW_MANAGER_H diff --git a/src/lib/gui/GuiArea.cpp b/src/lib/gui/GuiArea.cpp deleted file mode 100644 index 1bf246f9..00000000 --- a/src/lib/gui/GuiArea.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gui/GuiArea.h" - -GuiArea::GuiArea(std::shared_ptr widgetWrapper) - : GuiControl(widgetWrapper) -{ -} - -GuiArea::~GuiArea() -{ -} diff --git a/src/lib/gui/GuiArea.h b/src/lib/gui/GuiArea.h deleted file mode 100644 index 2369501c..00000000 --- a/src/lib/gui/GuiArea.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GUI_AREA_H -#define GUI_AREA_H - -#include "gui/GuiControl.h" - -class GuiArea: public GuiControl -{ -public: - GuiArea(std::shared_ptr widgetWrapper); - virtual ~GuiArea(); - -}; - -#endif // GUI_AREA_H diff --git a/src/lib/gui/GuiCanvas.cpp b/src/lib/gui/GuiCanvas.cpp deleted file mode 100644 index 11b92e6d..00000000 --- a/src/lib/gui/GuiCanvas.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gui/GuiCanvas.h" - -GuiCanvas::GuiCanvas(std::shared_ptr widgetWrapper) - : GuiContainer(widgetWrapper) -{ -} - -GuiCanvas::~GuiCanvas() -{ -} diff --git a/src/lib/gui/GuiCanvas.h b/src/lib/gui/GuiCanvas.h deleted file mode 100644 index 3d2326c6..00000000 --- a/src/lib/gui/GuiCanvas.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef GUI_CANVAS_H -#define GUI_CANVAS_H - -#include "gui/GuiContainer.h" - -class GuiCanvas: public GuiContainer -{ -public: - GuiCanvas(std::shared_ptr widgetWrapper); - virtual ~GuiCanvas(); -}; - -#endif // GUI_CANVAS_H diff --git a/src/lib/gui/GuiContainer.cpp b/src/lib/gui/GuiContainer.cpp deleted file mode 100644 index 27e06e3a..00000000 --- a/src/lib/gui/GuiContainer.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gui/GuiContainer.h" - -GuiContainer::GuiContainer(std::shared_ptr widgetWrapper) - : GuiElement(widgetWrapper) -{ -} - -GuiContainer::~GuiContainer() -{ -} diff --git a/src/lib/gui/GuiContainer.h b/src/lib/gui/GuiContainer.h deleted file mode 100644 index 2fe50ce2..00000000 --- a/src/lib/gui/GuiContainer.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef GUI_CONTAINER_H -#define GUI_CONTAINER_H - -#include - -#include "gui/GuiElement.h" - -class GuiContainer: public GuiElement -{ -public: - GuiContainer(std::shared_ptr widgetWrapper); - virtual ~GuiContainer(); - - virtual void addChild(std::shared_ptr element) = 0; - virtual void removeChild(std::shared_ptr element) = 0; - -}; - -#endif // GUI_CONTAINER_H diff --git a/src/lib/gui/GuiControl.cpp b/src/lib/gui/GuiControl.cpp deleted file mode 100644 index 919c5437..00000000 --- a/src/lib/gui/GuiControl.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gui/GuiControl.h" - -GuiControl::GuiControl(std::shared_ptr widgetWrapper) - : GuiElement(widgetWrapper) -{ -} - -GuiControl::~GuiControl() -{ -} diff --git a/src/lib/gui/GuiControl.h b/src/lib/gui/GuiControl.h deleted file mode 100644 index 7b9a9ed1..00000000 --- a/src/lib/gui/GuiControl.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GUI_CONTROL_H -#define GUI_CONTROL_H - -#include "gui/GuiElement.h" - -class GuiControl: public GuiElement -{ -public: - GuiControl(std::shared_ptr widgetWrapper); - virtual ~GuiControl(); - -}; - -#endif // GUI_CONTROL_H diff --git a/src/lib/gui/GuiElement.cpp b/src/lib/gui/GuiElement.cpp deleted file mode 100644 index 40af9ee1..00000000 --- a/src/lib/gui/GuiElement.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "gui/GuiElement.h" - -#include "gui/WidgetWrapper.h" - -GuiElement::GuiElement(std::shared_ptr widgetWrapper) - : m_widgetWrapper(widgetWrapper) -{ -} - -GuiElement::~GuiElement() -{ -} - -void GuiElement::setBackgroundColor(int r, int g, int b, int a) -{ - setBackgroundColor(Colori(r, g, b, a)); -} - -std::shared_ptr GuiElement::getWidgetWrapper() -{ - return m_widgetWrapper; -} diff --git a/src/lib/gui/GuiElement.h b/src/lib/gui/GuiElement.h deleted file mode 100644 index 7a63a3de..00000000 --- a/src/lib/gui/GuiElement.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef GUI_ELEMENT_H -#define GUI_ELEMENT_H - -#include - -#include "utility/math/Color.h" -#include "utility/math/Vector2.h" - -class WidgetWrapper; - -class GuiElement -{ -public: - GuiElement(std::shared_ptr widgetWrapper); - virtual ~GuiElement(); - - virtual void setPosition(Vec2i position) = 0; - virtual Vec2i getPosition() const = 0; - virtual void setSize(Vec2i size) = 0; - virtual Vec2i getSize() const = 0; - - virtual void setBackgroundColor(Colori color) = 0; - void setBackgroundColor(int r, int g, int b, int a); - -//protected: - std::shared_ptr getWidgetWrapper(); - -private: - std::shared_ptr m_widgetWrapper; -}; - -#endif // GUI_ELEMENT_H diff --git a/src/lib/gui/GuiElementFactory.cpp b/src/lib/gui/GuiElementFactory.cpp deleted file mode 100644 index 7aa087fc..00000000 --- a/src/lib/gui/GuiElementFactory.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "gui/GuiElementFactory.h" - -GuiElementFactory::~GuiElementFactory() -{ -} diff --git a/src/lib/gui/GuiElementFactory.h b/src/lib/gui/GuiElementFactory.h deleted file mode 100644 index cf41731c..00000000 --- a/src/lib/gui/GuiElementFactory.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef GUI_ELEMENT_FACTORY_H -#define GUI_ELEMENT_FACTORY_H - -#include - -class CodeView; - -class GuiArea; -class GuiCanvas; -class GuiLayout; -class GuiWindow; - -class ViewManager; - -class GuiElementFactory -{ -public: - virtual ~GuiElementFactory(); - - virtual std::shared_ptr createArea() const = 0; - virtual std::shared_ptr createCanvas(std::shared_ptr window) const = 0; - virtual std::shared_ptr createLayout() const = 0; - - virtual std::shared_ptr createCodeView(std::shared_ptr viewManager) const = 0; -}; - -#endif // GUI_ELEMENT_FACTORY_H diff --git a/src/lib/gui/GuiFactory.cpp b/src/lib/gui/GuiFactory.cpp new file mode 100644 index 00000000..dd09abf6 --- /dev/null +++ b/src/lib/gui/GuiFactory.cpp @@ -0,0 +1,9 @@ +#include "gui/GuiFactory.h" + +GuiFactory::GuiFactory() +{ +} + +GuiFactory::~GuiFactory() +{ +} diff --git a/src/lib/gui/GuiFactory.h b/src/lib/gui/GuiFactory.h new file mode 100644 index 00000000..f0b35c93 --- /dev/null +++ b/src/lib/gui/GuiFactory.h @@ -0,0 +1,20 @@ +#ifndef GUI_FACTORY_H +#define GUI_FACTORY_H + +#include + +class CodeView; +class MainView; +class ViewLayout; + +class GuiFactory +{ +public: + GuiFactory(); + virtual ~GuiFactory(); + + virtual std::shared_ptr createMainView() const = 0; + virtual std::shared_ptr createCodeView(ViewLayout* viewLayout) const = 0; +}; + +#endif // GUI_FACTORY_H diff --git a/src/lib/gui/GuiLayout.cpp b/src/lib/gui/GuiLayout.cpp deleted file mode 100644 index 7682ecad..00000000 --- a/src/lib/gui/GuiLayout.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include "gui/GuiLayout.h" - -GuiLayout::GuiLayout(std::shared_ptr widgetWrapper) - : GuiContainer(widgetWrapper) -{ -} - -GuiLayout::~GuiLayout() -{ -} diff --git a/src/lib/gui/GuiLayout.h b/src/lib/gui/GuiLayout.h deleted file mode 100644 index 5aaf609a..00000000 --- a/src/lib/gui/GuiLayout.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef GUI_LAYOUT_H -#define GUI_LAYOUT_H - -#include "gui/GuiContainer.h" - -class GuiLayout: public GuiContainer -{ -public: - enum LayoutDirectionType - { - LAYOUT_DIRECTION_HORIZONTAL, - LAYOUT_DIRECTION_VERTICAL - }; - - GuiLayout(std::shared_ptr widgetWrapper); - virtual ~GuiLayout(); - - virtual void setDirection(LayoutDirectionType direction) = 0; - - virtual void addChild(std::shared_ptr element) = 0; - virtual void removeChild(std::shared_ptr element) = 0; -}; - -#endif // GUI_LAYOUT_H diff --git a/src/lib/gui/GuiWidgetWrapper.cpp b/src/lib/gui/GuiWidgetWrapper.cpp new file mode 100644 index 00000000..78fe6f4f --- /dev/null +++ b/src/lib/gui/GuiWidgetWrapper.cpp @@ -0,0 +1,9 @@ +#include "gui/GuiWidgetWrapper.h" + +GuiWidgetWrapper::GuiWidgetWrapper() +{ +} + +GuiWidgetWrapper::~GuiWidgetWrapper() +{ +} diff --git a/src/lib/gui/GuiWidgetWrapper.h b/src/lib/gui/GuiWidgetWrapper.h new file mode 100644 index 00000000..4686aa3a --- /dev/null +++ b/src/lib/gui/GuiWidgetWrapper.h @@ -0,0 +1,11 @@ +#ifndef GUI_WIDGET_WRAPPER_H +#define GUI_WIDGET_WRAPPER_H + +class GuiWidgetWrapper +{ +public: + GuiWidgetWrapper(); + virtual ~GuiWidgetWrapper(); +}; + +#endif // GUI_WIDGET_WRAPPER_H diff --git a/src/lib/gui/GuiWindow.cpp b/src/lib/gui/GuiWindow.cpp deleted file mode 100644 index 3d5d85a4..00000000 --- a/src/lib/gui/GuiWindow.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "gui/GuiWindow.h" - -#include "gui/GuiCanvas.h" - -GuiWindow::GuiWindow() -{ -} - -GuiWindow::~GuiWindow() -{ -} diff --git a/src/lib/gui/GuiWindow.h b/src/lib/gui/GuiWindow.h deleted file mode 100644 index 8148f31b..00000000 --- a/src/lib/gui/GuiWindow.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GUI_WINDOW_H -#define GUI_WINDOW_H - -#include - -class GuiCanvas; - -class GuiWindow -{ -public: - GuiWindow(); - virtual ~GuiWindow(); - - virtual void setCanvas(std::shared_ptr canvas) = 0; -}; - -#endif // GUI_WINDOW_H diff --git a/src/lib/gui/WidgetWrapper.cpp b/src/lib/gui/WidgetWrapper.cpp deleted file mode 100644 index c54d4cc0..00000000 --- a/src/lib/gui/WidgetWrapper.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "gui/WidgetWrapper.h" - -WidgetWrapper::WidgetWrapper() -{ -} - -WidgetWrapper::~WidgetWrapper() -{ -} diff --git a/src/lib/gui/WidgetWrapper.h b/src/lib/gui/WidgetWrapper.h deleted file mode 100644 index 4dbc0f8b..00000000 --- a/src/lib/gui/WidgetWrapper.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef WIDGET_WRAPPER_H -#define WIDGET_WRAPPER_H - -class WidgetWrapper -{ -public: - WidgetWrapper(); - virtual ~WidgetWrapper(); -}; - -#endif // WIDGET_WRAPPER_H