From 0fab216629a69ad7b0a52f219006a38cab01fec1 Mon Sep 17 00:00:00 2001
From: Martin Hanzik <martin@hanzik.com>
Date: Sun, 13 May 2018 12:00:37 +0200
Subject: [PATCH] Scene clearing

---
 agui2/src/MainWindow.cpp | 21 ++++++++++++++++-----
 agui2/src/MainWindow.hpp |  3 +++
 agui2/src/MainWindow.ui  |  6 ++++++
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/agui2/src/MainWindow.cpp b/agui2/src/MainWindow.cpp
index 94a0f4a78c..5c28d6aea4 100644
--- a/agui2/src/MainWindow.cpp
+++ b/agui2/src/MainWindow.cpp
@@ -44,9 +44,7 @@ MainWindow::MainWindow()
 
     this->setupMenu();
 
-    this->scene->addItem(new InputGraphicsBox(std::make_unique<InputModelBox>(), {0, 200}));
-    this->outputBox = new GraphicsBox(std::make_unique<OutputModelBox>(), {400, 200});;
-    this->scene->addItem(outputBox);
+    this->clearScene();
 }
 
 void MainWindow::displayError(const QString& text) const {
@@ -212,8 +210,7 @@ void MainWindow::on_actionOpen_triggered() {
     }
     catch (const std::exception& e) {
         QMessageBox::critical(this, "Error", e.what());
-        this->scene->clear();
-        this->outputBox = nullptr;
+        this->clearScene();
     }
 }
 
@@ -282,3 +279,17 @@ void MainWindow::on_actionSave_triggered() {
     stream << QString::fromStdString(data.dump(4));
     file.close();
 }
+
+void MainWindow::on_actionClear_triggered() {
+    this->clearScene();
+}
+
+void MainWindow::clearScene() {
+    ui->graphicsView->setScene(nullptr);
+    this->scene.reset();
+    this->scene = std::make_unique<GraphicsScene>(this);
+    ui->graphicsView->setScene(this->scene.get());
+    this->scene->addItem(new InputGraphicsBox(std::make_unique<InputModelBox>(), {0, 200}));
+    this->outputBox = new GraphicsBox(std::make_unique<OutputModelBox>(), {400, 200});;
+    this->scene->addItem(outputBox);
+}
diff --git a/agui2/src/MainWindow.hpp b/agui2/src/MainWindow.hpp
index 7b7b10181c..7536621295 100644
--- a/agui2/src/MainWindow.hpp
+++ b/agui2/src/MainWindow.hpp
@@ -24,6 +24,8 @@ public:
     static MainWindow* getInstance();
 
 private:
+    void clearScene();
+
     void setupMenu();
 
     void displayError(const QString& text) const;
@@ -35,6 +37,7 @@ private slots:
     void on_RunBtn_clicked();
     void on_actionOpen_triggered();
     void on_actionSave_triggered();
+    void on_actionClear_triggered();
 
 public:
     static const std::string ADD_INPUT_CURSOR_DATA;
diff --git a/agui2/src/MainWindow.ui b/agui2/src/MainWindow.ui
index 8db01826da..9077944da5 100644
--- a/agui2/src/MainWindow.ui
+++ b/agui2/src/MainWindow.ui
@@ -77,6 +77,7 @@
     </property>
     <addaction name="actionOpen"/>
     <addaction name="actionSave"/>
+    <addaction name="actionClear"/>
    </widget>
    <widget class="QMenu" name="menuInsert">
     <property name="title">
@@ -115,6 +116,11 @@
     <string>Ctrl+S</string>
    </property>
   </action>
+  <action name="actionClear">
+   <property name="text">
+    <string>Clear</string>
+   </property>
+  </action>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
  <customwidgets>
-- 
GitLab