bool IntensityGenerator::createSequenceChaser(bool forward) { // Create a sequence chaser Chaser* chaser = new Chaser(m_doc); if (forward == true) { chaser->setName("Intensity - Sequence Forward"); chaser->setDirection(Function::Forward); } else { chaser->setName("Intensity - Sequence Backward"); chaser->setDirection(Function::Backward); } if (m_doc->addFunction(chaser) == false) { // Abort if doc won't accept the chaser delete chaser; return false; } else { for (int i = 0; i < m_sequence.size(); i++) chaser->addStep(m_sequence[i]->id()); return true; } }
void Chaser_Test::tap() { Doc* doc = new Doc(this, m_cache); Fixture* fxi = new Fixture(doc); fxi->setAddress(0); fxi->setUniverse(0); fxi->setChannels(2); doc->addFixture(fxi); Scene* s1 = new Scene(doc); s1->setName("Scene1"); s1->setValue(fxi->id(), 0, UCHAR_MAX); s1->setValue(fxi->id(), 1, UCHAR_MAX); doc->addFunction(s1); Chaser* c = new Chaser(doc); c->setName("Chaser"); c->setRunOrder(Chaser::PingPong); c->setDirection(Chaser::Backward); c->addStep(s1->id()); QVERIFY(c->m_tapped == false); c->slotBusTapped(Bus::defaultFade()); QVERIFY(c->m_tapped == false); c->slotBusTapped(Bus::defaultHold()); QVERIFY(c->m_tapped == true); delete doc; }
void Chaser_Test::writeBusZeroSingleShotBackward() { Doc* doc = new Doc(this, m_cache); Bus::instance()->setValue(Bus::defaultFade(), 0); Bus::instance()->setValue(Bus::defaultHold(), 0); Fixture* fxi = new Fixture(doc); fxi->setAddress(0); fxi->setUniverse(0); fxi->setChannels(2); doc->addFixture(fxi); Scene* s1 = new Scene(doc); s1->setName("Scene1"); s1->setValue(fxi->id(), 0, UCHAR_MAX); s1->setValue(fxi->id(), 1, UCHAR_MAX); doc->addFunction(s1); Scene* s2 = new Scene(doc); s2->setName("Scene2"); s2->setValue(fxi->id(), 0, 0); s2->setValue(fxi->id(), 1, 0); doc->addFunction(s2); Chaser* c = new Chaser(doc); c->setName("Chaser"); c->setRunOrder(Chaser::SingleShot); c->setDirection(Chaser::Backward); c->addStep(s1->id()); c->addStep(s2->id()); s1->arm(); s2->arm(); c->arm(); QByteArray uni; MasterTimerStub* mts = new MasterTimerStub(this, NULL, uni); QVERIFY(c->stopped() == true); mts->startFunction(c); QVERIFY(c->stopped() == false); /* SingleShot will stop automatically after the last step */ c->write(mts, &uni); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s2); QVERIFY(s2->stopped() == false); c->write(mts, &uni); QVERIFY(s2->stopped() == true); mts->stopFunction(s2); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s1); QVERIFY(s1->stopped() == false); c->write(mts, &uni); QVERIFY(c->stopped() == true); mts->stopFunction(c); QVERIFY(s1->stopped() == true); QVERIFY(s2->stopped() == true); c->disarm(); s1->disarm(); s2->disarm(); delete mts; delete doc; }
void Chaser_Test::writeBusZeroLoopBackward() { Doc* doc = new Doc(this, m_cache); Bus::instance()->setValue(Bus::defaultFade(), 0); Bus::instance()->setValue(Bus::defaultHold(), 0); Fixture* fxi = new Fixture(doc); fxi->setAddress(0); fxi->setUniverse(0); fxi->setChannels(2); doc->addFixture(fxi); Scene* s1 = new Scene(doc); s1->setName("Scene1"); s1->setValue(fxi->id(), 0, UCHAR_MAX); s1->setValue(fxi->id(), 1, UCHAR_MAX); doc->addFunction(s1); Scene* s2 = new Scene(doc); s2->setName("Scene2"); s2->setValue(fxi->id(), 0, 0); s2->setValue(fxi->id(), 1, 0); doc->addFunction(s2); Chaser* c = new Chaser(doc); c->setName("Chaser"); c->setDirection(Chaser::Backward); c->addStep(s1->id()); c->addStep(s2->id()); s1->arm(); s2->arm(); c->arm(); QByteArray uni; MasterTimerStub* mts = new MasterTimerStub(this, NULL, uni); QVERIFY(c->stopped() == true); mts->startFunction(c); QVERIFY(c->stopped() == false); /* Since hold bus' value is 0 each call to write() starts the next step in chaser. Last step comes first because the chaser is now running backwards. */ c->write(mts, &uni); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s2); QVERIFY(s2->stopped() == false); c->write(mts, &uni); QVERIFY(s2->stopped() == true); mts->stopFunction(s2); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s1); QVERIFY(s1->stopped() == false); c->write(mts, &uni); QVERIFY(s1->stopped() == true); mts->stopFunction(s1); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s2); QVERIFY(s2->stopped() == false); c->write(mts, &uni); QVERIFY(s2->stopped() == true); mts->stopFunction(s2); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s1); QVERIFY(s1->stopped() == false); c->write(mts, &uni); QVERIFY(s1->stopped() == true); mts->stopFunction(s1); QVERIFY(c->stopped() == false); QVERIFY(mts->m_functionList.size() == 2); QVERIFY(mts->m_functionList[0] == c); QVERIFY(mts->m_functionList[1] == s2); QVERIFY(s2->stopped() == false); c->stop(); mts->stopFunction(c); QVERIFY(c->stopped() == true); QVERIFY(s1->stopped() == true); QVERIFY(s2->stopped() == true); c->disarm(); s1->disarm(); s2->disarm(); delete mts; delete doc; }