void MasterTimer::fadeAndStopAll(int timeout) { if (timeout == 0) return; Doc* doc = qobject_cast<Doc*> (parent()); Q_ASSERT(doc != NULL); QList<FadeChannel> fcList; QList<Universe *> universes = doc->inputOutputMap()->claimUniverses(); for (int i = 0; i < universes.count(); i++) { QHashIterator <int,uchar> it(universes[i]->intensityChannels()); while (it.hasNext() == true) { it.next(); Fixture* fxi = doc->fixture(doc->fixtureForAddress(it.key())); if (fxi != NULL) { uint ch = it.key() - fxi->universeAddress(); if (fxi->channelCanFade(ch)) { FadeChannel fc(doc, fxi->id(), ch); fc.setStart(it.value()); fc.setTarget(0); fc.setFadeTime(timeout); fcList.append(fc); } } } } doc->inputOutputMap()->releaseUniverses(); // Stop all functions first stopAllFunctions(); // Instruct mastertimer to do a fade out of all // the intensity channels that can fade QMutexLocker faderLocker(&m_faderMutex); foreach(FadeChannel fade, fcList) fader()->add(fade); }