casting of Track* to WaveTrack* happens at lower level in OD manager

This commit is contained in:
Paul Licameli 2018-09-21 10:23:05 -04:00
parent 03dc815aee
commit af06691982
7 changed files with 16 additions and 13 deletions

View File

@ -2236,14 +2236,14 @@ void Effect::ReplaceProcessedTracks(const bool bGoodResult)
else
{
// Replace mTracks entry with the NEW track
WaveTrack *newTrack = static_cast<WaveTrack*>(o.get());
auto newTrack = o.get();
mTracks->Replace(t, std::move(o));
// If the track is a wave track,
// Swap the wavecache track the ondemand task uses, since now the NEW
// one will be kept in the project
if (ODManager::IsInstanceCreated()) {
ODManager::Instance()->ReplaceWaveTrack((WaveTrack *)t,
newTrack);
ODManager::Instance()->ReplaceWaveTrack( t, newTrack );
}
}
}

View File

@ -381,12 +381,12 @@ void ODManager::RemoveWaveTrack(WaveTrack* track)
}
///replace the wavetrack whose wavecache the gui watches for updates
void ODManager::ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack)
void ODManager::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
{
mQueuesMutex.Lock();
for(unsigned int i=0;i<mQueues.size();i++)
{
mQueues[i]->ReplaceWaveTrack(oldTrack,newTrack);
mQueues[i]->ReplaceWaveTrack( oldTrack, newTrack );
}
mQueuesMutex.Unlock();
}

View File

@ -77,8 +77,9 @@ class ODManager final
///Returns success if it was possible.. Some ODTask conditions make it impossible until the Tasks finish.
bool MakeWaveTrackDependent(WaveTrack* dependentTrack,WaveTrack* masterTrack);
///if oldTrack is being watched,
///replace the wavetrack whose wavecache the gui watches for updates
void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
///Adds a task to the running queue. Threas-safe.
void AddTask(ODTask* task);

View File

@ -355,14 +355,14 @@ void ODTask::StopUsingWaveTrack(WaveTrack* track)
}
///Replaces all instances to a wavetrack with a NEW one, effectively transferring the task.
void ODTask::ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack)
void ODTask::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
{
mWaveTrackMutex.Lock();
for(size_t i=0;i<mWaveTracks.size();i++)
{
if(oldTrack == mWaveTracks[i])
{
mWaveTracks[i] = newTrack;
mWaveTracks[i] = static_cast<WaveTrack*>( newTrack );
}
}
mWaveTrackMutex.Unlock();

View File

@ -84,7 +84,7 @@ class ODTask /* not final */
///Replaces all instances to a wavetrack with a NEW one, effectively transferring the task.
///ODTask has no wavetrack, so it does nothing. But subclasses that do should override this.
virtual void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
virtual void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
///Adds a WaveTrack to do the task for
void AddWaveTrack(WaveTrack* track);

View File

@ -20,6 +20,7 @@ tasks associated with a WaveTrack.
#include "ODWaveTrackTaskQueue.h"
#include "ODTask.h"
#include "ODManager.h"
#include "../WaveTrack.h"
/// Constructs an ODWaveTrackTaskQueue
ODWaveTrackTaskQueue::ODWaveTrackTaskQueue()
{
@ -205,19 +206,19 @@ void ODWaveTrackTaskQueue::DemandTrackUpdate(WaveTrack* track, double seconds)
//Replaces all instances of a wavetracck with a NEW one (effectively transferes the task.)
void ODWaveTrackTaskQueue::ReplaceWaveTrack(WaveTrack* oldTrack, WaveTrack* newTrack)
void ODWaveTrackTaskQueue::ReplaceWaveTrack(Track *oldTrack, Track *newTrack)
{
if(oldTrack)
{
mTasksMutex.Lock();
for(unsigned int i=0;i<mTasks.size();i++)
mTasks[i]->ReplaceWaveTrack(oldTrack,newTrack);
mTasks[i]->ReplaceWaveTrack( oldTrack, newTrack );
mTasksMutex.Unlock();
mTracksMutex.Lock();
for(unsigned int i=0;i<mTracks.size();i++)
if(mTracks[i]==oldTrack)
mTracks[i]=newTrack;
mTracks[i] = static_cast<WaveTrack*>( newTrack );
mTracksMutex.Unlock();
}
}

View File

@ -26,6 +26,7 @@ tasks associated with a WaveTrack.
#include <vector>
#include "ODTaskThread.h"
#include <wx/wx.h>
class Track;
class WaveTrack;
class ODTask;
/// A class representing a modular task to be used with the On-Demand structures.
@ -52,7 +53,7 @@ class ODWaveTrackTaskQueue final
void DemandTrackUpdate(WaveTrack* track, double seconds);
///replaces all instances of a WaveTrack within this task with another.
void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
void ReplaceWaveTrack(Track *oldTrack, Track *newTrack);
//if the wavetrack is in this queue, and is not the only wavetrack, clones the tasks and schedules it.
void MakeWaveTrackIndependent(WaveTrack* track);