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