From c3022675806a90449eda4c82b7c6ae6bccd44f16 Mon Sep 17 00:00:00 2001
From: Mathias Paulin <mathias.paulin@irit.fr>
Date: Fri, 26 Mar 2021 13:03:29 +0100
Subject: [PATCH] Fix sync between code edition and code loading

---
 src/libRender/RadiumNBR/Gui/RendererPanel.cpp | 33 +++++++++----------
 .../RadiumNBR/Gui/VisualizationGui.cpp        | 27 ++++++++-------
 2 files changed, 29 insertions(+), 31 deletions(-)

diff --git a/src/libRender/RadiumNBR/Gui/RendererPanel.cpp b/src/libRender/RadiumNBR/Gui/RendererPanel.cpp
index 20eb93d..36d7a71 100644
--- a/src/libRender/RadiumNBR/Gui/RendererPanel.cpp
+++ b/src/libRender/RadiumNBR/Gui/RendererPanel.cpp
@@ -196,43 +196,42 @@ void RendererPanel::addCodeEditor( const std::string& name,
         {
             dialog = new QDialog( this );
 
-            auto buttonBox =
-                new QDialogButtonBox( QDialogButtonBox::Save | QDialogButtonBox::Close );
             auto textEditor = new GlslEditor( dialog );
             textEditor->setPlainText( QString::fromStdString( initialText() ) );
 
+            auto buttonBox =
+                new QDialogButtonBox( QDialogButtonBox::Save | QDialogButtonBox::Close, dialog );
+
             connect( buttonBox, &QDialogButtonBox::accepted, [callback, textEditor]() {
-                std::cout << "Accepted event received" << std::endl;
                 callback( textEditor->toPlainText().toStdString() );
             } );
-
             connect(
                 buttonBox, &QDialogButtonBox::rejected, [callback, &dialog, initialText]() mutable {
-                    delete dialog;
-                    dialog = nullptr;
+                    dialog->hide();
                 } );
-
             QVBoxLayout* mainLayout = new QVBoxLayout;
             mainLayout->addWidget( textEditor );
             mainLayout->addWidget( buttonBox );
             dialog->setLayout( mainLayout );
         }
+        else
+        {
+            auto childs     = dialog->children();
+            auto textEditor = dynamic_cast<GlslEditor*>( childs.first() );
+            if ( textEditor )
+            { textEditor->setPlainText( QString::fromStdString( initialText() ) ); }
+            else
+            {
+                std::cout << "ERROR !!! Text editor is not the first child of the dialog"
+                          << std::endl;
+            }
+        }
         dialog->show();
         dialog->raise();
         dialog->activateWindow();
     };
     connect( button, &QPushButton::clicked, editDialog );
 
-    /*
-    GlslEditor *editor{nullptr};
-    auto launchEditor= [this, callback, initialText, editor]() mutable {
-        if ( !editor ){
-            editor = new GlslEditor();
-        }
-        editor->show();
-    };
-    connect( button, &QPushButton::clicked, launchEditor );
-     */
     m_currentLayout->addWidget( button );
 }
 
diff --git a/src/libRender/RadiumNBR/Gui/VisualizationGui.cpp b/src/libRender/RadiumNBR/Gui/VisualizationGui.cpp
index aa98c23..6b0fe77 100644
--- a/src/libRender/RadiumNBR/Gui/VisualizationGui.cpp
+++ b/src/libRender/RadiumNBR/Gui/VisualizationGui.cpp
@@ -53,23 +53,23 @@ buildControllerGui( NodeBasedRenderer* renderer, const std::function<void()>& ap
     controlPanel->beginLayout( QBoxLayout::LeftToRight );
     controlPanel->beginLayout( QBoxLayout::TopToBottom );
 
-    auto visualizationFunction = controller.getAttribToColorFunc();
+    //    auto visualizationFunction = controller.getAttribToColorFunc();
 
     auto getAttribCode = [&controller]() { return controller.getAttribToColorFunc().first; };
     auto getColorCode  = [&controller]() { return controller.getAttribToColorFunc().second; };
 
     controlPanel->addCodeEditor(
         "Edit attribute function",
-        [&controller, visualizationFunction, appUpdateCallback]( const std::string& s ) {
-            controller.setAttribToColorFunc( s, visualizationFunction.second );
+        [&controller, getColorCode, appUpdateCallback]( const std::string& s ) {
+            controller.setAttribToColorFunc( s, getColorCode() );
             appUpdateCallback();
         },
         getAttribCode );
 
     controlPanel->addCodeEditor(
         "Edit Color function",
-        [&controller, visualizationFunction, appUpdateCallback]( const std::string& s ) {
-            controller.setAttribToColorFunc( visualizationFunction.first, s );
+        [&controller, getAttribCode, appUpdateCallback]( const std::string& s ) {
+            controller.setAttribToColorFunc( getAttribCode(), s );
             appUpdateCallback();
         },
         getColorCode );
@@ -77,23 +77,23 @@ buildControllerGui( NodeBasedRenderer* renderer, const std::function<void()>& ap
 
     controlPanel->beginLayout( QBoxLayout::TopToBottom );
     auto loadAttribFuncClbk =
-        [&controller, visualizationFunction, appUpdateCallback]( const std::string& file ) {
+        [&controller, getColorCode, appUpdateCallback]( const std::string& file ) {
             if ( file.empty() ) { return; }
             std::cout << "Loading attrib function from file " << file << std::endl;
             std::ifstream inFile( file );
             std::stringstream strStream;
             strStream << inFile.rdbuf(); // read the file
-            controller.setAttribToColorFunc( strStream.str(), visualizationFunction.second );
+            controller.setAttribToColorFunc( strStream.str(), getColorCode() );
             appUpdateCallback();
         };
     auto loadColorFuncClbk =
-        [&controller, visualizationFunction, appUpdateCallback]( const std::string& file ) {
+        [&controller, getAttribCode, appUpdateCallback]( const std::string& file ) {
             if ( file.empty() ) { return; }
             std::cout << "Loading color function from file " << file << std::endl;
             std::ifstream inFile( file );
             std::stringstream strStream;
             strStream << inFile.rdbuf(); // read the file
-            controller.setAttribToColorFunc( visualizationFunction.first, strStream.str() );
+            controller.setAttribToColorFunc( getAttribCode(), strStream.str() );
             appUpdateCallback();
         };
     controlPanel->addFileInput(
@@ -102,14 +102,13 @@ buildControllerGui( NodeBasedRenderer* renderer, const std::function<void()>& ap
     controlPanel->endLayout( false );
 
     controlPanel->beginLayout( QBoxLayout::TopToBottom );
-    auto saveAttribFuncClbk = [visualizationFunction,
-                               appUpdateCallback]( const std::string& file ) {
+    auto saveAttribFuncClbk = [getAttribCode, appUpdateCallback]( const std::string& file ) {
         std::ofstream outFile( file );
-        outFile << visualizationFunction.first;
+        outFile << getAttribCode();
     };
-    auto saveColorFuncClbk = [visualizationFunction, appUpdateCallback]( const std::string& file ) {
+    auto saveColorFuncClbk = [getColorCode, appUpdateCallback]( const std::string& file ) {
         std::ofstream outFile( file );
-        outFile << visualizationFunction.second;
+        outFile << getColorCode();
     };
     controlPanel->addFileOuput(
         "Save attribute func", saveAttribFuncClbk, "./", "Shaders (*.glsl)" );
-- 
GitLab