* removed obsolete variable

* fixed wrong behaviour of automationPattern::valueAt()
* in case there's only one initial value in time-map, set it for all objects when loading settings



git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1332 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
Tobias Doerffel
2008-07-18 13:01:30 +00:00
parent 7b5c911950
commit dcf4645839
2 changed files with 31 additions and 31 deletions

View File

@@ -54,12 +54,12 @@ public:
m_objects += _obj;
}
const automatableModel * firstObject( void );
const automatableModel * firstObject( void ) const;
virtual midiTime length( void ) const;
midiTime putValue( const midiTime & _time, const float _value,
const bool _quant_pos = TRUE );
const bool _quant_pos = TRUE );
void removeValue( const midiTime & _time );
@@ -75,10 +75,10 @@ public:
inline bool hasAutomation( void ) const
{
return( m_dynamic || getTimeMap()[0] != 0 );
return( m_hasAutomation );
}
float valueAt( const midiTime & _time );
float valueAt( const midiTime & _time ) const;
const QString name( void ) const;
@@ -98,16 +98,6 @@ public:
void processMidiTime( const midiTime & _time );
inline bool updateFirst( void ) const
{
return( m_updateFirst );
}
inline void setUpdateFirst( bool _update )
{
m_updateFirst = _update;
}
virtual trackContentObjectView * createView( trackView * _tv );
@@ -127,8 +117,7 @@ private:
QVector<jo_id_t> m_idsToResolve;
objectVector m_objects;
timeMap m_timeMap; // actual values
bool m_updateFirst; // init-value set?
bool m_dynamic; // more than 1 value?
bool m_hasAutomation;
friend class automationPatternView;

View File

@@ -55,8 +55,7 @@ automationPattern::automationPattern( automationTrack * _auto_track ) :
trackContentObject( _auto_track ),
m_autoTrack( _auto_track ),
m_objects(),
m_updateFirst( TRUE ),
m_dynamic( FALSE )
m_hasAutomation( FALSE )
{
changeLength( midiTime( 1, 0 ) );
m_timeMap[0] = 0;
@@ -69,8 +68,7 @@ automationPattern::automationPattern( const automationPattern & _pat_to_copy ) :
trackContentObject( _pat_to_copy.m_autoTrack ),
m_autoTrack( _pat_to_copy.m_autoTrack ),
m_objects( _pat_to_copy.m_objects ),
m_updateFirst( _pat_to_copy.m_updateFirst ),
m_dynamic( _pat_to_copy.m_dynamic )
m_hasAutomation( _pat_to_copy.m_hasAutomation )
{
for( timeMap::const_iterator it = _pat_to_copy.m_timeMap.begin();
it != _pat_to_copy.m_timeMap.end(); ++it )
@@ -94,7 +92,7 @@ automationPattern::~automationPattern()
const automatableModel * automationPattern::firstObject( void )
const automatableModel * automationPattern::firstObject( void ) const
{
if( !m_objects.isEmpty() )
{
@@ -141,13 +139,13 @@ midiTime automationPattern::putValue( const midiTime & _time,
m_timeMap[new_time] = _value;
if( !m_dynamic && new_time != 0 )
if( new_time != 0 )
{
m_dynamic = TRUE;
m_hasAutomation = TRUE;
}
else
{
m_dynamic = FALSE;
m_hasAutomation = FALSE;
for( objectVector::iterator it = m_objects.begin();
it != m_objects.end(); ++it )
{
@@ -177,9 +175,9 @@ void automationPattern::removeValue( const midiTime & _time )
{
m_timeMap.remove( _time );
if( m_timeMap.size() == 1 )
if( m_timeMap.size() <= 1 )
{
m_dynamic = FALSE;
m_hasAutomation = FALSE;
for( objectVector::iterator it = m_objects.begin();
it != m_objects.end(); ++it )
{
@@ -233,14 +231,16 @@ void automationPattern::openInAutomationEditor( void )
float automationPattern::valueAt( const midiTime & _time )
float automationPattern::valueAt( const midiTime & _time ) const
{
if( m_timeMap.isEmpty() )
{
return( 0 );
}
timeMap::const_iterator v = m_timeMap.lowerBound( _time );
return( ( v != m_timeMap.end() ) ? v.value() : (v-1).value() );
// lowerBound returns next value with greater key, therefore we take
// the previous element to get the current value
return( ( v != m_timeMap.begin() ) ? (v-1).value() : v.value() );
}
@@ -298,7 +298,18 @@ void automationPattern::loadSettings( const QDomElement & _this )
}
}
m_dynamic = m_timeMap.size() > 1;
m_hasAutomation = m_timeMap.size() > 1;
if( m_hasAutomation == FALSE )
{
for( objectVector::iterator it = m_objects.begin();
it != m_objects.end(); ++it )
{
if( *it )
{
( *it )->setValue( m_timeMap[0] );
}
}
}
changeLength( length() );
}
@@ -324,7 +335,7 @@ const QString automationPattern::name( void ) const
void automationPattern::processMidiTime( const midiTime & _time )
{
if( _time >= 0 && m_dynamic )
if( _time >= 0 && m_hasAutomation )
{
const float val = valueAt( _time );
for( objectVector::iterator it = m_objects.begin();
@@ -370,7 +381,7 @@ bool automationPattern::isAutomated( const automatableModel * _m )
const automationPattern * a =
dynamic_cast<const
automationPattern *>( *j );
if( a && a->m_dynamic )
if( a && a->m_hasAutomation )
{
for( objectVector::const_iterator k = a->m_objects.begin();
k != a->m_objects.end(); ++k )