/*! \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; }
void AutomatableModel::loadSettings( const QDomElement& element, const QString& name ) { // read scale type and overwrite default scale type if( element.hasAttribute("scale_type") ) // wrong in most cases { if( element.attribute("scale_type") == "log" ) setScaleType( Logarithmic ); } else { setScaleType( Linear ); } // compat code QDomNode node = element.namedItem( AutomationPattern::classNodeName() ); if( node.isElement() ) { node = node.namedItem( name ); if( node.isElement() ) { AutomationPattern * p = AutomationPattern::globalAutomationPattern( this ); p->loadSettings( node.toElement() ); setValue( p->valueAt( 0 ) ); // in older projects we sometimes have odd automations // with just one value in - eliminate if necessary if( !p->hasAutomation() ) { delete p; } return; } // logscales were not existing at this point of time // so they can be ignored } QDomNode connectionNode = element.namedItem( "connection" ); // reads controller connection if( connectionNode.isElement() ) { QDomNode thisConnection = connectionNode.toElement().namedItem( name ); if( thisConnection.isElement() ) { setControllerConnection( new ControllerConnection( (Controller*)NULL ) ); m_controllerConnection->loadSettings( thisConnection.toElement() ); //m_controllerConnection->setTargetName( displayName() ); } } // models can be stored as elements (port00) or attributes (port10): // <ladspacontrols port10="4.41"> // <port00 value="4.41" id="4249278"/> // </ladspacontrols> // element => there is automation data node = element.namedItem( name ); if( node.isElement() ) { changeID( node.toElement().attribute( "id" ).toInt() ); setValue( node.toElement().attribute( "value" ).toFloat() ); } else if( element.hasAttribute( name ) ) // attribute => read the element's value from the attribute list { setInitValue( element.attribute( name ).toFloat() ); } else { reset(); } }