class SingleCellSimulationViewWidget : public Core::ViewWidget
{
Q_OBJECT
public:
...
private:
...
void updateResults(SingleCellSimulationViewSimulation *pSimulation,
const qulonglong &pSize,
const bool &pReplot = false);
void checkResults(SingleCellSimulationViewSimulation *pSimulation);
...
private Q_SLOTS:
...
void resetFileTabIcon();
void showHideParameterPlot
(const QString &pFileName,
CellMLSupport::CellmlFileRuntimeModelParameter *pParameter,
const bool &pShowParameterPlot);
void callCheckResults();
...
};
class SingleCellSimulationViewWidget : public Core::ViewWidget
{
Q_OBJECT
public:
...
private:
...
QMutex mSimulationMutex;
QMutex mTracesMutex;
void updateResults(SingleCellSimulationViewSimulation *pSimulation,
const qulonglong &pSize,
const bool &pReplot = false);
void checkResults(SingleCellSimulationViewSimulation *pSimulation);
...
private Q_SLOTS:
...
void resetFileTabIcon();
void showHideParameterPlot(const QString &pFileName,
CellMLSupport::CellmlFileRuntimeModelParameter *pParameter,
const bool &pShowParameterPlot);
void callCheckResults();
...
};
To copy to clipboard, switch view to plain text mode
void SingleCellSimulationViewWidget::resetFileTabIcon()
{
SingleCellSimulationViewSimulation *simulation;
{
simulation = mStoppedSimulations.first();
mStoppedSimulations.removeFirst();
}
emit updateFileTabIcon
(simulation
->fileName
(),
QIcon());
}
void SingleCellSimulationViewWidget
::showHideParameterPlot(const QString &pFileName,
CellMLSupport::CellmlFileRuntimeModelParameter *pParameter,
const bool &pShowParameterPlot)
{
QString key
= parameterKey
(pFileName, pParameter
);
if (trace && !pShowParameterPlot) {
mActiveGraphPanel->plot()->removeTrace(trace);
mTraces.remove(key);
} else if (!trace && pShowParameterPlot) {
SingleCellSimulationViewSimulationResults *results = mSimulation->results();
double *yData;
...
QwtPlotCurve *trace
= mActiveGraphPanel
->plot
()->addTrace
(results
->points
(), yData, results
->size
());
mTraces.insert(key, trace);
}
}
void SingleCellSimulationViewWidget::updateResults(SingleCellSimulationViewSimulation *pSimulation,
const qulonglong &pSize,
const bool &pReplot)
{
SingleCellSimulationViewSimulation *simulation = pSimulation?pSimulation:mSimulation;
if (simulation == mSimulation) {
QMap<QString,
QwtPlotCurve *>
::const_iterator iter
= mTraces.
constBegin();
while (iter != mTraces.constEnd()) {
...
if (!fileName.compare(mSimulation->fileName())) {
double *yData;
...
qulonglong oldSize = trace->dataSize();
trace->setRawSamples(simulation->results()->points(), yData, pSize);
if (!pReplot && (pSize > 1))
qobject_cast<SingleCellSimulationViewGraphPanelPlotWidget *>(trace->plot())->drawTraceSegment(trace, oldSize?oldSize-1:0, pSize-1);
}
++iter;
}
...
} else {
...
}
}
void SingleCellSimulationViewWidget::checkResults(SingleCellSimulationViewSimulation *pSimulation)
{
qulonglong simulationResultsSize = pSimulation->results()->size();
if (simulationResultsSize != mOldSimulationResultsSizes.value(pSimulation)) {
mOldSimulationResultsSizes.insert(pSimulation, simulationResultsSize);
updateResults(pSimulation, simulationResultsSize);
}
if (pSimulation->isRunning()) {
mCheckResultsSimulations << pSimulation;
QTimer::singleShot(0,
this,
SLOT(callCheckResults
()));
}
}
void SingleCellSimulationViewWidget::callCheckResults()
{
SingleCellSimulationViewSimulation *simulation;
{
simulation = mCheckResultsSimulations.first();
mCheckResultsSimulations.removeFirst();
}
checkResults(simulation);
}
void SingleCellSimulationViewWidget::resetFileTabIcon()
{
SingleCellSimulationViewSimulation *simulation;
{
QMutexLocker mutexLocker(&mSimulationMutex);
simulation = mStoppedSimulations.first();
mStoppedSimulations.removeFirst();
}
emit updateFileTabIcon(simulation->fileName(), QIcon());
}
void SingleCellSimulationViewWidget::showHideParameterPlot(const QString &pFileName,
CellMLSupport::CellmlFileRuntimeModelParameter *pParameter,
const bool &pShowParameterPlot)
{
QString key = parameterKey(pFileName, pParameter);
QMutexLocker mutexLocker(&mTracesMutex);
QwtPlotCurve *trace = mTraces.value(key);
if (trace && !pShowParameterPlot) {
mActiveGraphPanel->plot()->removeTrace(trace);
mTraces.remove(key);
} else if (!trace && pShowParameterPlot) {
SingleCellSimulationViewSimulationResults *results = mSimulation->results();
double *yData;
...
QwtPlotCurve *trace = mActiveGraphPanel->plot()->addTrace(results->points(), yData, results->size());
mTraces.insert(key, trace);
}
}
void SingleCellSimulationViewWidget::updateResults(SingleCellSimulationViewSimulation *pSimulation,
const qulonglong &pSize,
const bool &pReplot)
{
SingleCellSimulationViewSimulation *simulation = pSimulation?pSimulation:mSimulation;
if (simulation == mSimulation) {
QMutexLocker mutexLocker(&mTracesMutex);
QMap<QString, QwtPlotCurve *>::const_iterator iter = mTraces.constBegin();
while (iter != mTraces.constEnd()) {
QString fileName = iter.key();
...
QwtPlotCurve *trace = iter.value();
if (!fileName.compare(mSimulation->fileName())) {
double *yData;
...
qulonglong oldSize = trace->dataSize();
trace->setRawSamples(simulation->results()->points(), yData, pSize);
if (!pReplot && (pSize > 1))
qobject_cast<SingleCellSimulationViewGraphPanelPlotWidget *>(trace->plot())->drawTraceSegment(trace, oldSize?oldSize-1:0, pSize-1);
}
++iter;
}
...
} else {
...
}
}
void SingleCellSimulationViewWidget::checkResults(SingleCellSimulationViewSimulation *pSimulation)
{
qulonglong simulationResultsSize = pSimulation->results()->size();
if (simulationResultsSize != mOldSimulationResultsSizes.value(pSimulation)) {
mOldSimulationResultsSizes.insert(pSimulation, simulationResultsSize);
updateResults(pSimulation, simulationResultsSize);
}
if (pSimulation->isRunning()) {
mCheckResultsSimulations << pSimulation;
QTimer::singleShot(0, this, SLOT(callCheckResults()));
}
}
void SingleCellSimulationViewWidget::callCheckResults()
{
SingleCellSimulationViewSimulation *simulation;
{
QMutexLocker mutexLocker(&mSimulationMutex);
simulation = mCheckResultsSimulations.first();
mCheckResultsSimulations.removeFirst();
}
checkResults(simulation);
}
To copy to clipboard, switch view to plain text mode
Bookmarks