diff --git a/src/plugins/simulation/SimulationExperimentView/i18n/SimulationExperimentView_fr.ts b/src/plugins/simulation/SimulationExperimentView/i18n/SimulationExperimentView_fr.ts index 9bd336e708..1735e9a2af 100644 --- a/src/plugins/simulation/SimulationExperimentView/i18n/SimulationExperimentView_fr.ts +++ b/src/plugins/simulation/SimulationExperimentView/i18n/SimulationExperimentView_fr.ts @@ -556,22 +556,6 @@ none aucun - - Information: - Information : - - - Error: - Erreur : - - - Warning: - Attention : - - - Fatal: - Fatal : - the model needs both an ODE and an NLA solver, but none are available le modèle a besoin à la fois d'un solveur EDO et d'un solveur ALN, mais aucun n'est disponible @@ -664,6 +648,14 @@ %1 using %2 %1 avec %2 + + %1: + %1 : + + + Error: + Erreur : + QObject diff --git a/src/plugins/simulation/SimulationExperimentView/src/simulationexperimentviewsimulationwidget.cpp b/src/plugins/simulation/SimulationExperimentView/src/simulationexperimentviewsimulationwidget.cpp index 3d1b8d30ef..bbf4157f33 100644 --- a/src/plugins/simulation/SimulationExperimentView/src/simulationexperimentviewsimulationwidget.cpp +++ b/src/plugins/simulation/SimulationExperimentView/src/simulationexperimentviewsimulationwidget.cpp @@ -955,34 +955,13 @@ void SimulationExperimentViewSimulationWidget::initialize(bool pReloadingView) // it/them for (const auto &simulationIssue : simulationIssues) { - QString issueType; - - switch (simulationIssue.type()) { - case SimulationSupport::SimulationIssue::Type::Information: - issueType = tr("Information:"); - - break; - case SimulationSupport::SimulationIssue::Type::Error: - issueType = tr("Error:"); - - break; - case SimulationSupport::SimulationIssue::Type::Warning: - issueType = tr("Warning:"); - - break; - case SimulationSupport::SimulationIssue::Type::Fatal: - issueType = tr("Fatal:"); - - break; - } - if ((simulationIssue.line() != 0) && (simulationIssue.column() != 0)) { information += QString(QString()+OutputTab+"[%1:%2] %3 %4."+OutputBrLn).arg(simulationIssue.line()) .arg(simulationIssue.column()) - .arg(issueType, + .arg(tr("%1:").arg(simulationIssue.typeAsString()), Core::formatMessage(simulationIssue.message().toHtmlEscaped())); } else { - information += QString(QString()+OutputTab+"%1 %2."+OutputBrLn).arg(issueType, + information += QString(QString()+OutputTab+"%1 %2."+OutputBrLn).arg(tr("%1:").arg(simulationIssue.typeAsString()), Core::formatMessage(simulationIssue.message().toHtmlEscaped())); } } diff --git a/src/plugins/support/SimulationSupport/i18n/SimulationSupport_fr.ts b/src/plugins/support/SimulationSupport/i18n/SimulationSupport_fr.ts index 874894af2d..9fe83de6d2 100644 --- a/src/plugins/support/SimulationSupport/i18n/SimulationSupport_fr.ts +++ b/src/plugins/support/SimulationSupport/i18n/SimulationSupport_fr.ts @@ -22,33 +22,17 @@ OpenCOR::SimulationSupport::SimulationSupportPythonWrapper - - Information - - - - Error - - - - Warning - - - - Fatal - - The simulation has blocking issues and cannot therefore be run. - + La simulation a des problèmes blocants et ne peut donc pas être exécutée. The simulation has an invalid runtime and cannot therefore be run. - + La simulation a un environnement d'exécution invalide et ne peut donc pas être exécutée. The memory required for the simulation could not be allocated. - + La mémoire requise pour la simulation n'a pas pu être allouée. @@ -57,5 +41,21 @@ The requested solver (%1) could not be found. Le solveur demandé (%1) n'a pas pu être trouvé. + + Information + Information + + + Error + Erreur + + + Warning + Attention + + + Fatal + Fatal + diff --git a/src/plugins/support/SimulationSupport/src/simulation.cpp b/src/plugins/support/SimulationSupport/src/simulation.cpp index fd2295844f..a860877ca8 100644 --- a/src/plugins/support/SimulationSupport/src/simulation.cpp +++ b/src/plugins/support/SimulationSupport/src/simulation.cpp @@ -77,6 +77,28 @@ SimulationIssue::Type SimulationIssue::type() const //============================================================================== +QString SimulationIssue::typeAsString() const +{ + // Return the issue's type as a string + + switch (mType) { + case SimulationSupport::SimulationIssue::Type::Information: + return QObject::tr("Information"); + case SimulationSupport::SimulationIssue::Type::Error: + return QObject::tr("Error"); + case SimulationSupport::SimulationIssue::Type::Warning: + return QObject::tr("Warning"); + case SimulationSupport::SimulationIssue::Type::Fatal: + return QObject::tr("Fatal"); + } + + return "???"; + // Note: we can't reach this point, but without it we may, at compilation + // time, be told that not all control paths return a value... +} + +//============================================================================== + int SimulationIssue::line() const { // Return the issue's line diff --git a/src/plugins/support/SimulationSupport/src/simulation.h b/src/plugins/support/SimulationSupport/src/simulation.h index b0c2bc9d9b..1960261ab1 100644 --- a/src/plugins/support/SimulationSupport/src/simulation.h +++ b/src/plugins/support/SimulationSupport/src/simulation.h @@ -102,6 +102,8 @@ class SIMULATIONSUPPORT_EXPORT SimulationIssue explicit SimulationIssue(Type pType, const QString &pMessage); Type type() const; + QString typeAsString() const; + int line() const; int column() const; QString message() const; diff --git a/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.cpp b/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.cpp index 2e97a42cdf..50cb4ccd36 100644 --- a/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.cpp +++ b/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.cpp @@ -400,44 +400,23 @@ void SimulationSupportPythonWrapper::clearResults(Simulation *pSimulation) //============================================================================== -PyObject *SimulationSupportPythonWrapper::issues(Simulation *pSimulation) const +PyObject * SimulationSupportPythonWrapper::issues(Simulation *pSimulation) const { - // Return a list of any issues the simulation has + // Return a list of issues the simulation has PyObject *issuesList = PyList_New(0); - auto simulationIssues = pSimulation->issues(); for (const auto &simulationIssue : simulationIssues) { - QString issueType; QString information; - switch (simulationIssue.type()) { - case SimulationSupport::SimulationIssue::Type::Information: - issueType = tr("Information"); - - break; - case SimulationSupport::SimulationIssue::Type::Error: - issueType = tr("Error"); - - break; - case SimulationSupport::SimulationIssue::Type::Warning: - issueType = tr("Warning"); - - break; - case SimulationSupport::SimulationIssue::Type::Fatal: - issueType = tr("Fatal"); - - break; - } - if ((simulationIssue.line() != 0) && (simulationIssue.column() != 0)) { information = QString("[%1:%2] %3: %4.").arg(simulationIssue.line()) - .arg(simulationIssue.column()) - .arg(issueType, - Core::formatMessage(simulationIssue.message())); + .arg(simulationIssue.column()) + .arg(simulationIssue.typeAsString(), + Core::formatMessage(simulationIssue.message())); } else { - information = QString("%1: %2.").arg(issueType, + information = QString("%1: %2.").arg(simulationIssue.typeAsString(), Core::formatMessage(simulationIssue.message())); } @@ -453,6 +432,8 @@ void SimulationSupportPythonWrapper::setStartingPoint(SimulationData *pSimulatio double pStartingPoint, bool pRecompute) { + // Set the starting point of our simulation + pSimulationData->setStartingPoint(pStartingPoint, pRecompute); } @@ -461,6 +442,8 @@ void SimulationSupportPythonWrapper::setStartingPoint(SimulationData *pSimulatio void SimulationSupportPythonWrapper::setEndingPoint(SimulationData *pSimulationData, double pEndingPoint) { + // Set the ending point of our simulation + pSimulationData->setEndingPoint(pEndingPoint); } @@ -469,6 +452,8 @@ void SimulationSupportPythonWrapper::setEndingPoint(SimulationData *pSimulationD void SimulationSupportPythonWrapper::setPointInterval(SimulationData *pSimulationData, double pPointInterval) { + // Set the point interval for our simulation + pSimulationData->setPointInterval(pPointInterval); } @@ -494,16 +479,10 @@ void SimulationSupportPythonWrapper::setNlaSolver(SimulationData *pSimulationDat //============================================================================== -PyObject * SimulationSupportPythonWrapper::algebraic(SimulationData *pSimulationData) const -{ - return DataStore::DataStorePythonWrapper::dataStoreValuesDict(pSimulationData->algebraicValues(), - &(pSimulationData->simulationDataUpdatedFunction())); -} - -//============================================================================== - PyObject * SimulationSupportPythonWrapper::constants(SimulationData *pSimulationData) const { + // Return our constants values + return DataStore::DataStorePythonWrapper::dataStoreValuesDict(pSimulationData->constantsValues(), &(pSimulationData->simulationDataUpdatedFunction())); } @@ -512,6 +491,8 @@ PyObject * SimulationSupportPythonWrapper::constants(SimulationData *pSimulation PyObject * SimulationSupportPythonWrapper::rates(SimulationData *pSimulationData) const { + // Return our rates values + return DataStore::DataStorePythonWrapper::dataStoreValuesDict(pSimulationData->ratesValues(), &(pSimulationData->simulationDataUpdatedFunction())); } @@ -520,28 +501,37 @@ PyObject * SimulationSupportPythonWrapper::rates(SimulationData *pSimulationData PyObject * SimulationSupportPythonWrapper::states(SimulationData *pSimulationData) const { + // Return our states values + return DataStore::DataStorePythonWrapper::dataStoreValuesDict(pSimulationData->statesValues(), &(pSimulationData->simulationDataUpdatedFunction())); } //============================================================================== -DataStore::DataStoreVariable * SimulationSupportPythonWrapper::points(SimulationResults *pSimulationResults) const +PyObject * SimulationSupportPythonWrapper::algebraic(SimulationData *pSimulationData) const { - return pSimulationResults->pointsVariable(); + // Return our algebraic values + + return DataStore::DataStorePythonWrapper::dataStoreValuesDict(pSimulationData->algebraicValues(), + &(pSimulationData->simulationDataUpdatedFunction())); } //============================================================================== -PyObject * SimulationSupportPythonWrapper::algebraic(SimulationResults *pSimulationResults) const +DataStore::DataStoreVariable * SimulationSupportPythonWrapper::points(SimulationResults *pSimulationResults) const { - return DataStore::DataStorePythonWrapper::dataStoreVariablesDict(pSimulationResults->algebraicVariables()); + // Return our points variable + + return pSimulationResults->pointsVariable(); } //============================================================================== PyObject * SimulationSupportPythonWrapper::constants(SimulationResults *pSimulationResults) const { + // Return our constants variables + return DataStore::DataStorePythonWrapper::dataStoreVariablesDict(pSimulationResults->constantsVariables()); } @@ -549,6 +539,8 @@ PyObject * SimulationSupportPythonWrapper::constants(SimulationResults *pSimulat PyObject * SimulationSupportPythonWrapper::rates(SimulationResults *pSimulationResults) const { + // Return our rates variables + return DataStore::DataStorePythonWrapper::dataStoreVariablesDict(pSimulationResults->ratesVariables()); } @@ -556,11 +548,22 @@ PyObject * SimulationSupportPythonWrapper::rates(SimulationResults *pSimulationR PyObject * SimulationSupportPythonWrapper::states(SimulationResults *pSimulationResults) const { + // Return our states variables + return DataStore::DataStorePythonWrapper::dataStoreVariablesDict(pSimulationResults->statesVariables()); } //============================================================================== +PyObject * SimulationSupportPythonWrapper::algebraic(SimulationResults *pSimulationResults) const +{ + // Return our algebraic variables + + return DataStore::DataStorePythonWrapper::dataStoreVariablesDict(pSimulationResults->algebraicVariables()); +} + +//============================================================================== + void SimulationSupportPythonWrapper::simulationError(const QString &pErrorMessage) { // Keep track of the given error message diff --git a/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.h b/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.h index 9f2475e47e..6654327e46 100644 --- a/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.h +++ b/src/plugins/support/SimulationSupport/src/simulationsupportpythonwrapper.h @@ -89,17 +89,17 @@ public slots: void setNlaSolver(OpenCOR::SimulationSupport::SimulationData *pSimulationData, const QString &pNlaSolverName); - PyObject * algebraic(OpenCOR::SimulationSupport::SimulationData *pSimulationData) const; PyObject * constants(OpenCOR::SimulationSupport::SimulationData *pSimulationData) const; PyObject * rates(OpenCOR::SimulationSupport::SimulationData *pSimulationData) const; PyObject * states(OpenCOR::SimulationSupport::SimulationData *pSimulationData) const; + PyObject * algebraic(OpenCOR::SimulationSupport::SimulationData *pSimulationData) const; OpenCOR::DataStore::DataStoreVariable * points(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; - PyObject * algebraic(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; PyObject * constants(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; PyObject * states(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; PyObject * rates(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; + PyObject * algebraic(OpenCOR::SimulationSupport::SimulationResults *pSimulationResults) const; private slots: void simulationError(const QString &pErrorMessage);