Example #1
0
void LevelCollection::setCurrentLevel(int level)
{
	if (currentLevel_ == levels_.size())
	{
		emit collectionCompleted();
		return;
	}
	disconnect(levels_.at(currentLevel_));
	currentLevel_ = level;
	connect(levels_.at(currentLevel_), &Level::levelCompleted, this, &LevelCollection::unlockNextLevel);
	connect(levels_.at(currentLevel_), &Level::levelCompleted, this, &LevelCollection::nextLevel);
	emit currentLevelChanged();
	levels_.at(currentLevel_)->undoStack()->reset();
	//Making sure next button's state is recalculated
	emit unlockedLevelChanged();
}
/* helper methods */
void ThermalCalibrationHelper::updateTemperature(float temp)
{
    int elapsed = m_startTime.secsTo(QTime::currentTime());
    int secondsSinceLastCheck = m_lastCheckpointTime.secsTo(QTime::currentTime());

    // temperature is low pass filtered
    m_temperature = m_temperature * 0.95f + temp * 0.05f;
    emit temperatureChanged(m_temperature);

    // temperature range
    if (m_temperature < m_minTemperature) {
        m_minTemperature = m_temperature;
    }
    if (m_temperature > m_maxTemperature) {
        m_maxTemperature = m_temperature;
    }
    if (!m_rangeReached && (range() >= TargetTempDelta)) {
        m_rangeReached = true;
        addInstructions(tr("Target temperature span has been acquired. Acquisition may be ended or, preferably, continued."));
    }
    emit temperatureRangeChanged(range());

    if (secondsSinceLastCheck > TimeBetweenCheckpoints) {
        // gradient is expressed in °C/min
        m_gradient = 60.0 * (m_temperature - m_lastCheckpointTemp) / (float)secondsSinceLastCheck;
        emit temperatureGradientChanged(gradient());

        qDebug() << "Temp Gradient " << gradient() << " Elapsed" << elapsed;
        m_debugStream << "INFO::Trace Temp Gradient " << gradient() << " Elapsed" << elapsed << endl;

        m_lastCheckpointTime = QTime::currentTime();
        m_lastCheckpointTemp = m_temperature;
    }
    // at least a checkpoint has been reached
    if (elapsed > TimeBetweenCheckpoints) {
        // .1 is a "very" small value in this case thats > 0
        if (m_initialGradient < .1 && m_gradient > .1) {
            m_initialGradient = m_gradient;
        }

        if (m_targetduration != 0) {
            int tmp = (100 * elapsed) / m_targetduration;
            setProgress(tmp);
        } else if ((m_gradient > .1) && ((m_initialGradient / 2.0f) > m_gradient)) {
            // make a rough estimation of the time needed
            m_targetduration = elapsed * 8;

            setProgressMax(100);

            QTime time = QTime(0, 0).addSecs(m_targetduration);
            QString timeString = time.toString(tr("m''s''''"));
            addInstructions(tr("Estimated acquisition duration is %1.").arg(timeString));

            QString str = QStringLiteral("INFO::Trace gradient : %1, elapsed : %2 initial gradient : %3, target : %4")
                          .arg(m_gradient).arg(elapsed).arg(m_initialGradient).arg(m_targetduration);
            qDebug() << str;
            m_debugStream << str << endl;
        }

        if ((m_gradient < TargetGradient) || m_forceStopAcquisition) {
            m_acquiring = false;
            emit collectionCompleted();
        }
    }
}