From 70813954a53b03152038a5c552832e9fafca12c4 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Mon, 23 Aug 2021 12:06:10 +0200
Subject: [PATCH] use current project to access job model

...instead via MainWindow
---
 GUI/Views/JobView.cpp         | 16 +++++++++++-----
 GUI/Views/JobView.h           |  3 +++
 GUI/Views/SampleView.cpp      |  6 ++++++
 GUI/Views/SampleView.h        |  3 +++
 GUI/mainwindow/mainwindow.cpp |  3 ++-
 5 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/GUI/Views/JobView.cpp b/GUI/Views/JobView.cpp
index 8b91d570d47..1704ddc827f 100644
--- a/GUI/Views/JobView.cpp
+++ b/GUI/Views/JobView.cpp
@@ -25,6 +25,7 @@
 #include "GUI/Views/JobWidgets/JobSelectorWidget.h"
 #include "GUI/Views/JobWidgets/JobViewActivities.h"
 #include "GUI/mainwindow/mainwindow.h"
+#include "GUI/mainwindow/projectmanager.h"
 #include <QMenu>
 
 JobView::JobView(MainWindow* mainWindow)
@@ -56,6 +57,11 @@ void JobView::fillViewMenu(QMenu* menu)
     menu->addAction(action);
 }
 
+ProjectDocument* JobView::document() const
+{
+    return ProjectManager::instance()->document();
+}
+
 void JobView::onFocusRequest(JobItem* jobItem)
 {
     if (jobItem->runInBackground())
@@ -96,10 +102,10 @@ void JobView::onSelectionChanged(JobItem* jobItem)
 
 void JobView::createSubWindows()
 {
-    m_jobOutputDataWidget = new JobOutputDataWidget(m_mainWindow->jobModel(), this);
-    m_jobSelector = new JobSelectorWidget(m_mainWindow->jobModel(), this);
-    m_jobRealTimeWidget = new JobRealTimeWidget(m_mainWindow->jobModel(), this);
-    m_fitActivityPanel = new FitActivityPanel(m_mainWindow->jobModel(), this);
+    m_jobOutputDataWidget = new JobOutputDataWidget(document()->jobModel(), this);
+    m_jobSelector = new JobSelectorWidget(document()->jobModel(), this);
+    m_jobRealTimeWidget = new JobRealTimeWidget(document()->jobModel(), this);
+    m_fitActivityPanel = new FitActivityPanel(document()->jobModel(), this);
     m_jobMessagePanel = new JobMessagePanel(this);
 
     m_docks->addWidget(JobViewFlags::JOB_LIST_DOCK, m_jobSelector, Qt::LeftDockWidgetArea);
@@ -151,7 +157,7 @@ void JobView::connectActivityRelated()
 void JobView::connectJobRelated()
 {
     // Focus request: JobModel -> this
-    connect(m_mainWindow->jobModel(), &JobModel::focusRequest, this, &JobView::onFocusRequest);
+    connect(document()->jobModel(), &JobModel::focusRequest, this, &JobView::onFocusRequest);
 
     // JobItem selection: JobSelectorWidget -> this
     connect(m_jobSelector, &JobSelectorWidget::selectionChanged, this,
diff --git a/GUI/Views/JobView.h b/GUI/Views/JobView.h
index 78b0d84d8f6..3970b97020e 100644
--- a/GUI/Views/JobView.h
+++ b/GUI/Views/JobView.h
@@ -28,6 +28,7 @@ class JobMessagePanel;
 class JobProgressAssistant;
 class JobItem;
 class DocksController;
+class ProjectDocument;
 
 //! The JobView class is a main view to show list of jobs, job results and widgets for real time
 //! and fitting activities.
@@ -40,6 +41,8 @@ public:
 
     void fillViewMenu(QMenu* menu);
 
+    ProjectDocument* document() const;
+
 signals:
     void focusRequest(int);
     void activityChanged(int activity);
diff --git a/GUI/Views/SampleView.cpp b/GUI/Views/SampleView.cpp
index e73618a2150..b18eb6b279e 100644
--- a/GUI/Views/SampleView.cpp
+++ b/GUI/Views/SampleView.cpp
@@ -25,6 +25,7 @@
 #include "GUI/Views/SampleDesigner/SampleTreeWidget.h"
 #include "GUI/Views/SampleDesigner/ScriptPanel.h"
 #include "GUI/mainwindow/mainwindow.h"
+#include "GUI/mainwindow/projectmanager.h"
 #include <QDockWidget>
 #include <QMenu>
 #include <memory>
@@ -60,6 +61,11 @@ void SampleView::fillViewMenu(QMenu* menu)
     menu->addAction(action);
 }
 
+ProjectDocument* SampleView::document() const
+{
+    return ProjectManager::instance()->document();
+}
+
 void SampleView::createSubWindows()
 {
     m_sampleDesigner = new SampleDesigner(this);
diff --git a/GUI/Views/SampleView.h b/GUI/Views/SampleView.h
index 5bb86cd6745..23ac209ed14 100644
--- a/GUI/Views/SampleView.h
+++ b/GUI/Views/SampleView.h
@@ -28,6 +28,7 @@ class SampleTreeWidget;
 class SamplePropertyWidget;
 class ScriptPanel;
 class RealSpacePanel;
+class ProjectDocument;
 
 class SampleView : public QMainWindow {
     Q_OBJECT
@@ -40,6 +41,8 @@ public:
     void toggleRealSpaceView();
     void fillViewMenu(QMenu* menu);
 
+    ProjectDocument* document() const;
+
 private:
     void createSubWindows();
     void connectSignals();
diff --git a/GUI/mainwindow/mainwindow.cpp b/GUI/mainwindow/mainwindow.cpp
index bb02ee956a1..ac83c8b0bd3 100644
--- a/GUI/mainwindow/mainwindow.cpp
+++ b/GUI/mainwindow/mainwindow.cpp
@@ -248,7 +248,8 @@ void MainWindow::onSessionModelViewActive(bool isActive)
 
 void MainWindow::closeEvent(QCloseEvent* event)
 {
-    if (jobModel()->hasUnfinishedJobs()) {
+    if (m_projectManager->document() != nullptr
+        && m_projectManager->document()->jobModel()->hasUnfinishedJobs()) {
         QMessageBox::warning(this, "Can't quit the application.",
                              "Can't quit the application while jobs are running.\n"
                              "Cancel running jobs or wait until they are completed.");
-- 
GitLab