mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4471 Implement python script running and editor in ResInsight GUI, same as Octave.
This commit is contained in:
@@ -48,6 +48,31 @@ RimCalcScript::RimCalcScript()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimCalcScript::~RimCalcScript() {}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimCalcScript::ScriptType RimCalcScript::scriptType(const QString& absoluteFileNameScript)
|
||||
{
|
||||
QFileInfo fileInfo(absoluteFileNameScript);
|
||||
if (fileInfo.suffix() == "py")
|
||||
{
|
||||
return PYTHON;
|
||||
}
|
||||
else if (fileInfo.suffix() == "m")
|
||||
{
|
||||
return OCTAVE;
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimCalcScript::ScriptType RimCalcScript::scriptType() const
|
||||
{
|
||||
return scriptType(absoluteFileName());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -55,20 +80,27 @@ QStringList RimCalcScript::createCommandLineArguments(const QString& absoluteFil
|
||||
{
|
||||
QStringList arguments;
|
||||
|
||||
if (scriptType(absoluteFileNameScript) == PYTHON)
|
||||
{
|
||||
auto app = RiaApplication::instance();
|
||||
|
||||
arguments = app->octaveArguments();
|
||||
arguments.append("--path");
|
||||
arguments.append(absoluteFileNameScript);
|
||||
}
|
||||
|
||||
else if (scriptType(absoluteFileNameScript) == OCTAVE)
|
||||
{
|
||||
QFileInfo fi(absoluteFileNameScript);
|
||||
QString octaveFunctionSearchPath = fi.absolutePath();
|
||||
QString absFilePath = fi.absoluteFilePath();
|
||||
{
|
||||
auto app = RiaApplication::instance();
|
||||
|
||||
arguments << octaveFunctionSearchPath;
|
||||
arguments << absFilePath;
|
||||
arguments = app->octaveArguments();
|
||||
arguments.append("--path");
|
||||
}
|
||||
|
||||
{
|
||||
QFileInfo fi(absoluteFileNameScript);
|
||||
QString octaveFunctionSearchPath = fi.absolutePath();
|
||||
QString absFilePath = fi.absoluteFilePath();
|
||||
|
||||
arguments << octaveFunctionSearchPath;
|
||||
arguments << absFilePath;
|
||||
}
|
||||
}
|
||||
|
||||
bool debugPrintArgumentText = false;
|
||||
@@ -76,8 +108,19 @@ QStringList RimCalcScript::createCommandLineArguments(const QString& absoluteFil
|
||||
{
|
||||
QString argumentString = arguments.join(" ");
|
||||
|
||||
RiaLogging::info("Octave arguments : " + argumentString);
|
||||
RiaLogging::info("Scriptarguments : " + argumentString);
|
||||
}
|
||||
|
||||
return arguments;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimCalcScript::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/)
|
||||
{
|
||||
if (scriptType() == PYTHON)
|
||||
{
|
||||
uiCapability()->setUiIconFromResourceString(":/PythonScriptFile16x16.png");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,11 +30,25 @@ class RimCalcScript : public caf::PdmObject
|
||||
CAF_PDM_HEADER_INIT;
|
||||
|
||||
public:
|
||||
enum ScriptType
|
||||
{
|
||||
OCTAVE = 0,
|
||||
PYTHON = 1,
|
||||
UNKNOWN = 2
|
||||
};
|
||||
|
||||
RimCalcScript();
|
||||
~RimCalcScript() override;
|
||||
|
||||
ScriptType scriptType() const;
|
||||
static ScriptType scriptType(const QString& fileName);
|
||||
|
||||
static QStringList createCommandLineArguments(const QString& absoluteFileNameScript);
|
||||
|
||||
caf::PdmField<QString> absoluteFileName;
|
||||
caf::PdmField<QString> content; // TODO: Obsolete field, can be deleted on next project file revision.
|
||||
|
||||
protected:
|
||||
void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "") override;
|
||||
|
||||
};
|
||||
|
||||
@@ -96,7 +96,7 @@ void RimCommandExecuteScript::redo()
|
||||
arguments.append("--eval");
|
||||
arguments << this->scriptText();
|
||||
|
||||
RiaApplication::instance()->launchProcess(octavePath, arguments);
|
||||
RiaApplication::instance()->launchProcess(octavePath, arguments, app->octaveProcessEnvironment());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -81,8 +81,8 @@ void RimScriptCollection::readContentFromDisc()
|
||||
|
||||
// Build a list of all scripts in the specified directory
|
||||
{
|
||||
QString filter = "*.m";
|
||||
QStringList fileList = caf::Utils::getFilesInDirectory(directory, filter, true);
|
||||
QStringList nameFilters; nameFilters << "*.m" << "*.py";
|
||||
QStringList fileList = caf::Utils::getFilesInDirectory(directory, nameFilters, true);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < fileList.size(); i++)
|
||||
|
||||
Reference in New Issue
Block a user