#4471 Implement python script running and editor in ResInsight GUI, same as Octave.

This commit is contained in:
Gaute Lindkvist
2019-07-26 14:54:54 +02:00
parent 8f464e5e23
commit 3ba962aefb
16 changed files with 200 additions and 61 deletions

View File

@@ -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");
}
}

View File

@@ -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;
};

View File

@@ -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());
}
}

View File

@@ -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++)