Skip to content

Commit 322396c

Browse files
committed
- Fixed some re-simulate scenarios.
- Separated the SimulationOptions from SimulationDialog. git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@23599 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 55da51e commit 322396c

File tree

7 files changed

+378
-335
lines changed

7 files changed

+378
-335
lines changed

OMEdit/OMEditGUI/OMEditGUI.pro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ HEADERS += Util/backtrace.h \
144144
Component/ComponentProperties.h \
145145
Component/Transformation.h \
146146
Modeling/DocumentationWidget.h \
147+
Simulation/SimulationOptions.h \
147148
Simulation/SimulationDialog.h \
148149
Simulation/SimulationOutputWidget.h \
149150
Simulation/SimulationProcessThread.h \

OMEdit/OMEditGUI/Plotting/VariablesWidget.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
#include "PlotWindow.h"
4545

4646
class MainWindow;
47-
class SimulationOptions;
4847
class VariablesTreeItem
4948
{
5049
public:

OMEdit/OMEditGUI/Simulation/SimulationDialog.cpp

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -938,14 +938,33 @@ SimulationOptions SimulationDialog::createSimulationOptions()
938938
*/
939939
void SimulationDialog::createAndShowSimulationOutputWidget(SimulationOptions simulationOptions)
940940
{
941-
SimulationOutputWidget *pSimulationOutputWidget = new SimulationOutputWidget(simulationOptions, mpMainWindow);
942-
mSimulationOutputWidgetsList.append(pSimulationOutputWidget);
943-
ArchivedSimulationItem *pArchivedSimulationItem = new ArchivedSimulationItem(simulationOptions.getClassName(), pSimulationOutputWidget);
944-
mpArchivedSimulationsListWidget->addItem(pArchivedSimulationItem);
945-
int xPos = QApplication::desktop()->availableGeometry().width() - pSimulationOutputWidget->frameSize().width() - 20;
946-
int yPos = QApplication::desktop()->availableGeometry().height() - pSimulationOutputWidget->frameSize().height() - 20;
947-
pSimulationOutputWidget->setGeometry(xPos, yPos, pSimulationOutputWidget->width(), pSimulationOutputWidget->height());
948-
pSimulationOutputWidget->show();
941+
/*
942+
If resimulation and show algorithmic debugger is checked then show algorithmic debugger.
943+
If show transformational debugger is checked then show transformational debugger.
944+
Otherwise run the normal resimulation.
945+
*/
946+
if (simulationOptions.isReSimulate() && simulationOptions.getLaunchAlgorithmicDebugger()) {
947+
if (mpMainWindow->getOptionsDialog()->getDebuggerPage()->getAlwaysShowTransformationsCheckBox()->isChecked() ||
948+
simulationOptions.getLaunchTransformationalDebugger() || simulationOptions.getProfiling() != "none") {
949+
mpMainWindow->showTransformationsWidget(simulationOptions.getWorkingDirectory() + "/" + simulationOptions.getOutputFileName() + "_info.json");
950+
}
951+
showAlgorithmicDebugger(simulationOptions);
952+
} else {
953+
if (simulationOptions.isReSimulate()) {
954+
if (mpMainWindow->getOptionsDialog()->getDebuggerPage()->getAlwaysShowTransformationsCheckBox()->isChecked() ||
955+
simulationOptions.getLaunchTransformationalDebugger() || simulationOptions.getProfiling() != "none") {
956+
mpMainWindow->showTransformationsWidget(simulationOptions.getWorkingDirectory() + "/" + simulationOptions.getOutputFileName() + "_info.json");
957+
}
958+
}
959+
SimulationOutputWidget *pSimulationOutputWidget = new SimulationOutputWidget(simulationOptions, mpMainWindow);
960+
mSimulationOutputWidgetsList.append(pSimulationOutputWidget);
961+
ArchivedSimulationItem *pArchivedSimulationItem = new ArchivedSimulationItem(simulationOptions.getClassName(), pSimulationOutputWidget);
962+
mpArchivedSimulationsListWidget->addItem(pArchivedSimulationItem);
963+
int xPos = QApplication::desktop()->availableGeometry().width() - pSimulationOutputWidget->frameSize().width() - 20;
964+
int yPos = QApplication::desktop()->availableGeometry().height() - pSimulationOutputWidget->frameSize().height() - 20;
965+
pSimulationOutputWidget->setGeometry(xPos, yPos, pSimulationOutputWidget->width(), pSimulationOutputWidget->height());
966+
pSimulationOutputWidget->show();
967+
}
949968
}
950969

951970
/*!
@@ -986,6 +1005,52 @@ void SimulationDialog::reSimulate(SimulationOptions simulationOptions)
9861005
createAndShowSimulationOutputWidget(simulationOptions);
9871006
}
9881007

1008+
void SimulationDialog::showAlgorithmicDebugger(SimulationOptions simulationOptions)
1009+
{
1010+
// if not build only and launch the algorithmic debugger is true
1011+
if (!simulationOptions.getBuildOnly() && simulationOptions.getLaunchAlgorithmicDebugger()) {
1012+
QString fileName = simulationOptions.getOutputFileName();
1013+
// start the executable
1014+
fileName = QString(simulationOptions.getWorkingDirectory()).append("/").append(fileName);
1015+
fileName = fileName.replace("//", "/");
1016+
// run the simulation executable to create the result file
1017+
#ifdef WIN32
1018+
fileName = fileName.append(".exe");
1019+
#endif
1020+
// start the debugger
1021+
if (mpMainWindow->getDebuggerMainWindow()->getGDBAdapter()->isGDBRunning()) {
1022+
QMessageBox::information(this, QString(Helper::applicationName).append(" - ").append(Helper::information),
1023+
GUIMessages::getMessage(GUIMessages::DEBUGGER_ALREADY_RUNNING), Helper::ok);
1024+
} else {
1025+
QString GDBPath = mpMainWindow->getOptionsDialog()->getDebuggerPage()->getGDBPath();
1026+
GDBAdapter *pGDBAdapter = mpMainWindow->getDebuggerMainWindow()->getGDBAdapter();
1027+
pGDBAdapter->launch(fileName, simulationOptions.getWorkingDirectory(), simulationOptions.getSimulationFlags(), GDBPath, simulationOptions);
1028+
mpMainWindow->showAlgorithmicDebugger();
1029+
}
1030+
}
1031+
}
1032+
1033+
void SimulationDialog::simulationProcessFinished(SimulationOptions simulationOptions, QDateTime resultFileLastModifiedDateTime)
1034+
{
1035+
QString workingDirectory = simulationOptions.getWorkingDirectory();
1036+
// read the result file
1037+
QFileInfo resultFileInfo(QString(workingDirectory).append("/").append(simulationOptions.getResultFileName()));
1038+
QRegExp regExp("\\b(mat|plt|csv)\\b");
1039+
if (regExp.indexIn(simulationOptions.getResultFileName()) != -1 &&
1040+
resultFileInfo.exists() && resultFileLastModifiedDateTime <= resultFileInfo.lastModified()) {
1041+
VariablesWidget *pVariablesWidget = mpMainWindow->getVariablesWidget();
1042+
OMCProxy *pOMCProxy = mpMainWindow->getOMCProxy();
1043+
QStringList list = pOMCProxy->readSimulationResultVars(simulationOptions.getResultFileName());
1044+
// close the simulation result file.
1045+
pOMCProxy->closeSimulationResultFile();
1046+
if (list.size() > 0) {
1047+
mpMainWindow->getPerspectiveTabBar()->setCurrentIndex(2);
1048+
pVariablesWidget->insertVariablesItemsToTree(simulationOptions.getResultFileName(), workingDirectory, list, simulationOptions);
1049+
mpMainWindow->getVariablesDockWidget()->show();
1050+
}
1051+
}
1052+
}
1053+
9891054
/*!
9901055
Slot activated when mpMethodComboBox currentIndexChanged signal is raised.\n
9911056
Enables/disables the Dassl options group box

OMEdit/OMEditGUI/Simulation/SimulationDialog.h

Lines changed: 3 additions & 258 deletions
Original file line numberDiff line numberDiff line change
@@ -40,267 +40,10 @@
4040
#define SIMULATIONDIALOG_H
4141

4242
#include "MainWindow.h"
43+
#include "SimulationOptions.h"
4344

4445
class SimulationOutputWidget;
4546

46-
class SimulationOptions
47-
{
48-
public:
49-
SimulationOptions()
50-
{
51-
setClassName("");
52-
setStartTime("");
53-
setStopTime("");
54-
setMethod("");
55-
setTolerance("");
56-
setDasslJacobian("");
57-
setDasslRootFinding(true);
58-
setDasslRestart(true);
59-
setDasslInitialStepSize("");
60-
setDasslMaxStepSize("");
61-
setDasslMaxIntegration(5);
62-
setCflags("");
63-
setNumberOfProcessors(1);
64-
setBuildOnly(false);
65-
setLaunchTransformationalDebugger(false);
66-
setLaunchAlgorithmicDebugger(false);
67-
setNumberofIntervals(500);
68-
setOutputFormat("mat");
69-
setFileNamePrefix("");
70-
setVariableFilter("");
71-
setProtectedVariables(false);
72-
setEquidistantTimeGrid(true);
73-
setStoreVariablesAtEvents(true);
74-
setShowGeneratedFiles(false);
75-
setModelSetupFile("");
76-
setInitializationMethod("");
77-
setOptimizationMethod("");
78-
setEquationSystemInitializationFile("");
79-
setEquationSystemInitializationTime("");
80-
setClock("");
81-
setLinearSolver("");
82-
setNonLinearSolver("");
83-
setLinearizationTime("");
84-
setOutputVariables("");
85-
setProfiling("none");
86-
setCPUTime(false);
87-
setEnableAllWarnings(true);
88-
setLogDasslSolver(false);
89-
setLogDebug(false);
90-
setLogDynamicStateSelection(false);
91-
setLogJacobianDynamicStateSelection(false);
92-
setLogEvents(false);
93-
setLogVerboseEvents(false);
94-
setLogInitialization(false);
95-
setLogJacobian(false);
96-
setLogNonLinearSystems(false);
97-
setLogVerboseNonLinearSystems(false);
98-
setLogJacobianNonLinearSystems(false);
99-
setLogResidualsInitialization(false);
100-
setLogSimulation(false);
101-
setLogSolver(false);
102-
setLogFinalSolutionOfInitialization(false);
103-
setLogStats(true);
104-
setLogUtil(false);
105-
setLogZeroCrossings(false);
106-
setAdditionalSimulationFlags("");
107-
setIsValid(false);
108-
setReSimulate(false);
109-
mWorkingDirectory = "";
110-
}
111-
112-
operator QVariant() const
113-
{
114-
return QVariant::fromValue(*this);
115-
}
116-
117-
void setClassName(QString className) {mClassName = className;}
118-
QString getClassName() {return mClassName;}
119-
void setStartTime(QString startTime) {mStartTime = startTime;}
120-
QString getStartTime() {return mStartTime;}
121-
void setStopTime(QString stopTime) {mStopTime = stopTime;}
122-
QString getStopTime() {return mStopTime;}
123-
void setMethod(QString method) {mMethod = method;}
124-
QString getMethod() {return mMethod;}
125-
void setTolerance(QString tolerance) {mTolerance = tolerance;}
126-
QString getTolerance() {return mTolerance;}
127-
void setDasslJacobian(QString dasslJacobian) {mDasslJacobian = dasslJacobian;}
128-
QString getDasslJacobian() {return mDasslJacobian;}
129-
void setDasslRootFinding(bool dasslRootFinding) {mDasslRootFinding = dasslRootFinding;}
130-
bool getDasslRootFinding() {return mDasslRootFinding;}
131-
void setDasslRestart(bool dasslRestart) {mDasslRestart = dasslRestart;}
132-
bool getDasslRestart() {return mDasslRestart;}
133-
void setDasslInitialStepSize(QString dasslInitialStepSize) {mDasslInitialStepSize = dasslInitialStepSize;}
134-
QString getDasslInitialStepSize() {return mDasslInitialStepSize;}
135-
void setDasslMaxStepSize(QString dasslMaxStepSize) {mDasslMaxStepSize = dasslMaxStepSize;}
136-
QString getDasslMaxStepSize() {return mDasslMaxStepSize;}
137-
void setDasslMaxIntegration(int dasslMaxIntegration) {mDasslMaxIntegration = dasslMaxIntegration;}
138-
int getDasslMaxIntegration() {return mDasslMaxIntegration;}
139-
void setCflags(QString cflags) {mCflags = cflags;}
140-
QString getCflags() {return mCflags;}
141-
void setNumberOfProcessors(int numberOfProcessors) {mNumberOfProcessors = numberOfProcessors;}
142-
int getNumberOfProcessors() {return mNumberOfProcessors;}
143-
void setBuildOnly(bool buildOnly) {mBuildOnly = buildOnly;}
144-
bool getBuildOnly() {return mBuildOnly;}
145-
void setLaunchTransformationalDebugger(bool launchTransformationalDebugger) {mLaunchTransformationalDebugger = launchTransformationalDebugger;}
146-
bool getLaunchTransformationalDebugger() {return mLaunchTransformationalDebugger;}
147-
void setLaunchAlgorithmicDebugger(bool launchAlgorithmicDebugger) {mLaunchAlgorithmicDebugger = launchAlgorithmicDebugger;}
148-
bool getLaunchAlgorithmicDebugger() {return mLaunchAlgorithmicDebugger;}
149-
void setNumberofIntervals(int numberofIntervals) {mNumberofIntervals = numberofIntervals;}
150-
void setOutputFormat(QString outputFormat) {mOutputFormat = outputFormat;}
151-
QString getOutputFormat() {return mOutputFormat;}
152-
void setFileNamePrefix(QString fileNamePrefix) {mFileNamePrefix = fileNamePrefix;}
153-
QString getFileNamePrefix() {return mFileNamePrefix;}
154-
QString getOutputFileName() const {return mFileNamePrefix.isEmpty() ? mClassName : mFileNamePrefix;}
155-
QString getResultFileName() {return getOutputFileName() + "_res." + mOutputFormat;}
156-
void setVariableFilter(QString variableFilter) {mVariableFilter = variableFilter;}
157-
QString getVariableFilter() {return mVariableFilter.isEmpty() ? ".*" : mVariableFilter;}
158-
void setProtectedVariables(bool protectedVariables) {mProtectedVariables = protectedVariables;}
159-
bool getProtectedVariables() {return mProtectedVariables;}
160-
void setEquidistantTimeGrid(bool equidistantTimeGrid) {mEquidistantTimeGrid = equidistantTimeGrid;}
161-
bool getEquidistantTimeGrid() {return mEquidistantTimeGrid;}
162-
void setStoreVariablesAtEvents(bool storeVariablesAtEvents) {mStoreVariablesAtEvents = storeVariablesAtEvents;}
163-
bool getStoreVariablesAtEvents() {return mStoreVariablesAtEvents;}
164-
void setShowGeneratedFiles(bool showGeneratedFiles) {mShowGeneratedFiles = showGeneratedFiles;}
165-
bool getShowGeneratedFiles() {return mShowGeneratedFiles;}
166-
void setModelSetupFile(QString modelSetupFile) {mModelSetupFile = modelSetupFile;}
167-
QString getModelSetupFile() {return mModelSetupFile;}
168-
void setInitializationMethod(QString initializationMethod) {mInitializationMethod = initializationMethod;}
169-
QString getInitializationMethod() {return mInitializationMethod;}
170-
void setOptimizationMethod(QString optimizationMethod) {mOptimizationMethod = optimizationMethod;}
171-
QString getOptimizationMethod() {return mOptimizationMethod;}
172-
void setEquationSystemInitializationFile(QString equationSystemInitializationFile) {mEquationSystemInitializationFile = equationSystemInitializationFile;}
173-
QString getEquationSystemInitializationFile() {return mEquationSystemInitializationFile;}
174-
void setEquationSystemInitializationTime(QString equationSystemInitializationTime) {mEquationSystemInitializationTime = equationSystemInitializationTime;}
175-
QString getEquationSystemInitializationTime() {return mEquationSystemInitializationTime;}
176-
void setClock(QString clock) {mClock = clock;}
177-
QString getClock() {return mClock;}
178-
void setLinearSolver(QString linearSolver) {mLinearSolver = linearSolver;}
179-
QString getLinearSolver() {return mLinearSolver;}
180-
void setNonLinearSolver(QString nonLinearSolver) {mNonLinearSolver = nonLinearSolver;}
181-
QString getNonLinearSolver() {return mNonLinearSolver;}
182-
void setLinearizationTime(QString linearizationTime) {mLinearizationTime = linearizationTime;}
183-
QString getLinearizationTime() {return mLinearizationTime;}
184-
void setOutputVariables(QString outputVariables) {mOutputVariables = outputVariables;}
185-
QString getOutputVariables() {return mOutputVariables;}
186-
void setProfiling(QString profiling) {mProfiling = profiling;}
187-
QString getProfiling() {return mProfiling;}
188-
void setCPUTime(bool cpuTime) {mCPUTime = cpuTime;}
189-
bool getCPUTime() {return mCPUTime;}
190-
void setEnableAllWarnings(bool enableAllWarnings) {mEnableAllWarnings = enableAllWarnings;}
191-
bool getEnableAllWarnings() {return mEnableAllWarnings;}
192-
void setLogDasslSolver(bool logDasslSolver) {mLogDasslSolver = logDasslSolver;}
193-
bool getLogDasslSolver() {return mLogDasslSolver;}
194-
void setLogDebug(bool logDebug) {mLogDebug = logDebug;}
195-
bool getLogDebug() {return mLogDebug;}
196-
void setLogDynamicStateSelection(bool logDynamicStateSelection) {mLogDynamicStateSelection = logDynamicStateSelection;}
197-
bool getLogDynamicStateSelection() {return mLogDynamicStateSelection;}
198-
void setLogJacobianDynamicStateSelection(bool logJacobianDynamicStateSelection) {mLogJacobianDynamicStateSelection = logJacobianDynamicStateSelection;}
199-
bool getLogJacobianDynamicStateSelection() {return mLogJacobianDynamicStateSelection;}
200-
void setLogEvents(bool logEvents) {mLogEvents = logEvents;}
201-
bool getLogEvents() {return mLogEvents;}
202-
void setLogVerboseEvents(bool logVerboseEvents) {mLogVerboseEvents = logVerboseEvents;}
203-
bool getLogVerboseEvents() {return mLogVerboseEvents;}
204-
void setLogInitialization(bool logInitialization) {mLogInitialization = logInitialization;}
205-
bool getLogInitialization() {return mLogInitialization;}
206-
void setLogJacobian(bool logJacobian) {mLogJacobian = logJacobian;}
207-
bool getLogJacobian() {return mLogJacobian;}
208-
void setLogNonLinearSystems(bool logNonLinearSystems) {mLogNonLinearSystems = logNonLinearSystems;}
209-
bool getLogNonLinearSystems() {return mLogNonLinearSystems;}
210-
void setLogVerboseNonLinearSystems(bool logVerboseNonLinearSystems) {mLogVerboseNonLinearSystems = logVerboseNonLinearSystems;}
211-
bool getLogVerboseNonLinearSystems() {return mLogVerboseNonLinearSystems;}
212-
void setLogJacobianNonLinearSystems(bool logJacobianNonLinearSystems) {mLogJacobianNonLinearSystems = logJacobianNonLinearSystems;}
213-
bool getLogJacobianNonLinearSystems() {return mLogJacobianNonLinearSystems;}
214-
void setLogResidualsInitialization(bool logResidualsInitialization) {mLogResidualsInitialization = logResidualsInitialization;}
215-
bool getLogResidualsInitialization() {return mLogResidualsInitialization;}
216-
void setLogSimulation(bool logSimulation) {mLogSimulation = logSimulation;}
217-
bool getLogSimulation() {return mLogSimulation;}
218-
void setLogSolver(bool logSolver) {mLogSolver = logSolver;}
219-
bool getLogSolver() {return mLogSolver;}
220-
void setLogFinalSolutionOfInitialization(bool logFinalSolutionOfInitialization) {mLogFinalSolutionOfInitialization = logFinalSolutionOfInitialization;}
221-
bool getLogFinalSolutionOfInitialization() {return mLogFinalSolutionOfInitialization;}
222-
void setLogStats(bool logStats) {mLogStats = logStats;}
223-
bool getLogStats() {return mLogStats;}
224-
void setLogUtil(bool logUtil) {mLogUtil = logUtil;}
225-
bool getLogUtil() {return mLogUtil;}
226-
void setLogZeroCrossings(bool logZeroCrossings) {mLogZeroCrossings = logZeroCrossings;}
227-
bool getLogZeroCrossings() {return mLogZeroCrossings;}
228-
void setAdditionalSimulationFlags(QString additionalSimulationFlags) {mAdditionalSimulationFlags = additionalSimulationFlags;}
229-
QString getAdditionalSimulationFlags() {return mAdditionalSimulationFlags;}
230-
231-
void setSimulationFlags(QStringList simulationFlags) {mSimulationFlags = simulationFlags;}
232-
QStringList getSimulationFlags() {return mSimulationFlags;}
233-
void setIsValid(bool isValid) {mValid = isValid;}
234-
bool isValid() {return mValid;}
235-
void setReSimulate(bool reSimulate) {mReSimulate = reSimulate;}
236-
bool isReSimulate() {return mReSimulate;}
237-
void setWorkingDirectory(QString workingDirectory) {mWorkingDirectory = workingDirectory;}
238-
QString getWorkingDirectory() const {return mWorkingDirectory;}
239-
private:
240-
QString mClassName;
241-
QString mStartTime;
242-
QString mStopTime;
243-
QString mMethod;
244-
QString mTolerance;
245-
QString mDasslJacobian;
246-
bool mDasslRootFinding;
247-
bool mDasslRestart;
248-
QString mDasslInitialStepSize;
249-
QString mDasslMaxStepSize;
250-
int mDasslMaxIntegration;
251-
QString mCflags;
252-
int mNumberOfProcessors;
253-
bool mBuildOnly;
254-
bool mLaunchTransformationalDebugger;
255-
bool mLaunchAlgorithmicDebugger;
256-
int mNumberofIntervals;
257-
QString mOutputFormat;
258-
QString mFileNamePrefix;
259-
QString mVariableFilter;
260-
bool mProtectedVariables;
261-
bool mEquidistantTimeGrid;
262-
bool mStoreVariablesAtEvents;
263-
bool mShowGeneratedFiles;
264-
QString mModelSetupFile;
265-
QString mInitializationMethod;
266-
QString mOptimizationMethod;
267-
QString mEquationSystemInitializationFile;
268-
QString mEquationSystemInitializationTime;
269-
QString mClock;
270-
QString mLinearSolver;
271-
QString mNonLinearSolver;
272-
QString mLinearizationTime;
273-
QString mOutputVariables;
274-
QString mProfiling;
275-
bool mCPUTime;
276-
bool mEnableAllWarnings;
277-
bool mLogDasslSolver;
278-
bool mLogDebug;
279-
bool mLogDynamicStateSelection;
280-
bool mLogJacobianDynamicStateSelection;
281-
bool mLogEvents;
282-
bool mLogVerboseEvents;
283-
bool mLogInitialization;
284-
bool mLogJacobian;
285-
bool mLogNonLinearSystems;
286-
bool mLogVerboseNonLinearSystems;
287-
bool mLogJacobianNonLinearSystems;
288-
bool mLogResidualsInitialization;
289-
bool mLogSimulation;
290-
bool mLogSolver;
291-
bool mLogFinalSolutionOfInitialization;
292-
bool mLogStats;
293-
bool mLogUtil;
294-
bool mLogZeroCrossings;
295-
QString mAdditionalSimulationFlags;
296-
297-
QStringList mSimulationFlags;
298-
bool mValid;
299-
bool mReSimulate;
300-
QString mWorkingDirectory;
301-
};
302-
Q_DECLARE_METATYPE(SimulationOptions)
303-
30447
class ArchivedSimulationItem : public QListWidgetItem
30548
{
30649
public:
@@ -444,6 +187,8 @@ class SimulationDialog : public QDialog
444187
void saveSimulationOptions();
445188
public:
446189
void reSimulate(SimulationOptions simulationOptions);
190+
void showAlgorithmicDebugger(SimulationOptions simulationOptions);
191+
void simulationProcessFinished(SimulationOptions simulationOptions, QDateTime resultFileLastModifiedDateTime);
447192
public slots:
448193
void enableDasslOptions(QString method);
449194
void showIntegrationHelp();

0 commit comments

Comments
 (0)