void CueStack::postRun(MasterTimer* timer) { qDebug() << Q_FUNC_INFO; Q_ASSERT(timer != NULL); Q_ASSERT(m_fader != NULL); // Bounce all intensity channels to MasterTimer's fader for zeroing QHashIterator <FadeChannel,FadeChannel> it(m_fader->channels()); while (it.hasNext() == true) { it.next(); FadeChannel fc = it.value(); if (fc.group(doc()) == QLCChannel::Intensity) { fc.setStart(fc.current(intensity())); fc.setTarget(0); fc.setElapsed(0); fc.setReady(false); fc.setFadeTime(fadeOutSpeed()); timer->fader()->add(fc); } } m_currentIndex = -1; delete m_fader; m_fader = NULL; emit currentCueChanged(m_currentIndex); emit stopped(); }
void RGBMatrix::insertStartValues(FadeChannel& fc, uint fadeTime) const { Q_ASSERT(m_fader != NULL); // To create a nice and smooth fade, get the starting value from // m_fader's existing FadeChannel (if any). Otherwise just assume // we're starting from zero. QHash <FadeChannel,FadeChannel>::const_iterator oldChannelIterator = m_fader->channels().find(fc); if (oldChannelIterator != m_fader->channels().end()) { FadeChannel old = oldChannelIterator.value(); fc.setCurrent(old.current()); fc.setStart(old.current()); } else { fc.setCurrent(0); fc.setStart(0); } // The channel is not ready yet fc.setReady(false); // Fade in speed is used for all non-zero targets if (fc.target() == 0) fc.setFadeTime(fadeOutSpeed()); else { fc.setFadeTime(fadeTime); } }
void RGBMatrix::insertStartValues(FadeChannel& fc) const { Q_ASSERT(m_fader != NULL); // To create a nice and smooth fade, get the starting value from // m_fader's existing FadeChannel (if any). Otherwise just assume // we're starting from zero. if (m_fader->channels().contains(fc) == true) { FadeChannel old = m_fader->channels()[fc]; fc.setCurrent(old.current()); fc.setStart(old.current()); } else { fc.setCurrent(0); fc.setStart(0); } // The channel is not ready yet fc.setReady(false); // Fade in speed is used for all non-zero targets if (fc.target() == 0) fc.setFadeTime(fadeOutSpeed()); else fc.setFadeTime(fadeInSpeed()); }
bool Cue::saveXMLSpeed(QXmlStreamWriter *doc) const { doc->writeStartElement(KXMLQLCCueSpeed); doc->writeAttribute(KXMLQLCCueSpeedFadeIn, QString::number(fadeInSpeed())); doc->writeAttribute(KXMLQLCCueSpeedFadeOut, QString::number(fadeOutSpeed())); doc->writeAttribute(KXMLQLCCueSpeedDuration, QString::number(duration())); doc->writeEndElement(); return true; }
bool Function::saveXMLSpeed(QDomDocument* doc, QDomElement* root) const { QDomElement tag; tag = doc->createElement(KXMLQLCFunctionSpeed); tag.setAttribute(KXMLQLCFunctionSpeedFadeIn, QString::number(fadeInSpeed())); tag.setAttribute(KXMLQLCFunctionSpeedFadeOut, QString::number(fadeOutSpeed())); tag.setAttribute(KXMLQLCFunctionSpeedDuration, QString::number(duration())); root->appendChild(tag); return true; }
void Function::setTempoType(const Function::TempoType &type) { if (type == m_tempoType) return; m_tempoType = type; /* Retrieve the current BPM value known by the Master Timer */ float bpmNum = doc()->masterTimer()->bpmNumber(); /* Calculate the duration in ms of a single beat */ float beatTime = 60000.0 / bpmNum; switch (type) { /* Beats -> Time */ case Time: setFadeInSpeed(beatsToTime(fadeInSpeed(), beatTime)); setDuration(beatsToTime(duration(), beatTime)); setFadeOutSpeed(beatsToTime(fadeOutSpeed(), beatTime)); disconnect(doc()->masterTimer(), SIGNAL(bpmNumberChanged(int)), this, SLOT(slotBPMChanged(int))); break; /* Time -> Beats */ case Beats: setFadeInSpeed(timeToBeats(fadeInSpeed(), beatTime)); setDuration(timeToBeats(duration(), beatTime)); setFadeOutSpeed(timeToBeats(fadeOutSpeed(), beatTime)); connect(doc()->masterTimer(), SIGNAL(bpmNumberChanged(int)), this, SLOT(slotBPMChanged(int))); break; default: qDebug() << "Error. Unhandled tempo type" << type; break; } emit changed(m_id); }
void RGBMatrix::postRun(MasterTimer* timer, QList<Universe *> universes) { if (m_fader != NULL) { QHashIterator <FadeChannel,FadeChannel> it(m_fader->channels()); while (it.hasNext() == true) { it.next(); FadeChannel fc = it.value(); // fade out only intensity channels if (fc.group(doc()) != QLCChannel::Intensity) continue; bool canFade = true; Fixture *fixture = doc()->fixture(fc.fixture()); if (fixture != NULL) canFade = fixture->channelCanFade(fc.channel()); fc.setStart(fc.current(getAttributeValue(Intensity))); fc.setCurrent(fc.current(getAttributeValue(Intensity))); fc.setElapsed(0); fc.setReady(false); if (canFade == false) { fc.setFadeTime(0); fc.setTarget(fc.current(getAttributeValue(Intensity))); } else { if (overrideFadeOutSpeed() == defaultSpeed()) fc.setFadeTime(fadeOutSpeed()); else fc.setFadeTime(overrideFadeOutSpeed()); fc.setTarget(0); } timer->faderAdd(fc); } delete m_fader; m_fader = NULL; } { QMutexLocker algorithmLocker(&m_algorithmMutex); if (m_algorithm != NULL) m_algorithm->postRun(); } Function::postRun(timer, universes); }
bool CueStack::saveXML(QDomDocument* doc, QDomElement* wksp_root, uint id) const { qDebug() << Q_FUNC_INFO; Q_ASSERT(doc != NULL); Q_ASSERT(wksp_root != NULL); QDomElement root = doc->createElement(KXMLQLCCueStack); root.setAttribute(KXMLQLCCueStackID, id); wksp_root->appendChild(root); QDomElement speed = doc->createElement(KXMLQLCCueStackSpeed); speed.setAttribute(KXMLQLCCueStackSpeedFadeIn, fadeInSpeed()); speed.setAttribute(KXMLQLCCueStackSpeedFadeOut, fadeOutSpeed()); speed.setAttribute(KXMLQLCCueStackSpeedDuration, duration()); root.appendChild(speed); foreach (Cue cue, cues()) cue.saveXML(doc, &root); return true; }