void TrackInfoObject::setBeats(BeatsPointer pBeats) { QMutexLocker lock(&m_qMutex); // This whole method is not so great. The fact that Beats is an ABC is // limiting with respect to QObject and signals/slots. QObject* pObject = NULL; if (m_pBeats) { pObject = dynamic_cast<QObject*>(m_pBeats.data()); if (pObject) { disconnect(pObject, SIGNAL(updated()), this, SLOT(slotBeatsUpdated())); } } m_pBeats = pBeats; double bpm = 0.0; if (m_pBeats) { bpm = m_pBeats->getBpm(); pObject = dynamic_cast<QObject*>(m_pBeats.data()); if (pObject) { connect(pObject, SIGNAL(updated()), this, SLOT(slotBeatsUpdated())); } } setDirty(true); lock.unlock(); emit(bpmUpdated(bpm)); emit(beatsUpdated()); }
void ClockControl::trackLoaded(TrackPointer pTrack) { // Clear on-beat control m_pCOBeatActive->set(0.0); // Disconnect any previously loaded track/beats if (m_pTrack) { disconnect(m_pTrack.data(), SIGNAL(beatsUpdated()), this, SLOT(slotBeatsUpdated())); } m_pBeats.clear(); m_pTrack.clear(); if (pTrack) { m_pTrack = pTrack; m_pBeats = m_pTrack->getBeats(); connect(m_pTrack.data(), SIGNAL(beatsUpdated()), this, SLOT(slotBeatsUpdated())); } }