From 6c5e3f5b2073133778ff64612a1cffea1bdb33da Mon Sep 17 00:00:00 2001
From: Ludwig Jaeck <ludwig.jaeck@outlook.de>
Date: Wed, 4 Jan 2023 16:25:04 +0100
Subject: [PATCH] Added command line argument for project file

---
 App/AppOptions.cpp           | 10 +++++++++-
 App/AppOptions.h             |  3 +++
 App/main.cpp                 |  3 ++-
 GUI/View/Main/MainWindow.cpp | 11 ++++++++---
 GUI/View/Main/MainWindow.h   |  1 +
 5 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/App/AppOptions.cpp b/App/AppOptions.cpp
index 04117d3176b..0f98faf4895 100644
--- a/App/AppOptions.cpp
+++ b/App/AppOptions.cpp
@@ -65,7 +65,8 @@ ApplicationOptions::ApplicationOptions(int argc, char** argv)
     m_options.add_options()(geometry, bpo::value<std::string>(),
                             "Main window geometry, e.g. 1600x1000");
     m_options.add_options()(nohighdpi, "Run without high-dpi support");
-
+    m_options.add_options()("project-file", bpo::value<std::string>(), "project file");
+    m_positional_options.add("project-file", -1);
     parseCommandLine(argc, argv);
 
     processOptions();
@@ -152,3 +153,10 @@ bool ApplicationOptions::disableHighDPISupport() const
 {
     return find(nohighdpi);
 }
+
+QString ApplicationOptions::projectFile() const
+{
+    if (find("project-file"))
+        return QString::fromStdString(m_variables_map["project-file"].as<std::string>());
+    return QString();
+}
\ No newline at end of file
diff --git a/App/AppOptions.h b/App/AppOptions.h
index 43058284349..737ce332cca 100644
--- a/App/AppOptions.h
+++ b/App/AppOptions.h
@@ -22,6 +22,7 @@
 #include <string>
 
 class QSize;
+class QString;
 
 namespace bpo = boost::program_options;
 
@@ -39,6 +40,8 @@ public:
 
     bool disableHighDPISupport() const;
 
+    QString projectFile() const;
+
     //! Returns true if option with given name has been set
     bool find(std::string name) const;
 
diff --git a/App/main.cpp b/App/main.cpp
index 080332e37f6..c2ef498c7b4 100644
--- a/App/main.cpp
+++ b/App/main.cpp
@@ -64,7 +64,8 @@ int main(int argc, char* argv[])
     GUI::Global::mainWindow = &win;
     if (options.find("geometry"))
         win.resize(options.mainWindowSize());
-
+    if (options.find("project-file"))
+        win.loadProject(options.projectFile());
     win.show();
 
     int result = QApplication::exec();
diff --git a/GUI/View/Main/MainWindow.cpp b/GUI/View/Main/MainWindow.cpp
index 3e75c49f061..4dd79cfd949 100644
--- a/GUI/View/Main/MainWindow.cpp
+++ b/GUI/View/Main/MainWindow.cpp
@@ -102,9 +102,9 @@ MainWindow::MainWindow()
     m_viewSelectionButtons->button(ViewId::WELCOME)->setChecked(true);
 
     updateTitle();
-
-    if (appSettings->createNewProjectOnStartup())
-        m_projectManager->newProject();
+    if (appSettings)
+        if (appSettings->createNewProjectOnStartup())
+            m_projectManager->newProject();
 }
 
 MainWindow::~MainWindow() = default;
@@ -402,3 +402,8 @@ QToolButton* MainWindow::createViewSelectionButton() const
     btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
     return btn;
 }
+
+void MainWindow::loadProject(QString projectPath)
+{
+    m_projectManager->openProject(projectPath);
+}
diff --git a/GUI/View/Main/MainWindow.h b/GUI/View/Main/MainWindow.h
index a82e6560feb..7adc8b13442 100644
--- a/GUI/View/Main/MainWindow.h
+++ b/GUI/View/Main/MainWindow.h
@@ -54,6 +54,7 @@ public:
     void setCurrentView(int viewId);
 
     void updateTitle();
+    void loadProject(QString projectPath);
 
 public slots:
     void onFocusRequest(int index);
-- 
GitLab