diff --git a/bin/app/data/gui/refresh_view/refresh_view.css b/bin/app/data/gui/refresh_view/refresh_view.css index 8c649a0d..92b91c02 100644 --- a/bin/app/data/gui/refresh_view/refresh_view.css +++ b/bin/app/data/gui/refresh_view/refresh_view.css @@ -14,13 +14,17 @@ QPushButton:hover, QPushButton:checked { background: #B2B2B2; } -QPushButton#refresh_button { +QPushButton:pressed { + background: #626262; +} + +#refresh_button { border-bottom-left-radius: 12px; border-top-left-radius: 12px; margin-right: 2px; } -QPushButton#auto_refresh_button { +#auto_refresh_button { border-bottom-right-radius: 12px; border-top-right-radius: 12px; } diff --git a/bin/app/data/gui/search_view/search_view.css b/bin/app/data/gui/search_view/search_view.css index 6cdbbf92..e0fa4f14 100644 --- a/bin/app/data/gui/search_view/search_view.css +++ b/bin/app/data/gui/search_view/search_view.css @@ -49,6 +49,10 @@ QPushButton#search_button { background: #B2B2B2; } +#search_button:pressed { + background: #626262; +} + /*QPushButton#case_sensitive_button { border: none; border-image: url(data/gui/search_view/images/button_case_sensitive_inactive.png); diff --git a/bin/app/data/gui/undoredo_view/undoredo_view.css b/bin/app/data/gui/undoredo_view/undoredo_view.css index a5fc2ddf..6d853e58 100644 --- a/bin/app/data/gui/undoredo_view/undoredo_view.css +++ b/bin/app/data/gui/undoredo_view/undoredo_view.css @@ -13,6 +13,7 @@ QPushButton { #undo_button { border-bottom-left-radius: 12px; border-top-left-radius: 12px; + margin-right: 2px; } #redo_button { @@ -20,18 +21,15 @@ QPushButton { border-top-right-radius: 12px; } -#undo_button:disabled, -#redo_button:disabled { +QPushButton:disabled { background: #F4F4F4; } -#undo_button:hover, -#redo_button:hover { +QPushButton:hover { background: #B2B2B2; } -#undo_button:pressed, -#redo_button:pressed { +QPushButton:pressed { background: #626262; } diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 2574d379..93b88d55 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -54,6 +54,8 @@ add_files( qt/view/QtCodeView.cpp qt/view/QtCodeView.h + qt/view/QtCompositeView.cpp + qt/view/QtCompositeView.h qt/view/QtGraphView.cpp qt/view/QtGraphView.h qt/view/QtMainView.cpp diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp index 36548920..619ba398 100644 --- a/src/app/qt/element/QtMainWindow.cpp +++ b/src/app/qt/element/QtMainWindow.cpp @@ -8,6 +8,7 @@ #include #include "component/view/View.h" +#include "component/view/CompositeView.h" #include "qt/view/QtViewWidgetWrapper.h" #include "utility/logging/logging.h" #include "utility/messaging/type/MessageFind.h" @@ -270,7 +271,18 @@ QDockWidget* QtMainWindow::getDockWidgetForView(View* view) const { for (size_t i = 0; i < m_dockWidgets.size(); i++) { - if (m_dockWidgets[i].first == view) + CompositeView* compositeView = dynamic_cast(m_dockWidgets[i].first); + if (compositeView) + { + for (View* v : compositeView->getViews()) + { + if (v == view) + { + return m_dockWidgets[i].second; + } + } + } + else if (m_dockWidgets[i].first == view) { return m_dockWidgets[i].second; } diff --git a/src/app/qt/element/QtMainWindow.h b/src/app/qt/element/QtMainWindow.h index bdf2099a..c5ea0c64 100644 --- a/src/app/qt/element/QtMainWindow.h +++ b/src/app/qt/element/QtMainWindow.h @@ -50,7 +50,7 @@ private: QDockWidget* getDockWidgetForView(View* view) const; - std::vector > m_dockWidgets; + std::vector> m_dockWidgets; }; #endif // QT_MAIN_WINDOW_H diff --git a/src/app/qt/element/QtRefreshBar.cpp b/src/app/qt/element/QtRefreshBar.cpp index 7c3b86e1..229cca41 100644 --- a/src/app/qt/element/QtRefreshBar.cpp +++ b/src/app/qt/element/QtRefreshBar.cpp @@ -12,6 +12,7 @@ QtRefreshBar::QtRefreshBar() QBoxLayout* layout = new QHBoxLayout(); layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); layout->setAlignment(Qt::AlignTop); setLayout(layout); @@ -20,7 +21,6 @@ QtRefreshBar::QtRefreshBar() m_refreshButton->setToolTip("refresh"); m_refreshButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_refreshButton->setIcon(QIcon("data/gui/refresh_view/images/refresh.png")); - m_refreshButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); layout->addWidget(m_refreshButton); m_autoRefreshButton = new QPushButton(this); @@ -29,7 +29,6 @@ QtRefreshBar::QtRefreshBar() m_autoRefreshButton->setToolTip("automatic refresh on window focus"); m_autoRefreshButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_autoRefreshButton->setIcon(QIcon("data/gui/refresh_view/images/auto_refresh.png")); - m_autoRefreshButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); layout->addWidget(m_autoRefreshButton); connect(m_refreshButton, SIGNAL(clicked()), this, SLOT(refreshClicked())); @@ -40,11 +39,6 @@ QtRefreshBar::~QtRefreshBar() { } -QSize QtRefreshBar::sizeHint() const -{ - return QSize(150, 100); -} - void QtRefreshBar::refreshClicked() { MessageRefresh().dispatch(); diff --git a/src/app/qt/element/QtRefreshBar.h b/src/app/qt/element/QtRefreshBar.h index 2fb37c21..e0b2c17c 100644 --- a/src/app/qt/element/QtRefreshBar.h +++ b/src/app/qt/element/QtRefreshBar.h @@ -14,8 +14,6 @@ public: QtRefreshBar(); virtual ~QtRefreshBar(); - virtual QSize sizeHint() const; - private slots: void refreshClicked(); void autoRefreshClicked(); diff --git a/src/app/qt/element/QtSearchBar.cpp b/src/app/qt/element/QtSearchBar.cpp index dc702ad6..accb27d1 100644 --- a/src/app/qt/element/QtSearchBar.cpp +++ b/src/app/qt/element/QtSearchBar.cpp @@ -12,6 +12,7 @@ QtSearchBar::QtSearchBar() QBoxLayout* layout = new QHBoxLayout(); layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); layout->setAlignment(Qt::AlignTop); setLayout(layout); @@ -29,6 +30,7 @@ QtSearchBar::QtSearchBar() m_searchBox->setObjectName("search_box"); m_searchBox->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac m_searchBox->setAttribute(Qt::WA_MacShowFocusRect, 0); // remove blue focus box on Mac + m_searchBox->setMinimumWidth(100); m_searchBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); innerLayout->addWidget(m_searchBox); diff --git a/src/app/qt/element/QtUndoRedo.cpp b/src/app/qt/element/QtUndoRedo.cpp index 32b714a0..6e6b3700 100644 --- a/src/app/qt/element/QtUndoRedo.cpp +++ b/src/app/qt/element/QtUndoRedo.cpp @@ -25,12 +25,11 @@ QtUndoRedo::QtUndoRedo() QBoxLayout* layout = new QHBoxLayout(); layout->setSpacing(0); + layout->setContentsMargins(0, 0, 0, 0); layout->setAlignment(Qt::AlignTop); setLayout(layout); layout->addWidget(m_undoButton); - layout->addSpacing(2); layout->addWidget(m_redoButton); - layout->addStretch(); connect(m_undoButton, SIGNAL(clicked()), this, SLOT(undo())); connect(m_redoButton, SIGNAL(clicked()), this, SLOT(redo())); diff --git a/src/app/qt/view/QtCodeView.cpp b/src/app/qt/view/QtCodeView.cpp index ba19ee88..b9d9bbf4 100644 --- a/src/app/qt/view/QtCodeView.cpp +++ b/src/app/qt/view/QtCodeView.cpp @@ -13,7 +13,8 @@ QtCodeView::QtCodeView(ViewLayout* viewLayout) , m_showCodeSnippetsFunctor(std::bind(&QtCodeView::doShowCodeSnippets, this, std::placeholders::_1)) , m_showCodeFileFunctor(std::bind(&QtCodeView::doShowCodeFile, this, std::placeholders::_1)) { - m_widget = createQtCodeFileList(); + m_widget = new QtCodeFileList(); + setStyleSheet(m_widget); } QtCodeView::~QtCodeView() @@ -56,7 +57,7 @@ void QtCodeView::showCodeFile(const CodeSnippetParams& params) void QtCodeView::doRefreshView() { - setStyleSheet(m_widget.get()); + setStyleSheet(m_widget); clearClosedWindows(); for (std::shared_ptr window: m_windows) diff --git a/src/app/qt/view/QtCodeView.h b/src/app/qt/view/QtCodeView.h index 5f9ce3dd..2c93b552 100644 --- a/src/app/qt/view/QtCodeView.h +++ b/src/app/qt/view/QtCodeView.h @@ -44,7 +44,7 @@ private: QtThreadedFunctor&> m_showCodeSnippetsFunctor; QtThreadedFunctor m_showCodeFileFunctor; - std::shared_ptr m_widget; + QtCodeFileList* m_widget; std::vector> m_windows; std::vector m_activeTokenIds; diff --git a/src/app/qt/view/QtCompositeView.cpp b/src/app/qt/view/QtCompositeView.cpp new file mode 100644 index 00000000..51444f97 --- /dev/null +++ b/src/app/qt/view/QtCompositeView.cpp @@ -0,0 +1,52 @@ +#include "qt/view/QtCompositeView.h" + +#include + +#include "qt/utility/utilityQt.h" +#include "qt/view/QtViewWidgetWrapper.h" + +QtCompositeView::QtCompositeView(ViewLayout* viewLayout, CompositeDirection direction) + : CompositeView(viewLayout, direction) +{ + QBoxLayout* layout; + if (getDirection() == CompositeView::DIRECTION_HORIZONTAL) + { + layout = new QHBoxLayout(); + } + else + { + layout = new QVBoxLayout(); + } + + layout->setSpacing(5); + layout->setContentsMargins(5, 5, 5, 5); + layout->setAlignment(Qt::AlignTop); + + m_widget = new QWidget(); + m_widget->setLayout(layout); + utility::setWidgetBackgroundColor(m_widget, Colori(255, 255, 255, 255)); +} + +QtCompositeView::~QtCompositeView() +{ +} + +void QtCompositeView::createWidgetWrapper() +{ + setWidgetWrapper(std::make_shared(m_widget)); +} + +void QtCompositeView::initView() +{ + +} + +void QtCompositeView::refreshView() +{ + +} + +void QtCompositeView::addViewWidget(View* view) +{ + m_widget->layout()->addWidget(QtViewWidgetWrapper::getWidgetOfView(view)); +} diff --git a/src/app/qt/view/QtCompositeView.h b/src/app/qt/view/QtCompositeView.h new file mode 100644 index 00000000..6dc764c6 --- /dev/null +++ b/src/app/qt/view/QtCompositeView.h @@ -0,0 +1,27 @@ +#ifndef QT_COMPOSITE_VIEW +#define QT_COMPOSITE_VIEW + +#include + +#include "component/view/CompositeView.h" + +class QtCompositeView + : public CompositeView +{ +public: + QtCompositeView(ViewLayout* viewLayout, CompositeDirection direction); + ~QtCompositeView(); + + // View implementation + virtual void createWidgetWrapper(); + virtual void initView(); + virtual void refreshView(); + + // CompositeView implementation + virtual void addViewWidget(View* view); + +private: + QWidget* m_widget; +}; + +#endif // QT_COMPOSITE_VIEW diff --git a/src/app/qt/view/QtGraphView.cpp b/src/app/qt/view/QtGraphView.cpp index fe9e0af2..81d4b207 100644 --- a/src/app/qt/view/QtGraphView.cpp +++ b/src/app/qt/view/QtGraphView.cpp @@ -29,7 +29,7 @@ QtGraphView::~QtGraphView() void QtGraphView::createWidgetWrapper() { - setWidgetWrapper(std::make_shared(std::make_shared())); + setWidgetWrapper(std::make_shared(new QFrame())); } void QtGraphView::initView() diff --git a/src/app/qt/view/QtRefreshView.cpp b/src/app/qt/view/QtRefreshView.cpp index 5594fbe8..abbd803b 100644 --- a/src/app/qt/view/QtRefreshView.cpp +++ b/src/app/qt/view/QtRefreshView.cpp @@ -8,7 +8,7 @@ QtRefreshView::QtRefreshView(ViewLayout* viewLayout) : RefreshView(viewLayout) , m_refreshViewFunctor(std::bind(&QtRefreshView::doRefreshView, this)) { - m_widget = std::make_shared(); + m_widget = new QtRefreshBar(); setStyleSheet(); } diff --git a/src/app/qt/view/QtRefreshView.h b/src/app/qt/view/QtRefreshView.h index 16811347..597e3692 100644 --- a/src/app/qt/view/QtRefreshView.h +++ b/src/app/qt/view/QtRefreshView.h @@ -28,7 +28,7 @@ private: QtThreadedFunctor<> m_refreshViewFunctor; - std::shared_ptr m_widget; + QtRefreshBar* m_widget; }; # endif // QT_REFRESH_VIEW_H diff --git a/src/app/qt/view/QtSearchView.cpp b/src/app/qt/view/QtSearchView.cpp index dc545f01..bbde5c8e 100644 --- a/src/app/qt/view/QtSearchView.cpp +++ b/src/app/qt/view/QtSearchView.cpp @@ -11,7 +11,7 @@ QtSearchView::QtSearchView(ViewLayout* viewLayout) , m_setFocusFunctor(std::bind(&QtSearchView::doSetFocus, this)) , m_setAutocompletionListFunctor(std::bind(&QtSearchView::doSetAutocompletionList, this, std::placeholders::_1)) { - m_widget = std::make_shared(); + m_widget = new QtSearchBar(); setStyleSheet(); } diff --git a/src/app/qt/view/QtSearchView.h b/src/app/qt/view/QtSearchView.h index 1bac8359..01f639f4 100644 --- a/src/app/qt/view/QtSearchView.h +++ b/src/app/qt/view/QtSearchView.h @@ -36,7 +36,7 @@ private: QtThreadedFunctor<> m_setFocusFunctor; QtThreadedFunctor&> m_setAutocompletionListFunctor; - std::shared_ptr m_widget; + QtSearchBar* m_widget; }; # endif // QT_SEARCH_VIEW_H diff --git a/src/app/qt/view/QtUndoRedoView.cpp b/src/app/qt/view/QtUndoRedoView.cpp index e123bdff..14ce118c 100644 --- a/src/app/qt/view/QtUndoRedoView.cpp +++ b/src/app/qt/view/QtUndoRedoView.cpp @@ -9,7 +9,7 @@ QtUndoRedoView::QtUndoRedoView(ViewLayout* viewLayout) , m_setRedoButtonEnabledFunctor(std::bind(&QtUndoRedoView::doSetRedoButtonEnabled, this, std::placeholders::_1)) , m_setUndoButtonEnabledFunctor(std::bind(&QtUndoRedoView::doSetUndoButtonEnabled, this, std::placeholders::_1)) { - m_widget = std::make_shared(); + m_widget = new QtUndoRedo(); setStyleSheet(); } diff --git a/src/app/qt/view/QtUndoRedoView.h b/src/app/qt/view/QtUndoRedoView.h index 101cbb17..62889320 100644 --- a/src/app/qt/view/QtUndoRedoView.h +++ b/src/app/qt/view/QtUndoRedoView.h @@ -31,7 +31,7 @@ private: QtThreadedFunctor m_setUndoButtonEnabledFunctor; void setStyleSheet(); - std::shared_ptr m_widget; + QtUndoRedo* m_widget; }; #endif // !QT_UNDO_REDO_VIEW_H diff --git a/src/app/qt/view/QtViewFactory.cpp b/src/app/qt/view/QtViewFactory.cpp index 42413763..81cb8735 100644 --- a/src/app/qt/view/QtViewFactory.cpp +++ b/src/app/qt/view/QtViewFactory.cpp @@ -1,6 +1,7 @@ #include "qt/view/QtViewFactory.h" #include "qt/view/QtCodeView.h" +#include "qt/view/QtCompositeView.h" #include "qt/view/QtGraphView.h" #include "qt/view/QtMainView.h" #include "qt/view/QtRefreshView.h" @@ -21,32 +22,41 @@ std::shared_ptr QtViewFactory::createMainView() const return std::make_shared(); } +std::shared_ptr QtViewFactory::createCompositeView( + ViewLayout* viewLayout, CompositeView::CompositeDirection direction +) const { + std::shared_ptr ptr = std::make_shared(viewLayout, direction); + ptr->init(); + ptr->addToLayout(); + return ptr; +} + std::shared_ptr QtViewFactory::createCodeView(ViewLayout* viewLayout) const { - return View::create(viewLayout); + return View::createInitAndAddToLayout(viewLayout); } std::shared_ptr QtViewFactory::createGraphView(ViewLayout* viewLayout) const { - return View::create(viewLayout); + return View::createInitAndAddToLayout(viewLayout); } std::shared_ptr QtViewFactory::createRefreshView(ViewLayout* viewLayout) const { - return View::create(viewLayout); + return View::createInitAndAddToLayout(viewLayout); } std::shared_ptr QtViewFactory::createSearchView(ViewLayout* viewLayout) const { - return View::create(viewLayout); + return View::createInitAndAddToLayout(viewLayout); } std::shared_ptr QtViewFactory::createStatusBarView(ViewLayout* viewLayout) const { - return View::createAndDontAddToLayout(viewLayout); + return View::createAndInit(viewLayout); } std::shared_ptr QtViewFactory::createUndoRedoView(ViewLayout* viewLayout) const { - return View::create(viewLayout); + return View::createInitAndAddToLayout(viewLayout); } diff --git a/src/app/qt/view/QtViewFactory.h b/src/app/qt/view/QtViewFactory.h index 62ca74f0..9fd83001 100644 --- a/src/app/qt/view/QtViewFactory.h +++ b/src/app/qt/view/QtViewFactory.h @@ -10,6 +10,9 @@ public: virtual ~QtViewFactory(); virtual std::shared_ptr createMainView() const; + virtual std::shared_ptr createCompositeView( + ViewLayout* viewLayout, CompositeView::CompositeDirection direction) const; + virtual std::shared_ptr createCodeView(ViewLayout* viewLayout) const; virtual std::shared_ptr createGraphView(ViewLayout* viewLayout) const; virtual std::shared_ptr createRefreshView(ViewLayout* viewLayout) const; diff --git a/src/app/qt/view/QtViewWidgetWrapper.cpp b/src/app/qt/view/QtViewWidgetWrapper.cpp index 4c66e1ac..baf6c4ff 100644 --- a/src/app/qt/view/QtViewWidgetWrapper.cpp +++ b/src/app/qt/view/QtViewWidgetWrapper.cpp @@ -22,7 +22,7 @@ QWidget* QtViewWidgetWrapper::getWidgetOfView(const View* view) return widgetWrapper->getWidget(); } -QtViewWidgetWrapper::QtViewWidgetWrapper(std::shared_ptr widget) +QtViewWidgetWrapper::QtViewWidgetWrapper(QWidget* widget) : m_widget(widget) { } @@ -33,5 +33,5 @@ QtViewWidgetWrapper::~QtViewWidgetWrapper() QWidget* QtViewWidgetWrapper::getWidget() { - return m_widget.get(); + return m_widget; } diff --git a/src/app/qt/view/QtViewWidgetWrapper.h b/src/app/qt/view/QtViewWidgetWrapper.h index 9d52a36f..1935c0e1 100644 --- a/src/app/qt/view/QtViewWidgetWrapper.h +++ b/src/app/qt/view/QtViewWidgetWrapper.h @@ -1,8 +1,6 @@ #ifndef QT_VIEW_WIDGET_WRAPPER_H #define QT_VIEW_WIDGET_WRAPPER_H -#include - #include #include "component/view/ViewWidgetWrapper.h" @@ -14,13 +12,13 @@ class QtViewWidgetWrapper: public ViewWidgetWrapper public: static QWidget* getWidgetOfView(const View* view); - QtViewWidgetWrapper(std::shared_ptr widget); + QtViewWidgetWrapper(QWidget* widget); virtual ~QtViewWidgetWrapper(); QWidget* getWidget(); private: - std::shared_ptr m_widget; + QWidget* m_widget; }; #endif // QT_VIEW_WIDGET_WRAPPER_H diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index 759b0980..c6772979 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -18,11 +18,11 @@ std::shared_ptr Application::create(ViewFactory* viewFactory) ptr->m_graphAccessProxy = std::make_shared(); ptr->m_locationAccessProxy = std::make_shared(); - ptr->m_mainView = viewFactory->createMainView(); ptr->m_componentManager = ComponentManager::create( - viewFactory, ptr->m_mainView.get(), ptr->m_graphAccessProxy.get(), ptr->m_locationAccessProxy.get()); + viewFactory, ptr->m_graphAccessProxy.get(), ptr->m_locationAccessProxy.get()); - ptr->m_componentManager->setup(); + ptr->m_mainView = viewFactory->createMainView(); + ptr->m_componentManager->setup(ptr->m_mainView.get()); ptr->m_mainView->loadLayout(); MessageLoadProject("data/ProjectSettings.xml").dispatch(); diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 7fadc607..ee215dd8 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -48,6 +48,8 @@ add_files( component/view/CodeView.cpp component/view/CodeView.h + component/view/CompositeView.cpp + component/view/CompositeView.h component/view/GraphView.cpp component/view/GraphView.h component/view/MainView.cpp diff --git a/src/lib/component/Component.h b/src/lib/component/Component.h index 2c3037fa..c6d6c5fa 100644 --- a/src/lib/component/Component.h +++ b/src/lib/component/Component.h @@ -36,5 +36,4 @@ ViewType* Component::getView() const return dynamic_cast(m_view.get()); } - #endif // COMPONENT_H diff --git a/src/lib/component/ComponentFactory.cpp b/src/lib/component/ComponentFactory.cpp index ee632b62..fb599a18 100644 --- a/src/lib/component/ComponentFactory.cpp +++ b/src/lib/component/ComponentFactory.cpp @@ -14,16 +14,16 @@ #include "component/view/StatusBarView.h" #include "component/view/UndoRedoView.h" #include "component/view/ViewFactory.h" -#include "component/view/ViewLayout.h" std::shared_ptr ComponentFactory::create( - ViewFactory* viewFactory, ViewLayout* viewLayout, GraphAccess* graphAccess, LocationAccess* locationAccess + ViewFactory* viewFactory, GraphAccess* graphAccess, LocationAccess* locationAccess ){ std::shared_ptr ptr(new ComponentFactory()); + ptr->m_viewFactory = viewFactory; - ptr->m_viewLayout = viewLayout; ptr->m_graphAccess = graphAccess; ptr->m_locationAccess = locationAccess; + return ptr; } @@ -31,61 +31,59 @@ ComponentFactory::~ComponentFactory() { } -std::shared_ptr ComponentFactory::createCodeComponent() +ViewFactory* ComponentFactory::getViewFactory() const { - std::shared_ptr view = m_viewFactory->createCodeView(m_viewLayout); + return m_viewFactory; +} + +std::shared_ptr ComponentFactory::createCodeComponent(ViewLayout* viewLayout) +{ + std::shared_ptr view = m_viewFactory->createCodeView(viewLayout); std::shared_ptr controller = std::make_shared(m_graphAccess, m_locationAccess); - std::shared_ptr component = std::make_shared(view, controller); - return component; + return std::make_shared(view, controller); } -std::shared_ptr ComponentFactory::createGraphComponent() +std::shared_ptr ComponentFactory::createGraphComponent(ViewLayout* viewLayout) { - std::shared_ptr view = m_viewFactory->createGraphView(m_viewLayout); + std::shared_ptr view = m_viewFactory->createGraphView(viewLayout); std::shared_ptr controller = std::make_shared(m_graphAccess); - std::shared_ptr component = std::make_shared(view, controller); - return component; + return std::make_shared(view, controller); } -std::shared_ptr ComponentFactory::createRefreshComponent() +std::shared_ptr ComponentFactory::createRefreshComponent(ViewLayout* viewLayout) { - std::shared_ptr view = m_viewFactory->createRefreshView(m_viewLayout); + std::shared_ptr view = m_viewFactory->createRefreshView(viewLayout); std::shared_ptr controller = std::make_shared(); - std::shared_ptr component = std::make_shared(view, controller); - return component; + return std::make_shared(view, controller); } -std::shared_ptr ComponentFactory::createSearchComponent() +std::shared_ptr ComponentFactory::createSearchComponent(ViewLayout* viewLayout) { - std::shared_ptr view = m_viewFactory->createSearchView(m_viewLayout); + std::shared_ptr view = m_viewFactory->createSearchView(viewLayout); std::shared_ptr controller = std::make_shared(m_graphAccess); - std::shared_ptr component = std::make_shared(view, controller); - return component; + return std::make_shared(view, controller); } -std::shared_ptr ComponentFactory::createUndoRedoComponent() +std::shared_ptr ComponentFactory::createUndoRedoComponent(ViewLayout* viewLayout) { - std::shared_ptr view = m_viewFactory->createUndoRedoView(m_viewLayout); + std::shared_ptr view = m_viewFactory->createUndoRedoView(viewLayout); std::shared_ptr controller = std::make_shared(); - std::shared_ptr component = std::make_shared(view, controller); - return component; + return std::make_shared(view, controller); } -std::shared_ptr ComponentFactory::createStatusBarComponent() +std::shared_ptr ComponentFactory::createStatusBarComponent(ViewLayout* viewLayout) { - std::shared_ptr view = m_viewFactory->createStatusBarView(m_viewLayout); + std::shared_ptr view = m_viewFactory->createStatusBarView(viewLayout); std::shared_ptr controller = std::make_shared(); - std::shared_ptr component = std::make_shared(view,controller); - return component; + return std::make_shared(view, controller); } ComponentFactory::ComponentFactory() { } - diff --git a/src/lib/component/ComponentFactory.h b/src/lib/component/ComponentFactory.h index 61e81333..26a1707d 100644 --- a/src/lib/component/ComponentFactory.h +++ b/src/lib/component/ComponentFactory.h @@ -14,28 +14,28 @@ class ComponentFactory { public: static std::shared_ptr create( - ViewFactory* viewFactory, ViewLayout* viewLayout, GraphAccess* graphAccess, LocationAccess* locationAccess + ViewFactory* viewFactory, GraphAccess* graphAccess, LocationAccess* locationAccess ); ~ComponentFactory(); - std::shared_ptr createCodeComponent(); - std::shared_ptr createGraphComponent(); - std::shared_ptr createRefreshComponent(); - std::shared_ptr createSearchComponent(); - std::shared_ptr createStatusBarComponent(); - std::shared_ptr createUndoRedoComponent(); + ViewFactory* getViewFactory() const; + + std::shared_ptr createCodeComponent(ViewLayout* viewLayout); + std::shared_ptr createGraphComponent(ViewLayout* viewLayout); + std::shared_ptr createRefreshComponent(ViewLayout* viewLayout); + std::shared_ptr createSearchComponent(ViewLayout* viewLayout); + std::shared_ptr createStatusBarComponent(ViewLayout* viewLayout); + std::shared_ptr createUndoRedoComponent(ViewLayout* viewLayout); private: ComponentFactory(); ComponentFactory(const ComponentFactory&); ViewFactory* m_viewFactory; - ViewLayout* m_viewLayout; GraphAccess* m_graphAccess; LocationAccess* m_locationAccess; }; - #endif // COMPONENT_FACTORY_H diff --git a/src/lib/component/ComponentManager.cpp b/src/lib/component/ComponentManager.cpp index 42ad9c16..47e078f9 100644 --- a/src/lib/component/ComponentManager.cpp +++ b/src/lib/component/ComponentManager.cpp @@ -1,13 +1,19 @@ #include "component/ComponentManager.h" #include "component/view/CodeView.h" +#include "component/view/CompositeView.h" #include "component/view/GraphView.h" +#include "component/view/RefreshView.h" +#include "component/view/SearchView.h" +#include "component/view/UndoRedoView.h" +#include "component/view/ViewFactory.h" std::shared_ptr ComponentManager::create( - ViewFactory* viewFactory, ViewLayout* viewLayout, GraphAccess* graphAccess, LocationAccess* locationAccess + ViewFactory* viewFactory, GraphAccess* graphAccess, LocationAccess* locationAccess ){ std::shared_ptr ptr(new ComponentManager()); - ptr->m_componentFactory = ComponentFactory::create(viewFactory, viewLayout, graphAccess, locationAccess); + + ptr->m_componentFactory = ComponentFactory::create(viewFactory, graphAccess, locationAccess); return ptr; } @@ -16,24 +22,28 @@ ComponentManager::~ComponentManager() { } -void ComponentManager::setup() +void ComponentManager::setup(ViewLayout* viewLayout) { - std::shared_ptr graphComponent = m_componentFactory->createGraphComponent(); + std::shared_ptr graphComponent = m_componentFactory->createGraphComponent(viewLayout); m_components.push_back(graphComponent); - std::shared_ptr codeComponent = m_componentFactory->createCodeComponent(); + std::shared_ptr codeComponent = m_componentFactory->createCodeComponent(viewLayout); m_components.push_back(codeComponent); - std::shared_ptr undoRedoComponent = m_componentFactory->createUndoRedoComponent(); + std::shared_ptr compositeView = + m_componentFactory->getViewFactory()->createCompositeView(viewLayout, CompositeView::DIRECTION_HORIZONTAL); + m_views.push_back(compositeView); + + std::shared_ptr undoRedoComponent = m_componentFactory->createUndoRedoComponent(compositeView.get()); m_components.push_back(undoRedoComponent); - std::shared_ptr refreshComponent = m_componentFactory->createRefreshComponent(); + std::shared_ptr refreshComponent = m_componentFactory->createRefreshComponent(compositeView.get()); m_components.push_back(refreshComponent); - std::shared_ptr searchComponent = m_componentFactory->createSearchComponent(); + std::shared_ptr searchComponent = m_componentFactory->createSearchComponent(compositeView.get()); m_components.push_back(searchComponent); - std::shared_ptr statusBarComponent = m_componentFactory->createStatusBarComponent(); + std::shared_ptr statusBarComponent = m_componentFactory->createStatusBarComponent(viewLayout); m_components.push_back(statusBarComponent); } diff --git a/src/lib/component/ComponentManager.h b/src/lib/component/ComponentManager.h index 71cdbbc6..14c83e4e 100644 --- a/src/lib/component/ComponentManager.h +++ b/src/lib/component/ComponentManager.h @@ -9,6 +9,7 @@ #include "data/access/LocationAccess.h" #include "data/access/GraphAccess.h" +class View; class ViewFactory; class ViewLayout; @@ -16,12 +17,12 @@ class ComponentManager { public: static std::shared_ptr create( - ViewFactory* viewFactory, ViewLayout* viewLayout, GraphAccess* graphAccess, LocationAccess* locationAccess + ViewFactory* viewFactory, GraphAccess* graphAccess, LocationAccess* locationAccess ); ~ComponentManager(); - void setup(); + void setup(ViewLayout* viewLayout); private: ComponentManager(); @@ -29,7 +30,8 @@ private: std::shared_ptr m_componentFactory; - std::vector > m_components; + std::vector> m_components; + std::vector> m_views; }; #endif // COMPONENT_MANAGER_H diff --git a/src/lib/component/view/CodeView.cpp b/src/lib/component/view/CodeView.cpp index 21ff0ef1..3f9d374a 100644 --- a/src/lib/component/view/CodeView.cpp +++ b/src/lib/component/view/CodeView.cpp @@ -62,7 +62,7 @@ bool CodeView::CodeSnippetParams::sort(const CodeSnippetParams& a, const CodeSni } CodeView::CodeView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100, 100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/CompositeView.cpp b/src/lib/component/view/CompositeView.cpp new file mode 100644 index 00000000..ffa53cd6 --- /dev/null +++ b/src/lib/component/view/CompositeView.cpp @@ -0,0 +1,64 @@ +#include "component/view/CompositeView.h" + +CompositeView::CompositeView(ViewLayout* viewLayout, CompositeDirection direction) + : View(viewLayout) + , m_direction(direction) +{ +} + +CompositeView::~CompositeView() +{ +} + +CompositeView::CompositeDirection CompositeView::getDirection() const +{ + return m_direction; +} + +const std::vector& CompositeView::getViews() const +{ + return m_views; +} + +std::string CompositeView::getName() const +{ + return "CompositeView"; +} + +void CompositeView::addView(View* view) +{ + m_views.push_back(view); + + addViewWidget(view); +} + +void CompositeView::removeView(View* view) +{ + std::vector::iterator it = std::find(m_views.begin(), m_views.end(), view); + if (it == m_views.end()) + { + return; + } + + m_views.erase(it); +} + +void CompositeView::showView(View* view) +{ + getViewLayout()->showView(view); +} + +void CompositeView::hideView(View* view) +{ + getViewLayout()->hideView(view); +} + +void CompositeView::loadLayout() +{ + getViewLayout()->loadLayout(); +} + +void CompositeView::saveLayout() +{ + getViewLayout()->saveLayout(); +} diff --git a/src/lib/component/view/CompositeView.h b/src/lib/component/view/CompositeView.h new file mode 100644 index 00000000..892579c6 --- /dev/null +++ b/src/lib/component/view/CompositeView.h @@ -0,0 +1,46 @@ +#ifndef COMPOSITE_VIEW_H +#define COMPOSITE_VIEW_H + +#include + +#include "component/view/View.h" +#include "component/view/ViewLayout.h" + +class CompositeView + : public View + , public ViewLayout +{ +public: + enum CompositeDirection + { + DIRECTION_HORIZONTAL, + DIRECTION_VERTICAL + }; + + CompositeView(ViewLayout* viewLayout, CompositeDirection direction); + virtual ~CompositeView(); + + CompositeDirection getDirection() const; + const std::vector& getViews() const; + + virtual void addViewWidget(View* view) = 0; + + // View implementation + virtual std::string getName() const; + + // ViewLayout implementation + virtual void addView(View* view); + virtual void removeView(View* view); + + virtual void showView(View* view); + virtual void hideView(View* view); + + virtual void loadLayout(); + virtual void saveLayout(); + +private: + std::vector m_views; + CompositeDirection m_direction; +}; + +#endif // COMPOSITE_VIEW_H diff --git a/src/lib/component/view/GraphView.cpp b/src/lib/component/view/GraphView.cpp index 5da420c2..265f3da2 100644 --- a/src/lib/component/view/GraphView.cpp +++ b/src/lib/component/view/GraphView.cpp @@ -10,7 +10,7 @@ GraphView::Metrics::Metrics() } GraphView::GraphView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100, 100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/RefreshView.cpp b/src/lib/component/view/RefreshView.cpp index 368eef47..67924815 100644 --- a/src/lib/component/view/RefreshView.cpp +++ b/src/lib/component/view/RefreshView.cpp @@ -3,7 +3,7 @@ #include "component/controller/RefreshController.h" RefreshView::RefreshView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100, 100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/SearchView.cpp b/src/lib/component/view/SearchView.cpp index e111ff02..b5a2c3b6 100644 --- a/src/lib/component/view/SearchView.cpp +++ b/src/lib/component/view/SearchView.cpp @@ -3,7 +3,7 @@ #include "component/controller/SearchController.h" SearchView::SearchView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100, 100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/StatusBarView.cpp b/src/lib/component/view/StatusBarView.cpp index 69f89106..885b0c35 100644 --- a/src/lib/component/view/StatusBarView.cpp +++ b/src/lib/component/view/StatusBarView.cpp @@ -3,7 +3,7 @@ #include "component/controller/StatusBarController.h" StatusBarView::StatusBarView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100,100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/UndoRedoView.cpp b/src/lib/component/view/UndoRedoView.cpp index 8441b3db..50aae9bf 100644 --- a/src/lib/component/view/UndoRedoView.cpp +++ b/src/lib/component/view/UndoRedoView.cpp @@ -3,7 +3,7 @@ #include "component/controller/UndoRedoController.h" UndoRedoView::UndoRedoView(ViewLayout* viewLayout) - : View(viewLayout, Vec2i(100,100)) + : View(viewLayout) { } diff --git a/src/lib/component/view/View.cpp b/src/lib/component/view/View.cpp index 13faea36..d4ed7363 100644 --- a/src/lib/component/view/View.cpp +++ b/src/lib/component/view/View.cpp @@ -2,10 +2,9 @@ #include "component/view/ViewWidgetWrapper.h" -View::View(ViewLayout* viewLayout, const Vec2i& minSize) +View::View(ViewLayout* viewLayout) : m_viewLayout(viewLayout) , m_widgetWrapper(nullptr) - , m_minSize(minSize) { } @@ -14,9 +13,16 @@ View::~View() m_viewLayout->removeView(this); } -void View::setWidgetWrapper(std::shared_ptr widgetWrapper) +void View::init() { - m_widgetWrapper = widgetWrapper; + createWidgetWrapper(); + + initView(); +} + +void View::addToLayout() +{ + m_viewLayout->addView(this); } ViewWidgetWrapper* View::getWidgetWrapper() const @@ -29,22 +35,12 @@ void View::setComponent(Component* component) m_component = component; } -int View::getMinWidth() const -{ - return m_minSize.x; -} - -int View::getMinHeight() const -{ - return m_minSize.y; -} - -Vec2i View::getMinSize() const -{ - return m_minSize; -} - ViewLayout* View::getViewLayout() const { return m_viewLayout; } + +void View::setWidgetWrapper(std::shared_ptr widgetWrapper) +{ + m_widgetWrapper = widgetWrapper; +} diff --git a/src/lib/component/view/View.h b/src/lib/component/view/View.h index 8a280435..170b5d69 100644 --- a/src/lib/component/view/View.h +++ b/src/lib/component/view/View.h @@ -14,12 +14,12 @@ class View { public: template - static std::shared_ptr create(ViewLayout* viewLayout); + static std::shared_ptr createInitAndAddToLayout(ViewLayout* viewLayout); template - static std::shared_ptr createAndDontAddToLayout(ViewLayout* viewLayout); + static std::shared_ptr createAndInit(ViewLayout* viewLayout); - View(ViewLayout* viewLayout, const Vec2i& minSize); + View(ViewLayout* viewLayout); virtual ~View(); virtual std::string getName() const = 0; @@ -28,48 +28,43 @@ public: virtual void initView() = 0; virtual void refreshView() = 0; + void init(); + void addToLayout(); + 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; + void setWidgetWrapper(std::shared_ptr widgetWrapper); + 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 View::createInitAndAddToLayout(ViewLayout* viewLayout) { - std::shared_ptr ptr = std::make_shared(viewLayout); + std::shared_ptr ptr = View::createAndInit(viewLayout); - ptr->createWidgetWrapper(); - ptr->initView(); - - viewLayout->addView(ptr.get()); + ptr->addToLayout(); return ptr; } template -std::shared_ptr View::createAndDontAddToLayout(ViewLayout* viewLayout) +std::shared_ptr View::createAndInit(ViewLayout* viewLayout) { std::shared_ptr ptr = std::make_shared(viewLayout); - ptr->createWidgetWrapper(); - ptr->initView(); + ptr->init(); return ptr; } diff --git a/src/lib/component/view/ViewFactory.h b/src/lib/component/view/ViewFactory.h index 880aa385..cd8c7d8b 100644 --- a/src/lib/component/view/ViewFactory.h +++ b/src/lib/component/view/ViewFactory.h @@ -3,6 +3,8 @@ #include +#include "component/view/CompositeView.h" + class CodeView; class GraphView; class MainView; @@ -19,6 +21,9 @@ public: virtual ~ViewFactory(); virtual std::shared_ptr createMainView() const = 0; + virtual std::shared_ptr createCompositeView( + ViewLayout* viewLayout, CompositeView::CompositeDirection direction) const = 0; + virtual std::shared_ptr createCodeView(ViewLayout* viewLayout) const = 0; virtual std::shared_ptr createGraphView(ViewLayout* viewLayout) const = 0; virtual std::shared_ptr createRefreshView(ViewLayout* viewLayout) const = 0;