diff --git a/.gitignore b/.gitignore index 7f4756c0..8bcbf534 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ /bin/test/Release/ /bin/test/data/log/ +/bin/app/data/window_settings.ini + .DS_Store diff --git a/src/app/qt/element/QtMainWindow.cpp b/src/app/qt/element/QtMainWindow.cpp index 88f93a74..43810fb6 100644 --- a/src/app/qt/element/QtMainWindow.cpp +++ b/src/app/qt/element/QtMainWindow.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "component/view/View.h" #include "qt/QtWidgetWrapper.h" @@ -86,6 +87,60 @@ void QtMainWindow::removeView(View* view) } } +void QtMainWindow::loadLayout() +{ + QSettings settings("data/window_settings.ini", QSettings::IniFormat); + + settings.beginGroup("MainWindow"); + resize(settings.value("size", QSize(600, 400)).toSize()); + move(settings.value("position", QPoint(200, 200)).toPoint()); + if (settings.value("maximized", false).toBool()) + { + showMaximized(); + } + settings.endGroup(); + + for (size_t i = 0; i < m_dockWidgets.size(); i++) + { + View* view = m_dockWidgets[i].first; + QDockWidget* dockWidget = m_dockWidgets[i].second; + + settings.beginGroup(view->getName().c_str()); + dockWidget->setFloating(settings.value("floating", false).toBool()); + dockWidget->setHidden(settings.value("hidden", false).toBool()); + dockWidget->resize(settings.value("size", QSize(400, 400)).toSize()); + dockWidget->move(settings.value("position", QPoint(200, 200)).toPoint()); + settings.endGroup(); + } +} + +void QtMainWindow::saveLayout() +{ + QSettings settings("data/window_settings.ini", QSettings::IniFormat); + + settings.beginGroup("MainWindow"); + settings.setValue("maximized", isMaximized()); + if (!isMaximized()) + { + settings.setValue("size", size()); + settings.setValue("position", pos()); + } + settings.endGroup(); + + for (size_t i = 0; i < m_dockWidgets.size(); i++) + { + View* view = m_dockWidgets[i].first; + QDockWidget* dockWidget = m_dockWidgets[i].second; + + settings.beginGroup(view->getName().c_str()); + settings.setValue("floating", dockWidget->isFloating()); + settings.setValue("hidden", dockWidget->isHidden()); + settings.setValue("size", dockWidget->size()); + settings.setValue("position", dockWidget->pos()); + settings.endGroup(); + } +} + void QtMainWindow::setupProjectMenu() { QMenu *menu = new QMenu(tr("&Project"), this); diff --git a/src/app/qt/element/QtMainWindow.h b/src/app/qt/element/QtMainWindow.h index bd500056..45b8aaa4 100644 --- a/src/app/qt/element/QtMainWindow.h +++ b/src/app/qt/element/QtMainWindow.h @@ -20,6 +20,9 @@ public: void addView(View* view); void removeView(View* view); + void loadLayout(); + void saveLayout(); + public slots: void about(); void newProject(); diff --git a/src/app/qt/view/QtMainView.cpp b/src/app/qt/view/QtMainView.cpp index e828c21c..ab87f773 100644 --- a/src/app/qt/view/QtMainView.cpp +++ b/src/app/qt/view/QtMainView.cpp @@ -31,3 +31,13 @@ void QtMainView::removeView(View* view) m_window->removeView(view); m_views.erase(it); } + +void QtMainView::loadLayout() +{ + m_window->loadLayout(); +} + +void QtMainView::saveLayout() +{ + m_window->saveLayout(); +} diff --git a/src/app/qt/view/QtMainView.h b/src/app/qt/view/QtMainView.h index 2a28750e..cf610601 100644 --- a/src/app/qt/view/QtMainView.h +++ b/src/app/qt/view/QtMainView.h @@ -19,6 +19,9 @@ public: void addView(View* view); void removeView(View* view); + virtual void loadLayout(); + virtual void saveLayout(); + private: std::shared_ptr m_window; std::vector m_views; diff --git a/src/lib/Application.cpp b/src/lib/Application.cpp index e5396965..d8b94a55 100644 --- a/src/lib/Application.cpp +++ b/src/lib/Application.cpp @@ -27,6 +27,7 @@ std::shared_ptr Application::create(GuiFactory* guiFactory) guiFactory, ptr->m_mainView.get(), ptr->m_graphAccessProxy.get(), ptr->m_locationAccessProxy.get()); ptr->m_componentManager->setup(); + ptr->m_mainView->loadLayout(); return ptr; } @@ -39,6 +40,7 @@ Application::Application() Application::~Application() { MessageQueue::getInstance()->stopMessageLoop(); + m_mainView->saveLayout(); } void Application::loadProject(const std::string& projectSettingsFilePath) diff --git a/src/lib/component/ComponentManager.cpp b/src/lib/component/ComponentManager.cpp index 3f5c7b8a..ea4b1aa5 100644 --- a/src/lib/component/ComponentManager.cpp +++ b/src/lib/component/ComponentManager.cpp @@ -22,12 +22,6 @@ ComponentManager::~ComponentManager() void ComponentManager::setup() { std::shared_ptr graphComponent = m_componentFactory->createGraphComponent(); - - GraphView* graphView = graphComponent->getView(); - /*std::weak_ptr node0 = graphView->addNode(Vec2i(-50, -50), "foo"); - graphView->addEdge(node0, graphView->addNode(Vec2i(100, 100), "bar")); - graphView->addEdge(node0, graphView->addNode(Vec2i(50, -50), "war production co-ordinating commitee"));*/ - m_components.push_back(graphComponent); std::shared_ptr codeComponent = m_componentFactory->createCodeComponent(); diff --git a/src/lib/component/view/ViewLayout.h b/src/lib/component/view/ViewLayout.h index 10a4d459..d9a0e2ba 100644 --- a/src/lib/component/view/ViewLayout.h +++ b/src/lib/component/view/ViewLayout.h @@ -11,6 +11,9 @@ public: virtual void addView(View* view) = 0; virtual void removeView(View* view) = 0; + + virtual void loadLayout() = 0; + virtual void saveLayout() = 0; }; #endif // VIEW_LAYOUT_H