#include "multimanualcook.h" #include "oven.h" MultiManualCook::MultiManualCook(QObject *parent) : MultiCook(parent) { mode_ = Define::InvalidMode; temp = 30; hum = 0; time = 0; modifiedTime = -1; state = Idle; checkTimer.setInterval(100); connect(&checkTimer, SIGNAL(timeout()), SLOT(check())); } QString MultiManualCook::name() { // QString n("%1, %2, %3"); // QString m; // switch (mode_) // { // case Define::InvalidMode: // m = "Invalid"; // break; // case Define::SteamMode: // m = "Steam"; // break; // case Define::CombiMode: // m = "Combi"; // break; // case Define::DryMode: // m = "Dry"; // break; // } // return n.arg(m).arg(temp).arg(hum); return tr("수동 요리"); } Define::Mode MultiManualCook::mode() { return mode_; } int MultiManualCook::temperature() { return temp; } int MultiManualCook::humidity() { return hum; } int MultiManualCook::remainingTime() { if (modifiedTime != -1) return modifiedTime; switch (state) { case Idle: return time; case Running: return time -= elapsed.restart(); case Paused: return time; case Finished: return 0; } return 0; } void MultiManualCook::increaseTime() { if (state == Finished) return; if (modifiedTime == -1) modifiedTime = remainingTime() + 60 * 1000; else modifiedTime += 60 * 1000; } void MultiManualCook::decreaseTime() { if (state == Finished) return; if (modifiedTime == -1) modifiedTime = remainingTime() - 60 * 1000; else modifiedTime -= 60 * 1000; if (modifiedTime < 60 * 1000) modifiedTime = 60 * 1000; } void MultiManualCook::setTime() { if (state == Finished) return; if (modifiedTime == -1) return; time = modifiedTime; elapsed.start(); modifiedTime = -1; qDebug() << QTime::currentTime() << "setTime to" << time; } void MultiManualCook::start() { state = Running; elapsed.start(); decreasedTime.start(); checkTimer.start(); } void MultiManualCook::stop() { state = Finished; checkTimer.stop(); } void MultiManualCook::pause() { if (state != Running) return; state = Paused; time -= elapsed.elapsed(); decreasedTime.pause(); if (increasedTime.isValid()) increasedTime.pause(); checkTimer.stop(); } void MultiManualCook::resume() { if (state != Paused) return; state = Running; time += 30 * 1000; elapsed.start(); decreasedTime.resume(); if (increasedTime.isValid()) increasedTime.resume(); checkTimer.start(); } MultiCook *MultiManualCook::clone(QObject *parent) { MultiManualCook *c = new MultiManualCook(parent); c->mode_ = mode_; c->temp = temp; c->hum = hum; c->time = time; return (MultiCook *) c; } bool MultiManualCook::equals(MultiCook *other) { MultiManualCook *o = qobject_cast(other); if (o == Q_NULLPTR) return false; if (o->mode_ != mode_) return false; if (o->temp != temp) return false; if (o->hum != hum) return false; if (o->time != time) return false; return true; } void MultiManualCook::setMode(Define::Mode mode) { mode_ = mode; } void MultiManualCook::setTemperature(int temperature) { temp = temperature; checkTimer.start(); } void MultiManualCook::setHumidity(int humidity) { hum = humidity; } void MultiManualCook::setTime(int secs) { time = secs * 1000; } void MultiManualCook::check() { if (state != Running) return; int dt = Oven::getInstance()->currentTemp() - temp; // checking under temperature if ((remainingTime() < 10 * 60 * 1000 && increasedTime.isNull()) || (increasedTime.isValid() && increasedTime.elapsed() > 3 * 60 * 1000)) { increasedTime.start(); if (dt < -20) { int t = remainingTime(); time = remainingTime() * 1.1; qDebug() << QTime::currentTime() << "Increase from" << t << "to" << remainingTime(); } } // checking over temperature if (decreasedTime.elapsed() > 2 * 60 * 1000) { decreasedTime.start(); if (dt > 20) { int t = remainingTime(); time = remainingTime() * 0.8; qDebug() << QTime::currentTime() << "Reduce from" << t << "to" << remainingTime(); } } if (remainingTime() <= 0) stop(); }