From c89452732879448a17b9a1073c4d91ee47ffd53b Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 2 Dec 2021 14:52:29 +0300 Subject: [PATCH] Manage dynamic properties properly --- src/SalomeApp/SalomeApp_Application.cxx | 48 ++++++++++++++++--------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/SalomeApp/SalomeApp_Application.cxx b/src/SalomeApp/SalomeApp_Application.cxx index a4a26f4a4..aac94f91b 100644 --- a/src/SalomeApp/SalomeApp_Application.cxx +++ b/src/SalomeApp/SalomeApp_Application.cxx @@ -173,6 +173,25 @@ namespace bool myPrevState; bool& myLock; //! External 'Lock state' boolean flag }; + + /*! + \brief Dynamic property manager + */ + class PropertyMgr + { + QObject* myObject; + QString myProperty; + public: + PropertyMgr(QObject* object, const QString& property, const QVariant& value) + : myObject(object), myProperty(property) + { + myObject->setProperty(qPrintable(myProperty), value); + } + ~PropertyMgr() + { + myObject->setProperty(qPrintable(myProperty), QVariant()); + } + }; } /*!Constructor.*/ @@ -255,10 +274,12 @@ void SalomeApp_Application::start() LightApp_Application::start(); SALOME_EventFilter::Init(); - setProperty("open_study_from_command_line", true); - if ( !hdffile.isEmpty() ) // open hdf file given as parameter + if ( !hdffile.isEmpty() ) + { + // open hdf file given as parameter + PropertyMgr propm( this, "open_study_from_command_line", true ); onOpenDoc( hdffile ); - setProperty("open_study_from_command_line", QVariant()); + } #ifndef DISABLE_PYCONSOLE // import/execute python scripts @@ -287,6 +308,7 @@ void SalomeApp_Application::start() script.remove( QRegExp("^python.*[\\s]+") ); QString command = QString( "exec(open(\"%1\", \"rb\").read(), args=(%2))" ).arg(script).arg(args.join(",")); + PropertyMgr propm( this, "IsLoadedScript", true ); pyConsole->exec(command); } } // end for loop on pyfiles QStringList @@ -523,11 +545,10 @@ void SalomeApp_Application::onNewWithScript() { onNewDoc(); - QString command = QString("exec(open(\"%1\", \"rb\").read())").arg(aFile); - #ifndef DISABLE_PYCONSOLE + QString command = QString("exec(open(\"%1\", \"rb\").read())").arg(aFile); PyConsole_Console* pyConsole = pythonConsole(); - + PropertyMgr propm( this, "IsLoadedScript", true ); if ( pyConsole ) pyConsole->exec( command ); #endif @@ -998,19 +1019,12 @@ void SalomeApp_Application::onLoadScript( ) if ( !aFile.isEmpty() ) { - - QString command = QString("exec(compile(open('%1', 'rb').read(), '%1', 'exec'))").arg(aFile); - #ifndef DISABLE_PYCONSOLE + QString command = QString("exec(compile(open('%1', 'rb').read(), '%1', 'exec'))").arg(aFile); PyConsole_Console* pyConsole = pythonConsole(); - + PropertyMgr propm( this, "IsLoadedScript", true ); if ( pyConsole ) - { - std::string aProperty("IsLoadedScript"); - setProperty(aProperty.c_str(), true); pyConsole->exec(command); - setProperty(aProperty.c_str(), false); - } #endif } } @@ -2051,8 +2065,10 @@ bool SalomeApp_Application::onRestoreStudy( const QString& theDumpScript, #ifndef DISABLE_PYCONSOLE PyConsole_Console* pyConsole = app->pythonConsole(); - if ( pyConsole ) + if ( pyConsole ) { + PropertyMgr propm( this, "IsLoadedScript", true ); pyConsole->execAndWait( command ); + } #endif // remove temporary directory -- 2.39.2