From a75e50dc33fbab601debb6d21619b4c6a7f72fdf Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Wed, 4 Aug 2021 14:42:56 +0200
Subject: [PATCH] LIB: Add script store to VivyApplication + force document
 views to have a parent

---
 src/UI/MainWindow.cc         | 11 ++++-------
 src/UI/ScriptDocumentView.cc |  4 ++--
 src/UI/ScriptDocumentView.hh |  3 ++-
 src/UI/VivyDocumentView.hh   |  2 +-
 src/VivyApplication.hh       |  1 +
 5 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/UI/MainWindow.cc b/src/UI/MainWindow.cc
index 32e6bbf9..6944ebed 100644
--- a/src/UI/MainWindow.cc
+++ b/src/UI/MainWindow.cc
@@ -233,14 +233,11 @@ MainWindow::closeDocument(int index) noexcept
 void
 MainWindow::newDocument() noexcept
 {
-    std::shared_ptr<VivyDocument> document =
-        vivyApp->documentStore.newDocument(VivyDocument::UntouchedByDefault);
-
     try {
-        addTab(new VivyDocumentView(document));
+        addTab(new VivyDocumentView(
+            vivyApp->documentStore.newDocument(VivyDocument::UntouchedByDefault), documents));
     } catch (const std::runtime_error &e) {
         qCritical() << "Failed to create a new empty document:" << e.what();
-        vivyApp->documentStore.closeDocument(document->getUuid());
     }
 }
 
@@ -266,10 +263,10 @@ MainWindow::openDocument() noexcept
     try {
         if ((fileType == Utils::DocumentType::Video) || (fileType == Utils::DocumentType::Vivy) ||
             (fileType == Utils::DocumentType::Audio) || (fileType == Utils::DocumentType::ASS))
-            addTab(new VivyDocumentView(vivyApp->documentStore.loadDocument(filename)));
+            addTab(new VivyDocumentView(vivyApp->documentStore.loadDocument(filename), documents));
 
         else if (fileType == Utils::DocumentType::VivyScript)
-            addTab(new ScriptDocumentView(filename, documents));
+            addTab(new ScriptDocumentView(vivyApp->scriptStore.loadDocument(filename), documents));
     } catch (const std::runtime_error &e) {
         qCritical() << "Failed to load document" << filename << "with error:" << e.what();
     }
diff --git a/src/UI/ScriptDocumentView.cc b/src/UI/ScriptDocumentView.cc
index b8d03ac5..8e3421ed 100644
--- a/src/UI/ScriptDocumentView.cc
+++ b/src/UI/ScriptDocumentView.cc
@@ -7,12 +7,12 @@
 
 using namespace Vivy;
 
-ScriptDocumentView::ScriptDocumentView(const QString &path, QWidget *parent)
+ScriptDocumentView::ScriptDocumentView(std::shared_ptr<ScriptDocument> ptr, QWidget *parent)
     : AbstractDocumentView(AbstractDocumentView::Type::Script, parent)
     , editor(new ScriptEditor(this))
     , syntax(new ScriptHighlighter(editor->document()))
 {
-    QFile textFile(path);
+    QFile textFile(ptr->getName());
     if (!textFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
         throw std::runtime_error("Failed to open script file");
     }
diff --git a/src/UI/ScriptDocumentView.hh b/src/UI/ScriptDocumentView.hh
index 15b2be98..3037b315 100644
--- a/src/UI/ScriptDocumentView.hh
+++ b/src/UI/ScriptDocumentView.hh
@@ -15,13 +15,14 @@ namespace Vivy
 {
 class ScriptEditor;
 class ScriptHighlighter;
+class ScriptDocument;
 
 class ScriptDocumentView final : public AbstractDocumentView {
     Q_OBJECT
     VIVY_UNMOVABLE_OBJECT(ScriptDocumentView)
 
 public:
-    explicit ScriptDocumentView(const QString &path, QWidget *parent = nullptr);
+    explicit ScriptDocumentView(std::shared_ptr<ScriptDocument>, QWidget *parent = nullptr);
 
     void closeDocument() noexcept override;
     void openProperties() noexcept override;
diff --git a/src/UI/VivyDocumentView.hh b/src/UI/VivyDocumentView.hh
index b30b27d1..96a59876 100644
--- a/src/UI/VivyDocumentView.hh
+++ b/src/UI/VivyDocumentView.hh
@@ -21,7 +21,7 @@ class VivyDocumentView final : public AbstractDocumentView {
     VIVY_UNMOVABLE_OBJECT(VivyDocumentView)
 
 public:
-    explicit VivyDocumentView(std::shared_ptr<VivyDocument>, QWidget *parent = nullptr) noexcept;
+    explicit VivyDocumentView(std::shared_ptr<VivyDocument>, QWidget *parent) noexcept;
     ~VivyDocumentView() noexcept;
 
     void closeDocument() noexcept override;
diff --git a/src/VivyApplication.hh b/src/VivyApplication.hh
index 4d51494c..56bde12a 100644
--- a/src/VivyApplication.hh
+++ b/src/VivyApplication.hh
@@ -34,6 +34,7 @@ class VivyApplication : public QApplication {
 
 public:
     VivyDocumentStore documentStore{};
+    ScriptStore scriptStore{};
 
     enum class Font {
         Monospace,
-- 
GitLab