void AutomationPattern::resolveAllIDs() { TrackContainer::TrackList l = Engine::getSong()->tracks() + Engine::getBBTrackContainer()->tracks(); l += Engine::getSong()->globalAutomationTrack(); for( TrackContainer::TrackList::iterator it = l.begin(); it != l.end(); ++it ) { if( ( *it )->type() == Track::AutomationTrack || ( *it )->type() == Track::HiddenAutomationTrack ) { Track::tcoVector v = ( *it )->getTCOs(); for( Track::tcoVector::iterator j = v.begin(); j != v.end(); ++j ) { AutomationPattern * a = dynamic_cast<AutomationPattern *>( *j ); if( a ) { for( QVector<jo_id_t>::Iterator k = a->m_idsToResolve.begin(); k != a->m_idsToResolve.end(); ++k ) { JournallingObject * o = Engine::projectJournal()-> journallingObject( *k ); if( o && dynamic_cast<AutomatableModel *>( o ) ) { a->addObject( dynamic_cast<AutomatableModel *>( o ), false ); } } a->m_idsToResolve.clear(); a->dataChanged(); } } } } }
bool AutomationPattern::isAutomated( const AutomatableModel * _m ) { TrackContainer::TrackList l; l += Engine::getSong()->tracks(); l += Engine::getBBTrackContainer()->tracks(); l += Engine::getSong()->globalAutomationTrack(); for( TrackContainer::TrackList::ConstIterator it = l.begin(); it != l.end(); ++it ) { if( ( *it )->type() == Track::AutomationTrack || ( *it )->type() == Track::HiddenAutomationTrack ) { const Track::tcoVector & v = ( *it )->getTCOs(); for( Track::tcoVector::ConstIterator j = v.begin(); j != v.end(); ++j ) { const AutomationPattern * a = dynamic_cast<const AutomationPattern *>( *j ); if( a && a->hasAutomation() ) { for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k ) { if( *k == _m ) { return true; } } } } } } return false; }
void BBTrackContainerView::removeSteps() { TrackContainer::TrackList tl = model()->tracks(); for( TrackContainer::TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { if( ( *it )->type() == Track::InstrumentTrack ) { Pattern* p = static_cast<Pattern *>( ( *it )->getTCO( m_bbtc->currentBB() ) ); p->removeSteps(); } } }
void bbTrack::loadTrackSpecificSettings( const QDomElement & _this ) { /* if( _this.attribute( "icon" ) != "" ) { m_trackLabel->setPixmapFile( _this.attribute( "icon" ) ); }*/ if( _this.hasAttribute( "clonebbt" ) ) { const int src = _this.attribute( "clonebbt" ).toInt(); const int dst = s_infoMap[this]; engine::getBBTrackContainer()->createTCOsForBB( dst ); TrackContainer::TrackList tl = engine::getBBTrackContainer()->tracks(); // copy TCOs of all tracks from source BB (at bar "src") to destination // TCOs (which are created if they do not exist yet) for( TrackContainer::TrackList::iterator it = tl.begin(); it != tl.end(); ++it ) { ( *it )->getTCO( src )->copy(); ( *it )->getTCO( dst )->paste(); } setName( tr( "Clone of %1" ).arg( _this.parentNode().toElement().attribute( "name" ) ) ); } else { QDomNode node = _this.namedItem( TrackContainer::classNodeName() ); if( node.isElement() ) { ( (JournallingObject *)engine::getBBTrackContainer() )-> restoreState( node.toElement() ); } } /* doesn't work yet because bbTrack-ctor also sets current bb so if bb-tracks are created after this function is called, this doesn't help at all.... if( _this.attribute( "current" ).toInt() ) { engine::getBBEditor()->setCurrentBB( s_infoMap[this] ); }*/ }
/*! \brief returns a list of all the automation patterns everywhere that are connected to a specific model * \param _m the model we want to look for */ QVector<AutomationPattern *> AutomationPattern::patternsForModel( const AutomatableModel * _m ) { QVector<AutomationPattern *> patterns; TrackContainer::TrackList l; l += Engine::getSong()->tracks(); l += Engine::getBBTrackContainer()->tracks(); l += Engine::getSong()->globalAutomationTrack(); // go through all tracks... for( TrackContainer::TrackList::ConstIterator it = l.begin(); it != l.end(); ++it ) { // we want only automation tracks... if( ( *it )->type() == Track::AutomationTrack || ( *it )->type() == Track::HiddenAutomationTrack ) { // get patterns in those tracks.... const Track::tcoVector & v = ( *it )->getTCOs(); // go through all the patterns... for( Track::tcoVector::ConstIterator j = v.begin(); j != v.end(); ++j ) { AutomationPattern * a = dynamic_cast<AutomationPattern *>( *j ); // check that the pattern has automation if( a && a->hasAutomation() ) { // now check is the pattern is connected to the model we want by going through all the connections // of the pattern bool has_object = false; for( objectVector::const_iterator k = a->m_objects.begin(); k != a->m_objects.end(); ++k ) { if( *k == _m ) { has_object = true; } } // if the patterns is connected to the model, add it to the list if( has_object ) { patterns += a; } } } } } return patterns; }