1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-26 09:28:07 +02:00
audacity/src/ondemand/ODWaveTrackTaskQueue.h

115 lines
3.3 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
ODWaveTrackTaskQueue.h
Created by Michael Chinen (mchinen)
Audacity(R) is copyright (c) 1999-2008 Audacity Team.
License: GPL v2. See License.txt.
******************************************************************//**
\class ODWaveTrackTaskQueue
\brief watches over all to be done (not yet started and started but not finished)
tasks associated with a WaveTrack.
*//*******************************************************************/
#ifndef __AUDACITY_ODWAVETRACKTASKQUEUE__
#define __AUDACITY_ODWAVETRACKTASKQUEUE__
#include <vector>
#include "ODTaskThread.h"
#include <wx/wx.h>
class WaveTrack;
class ODTask;
/// A class representing a modular task to be used with the On-Demand structures.
class ODWaveTrackTaskQueue
{
public:
// Constructor / Destructor
/// Constructs an ODWaveTrackTaskQueue
ODWaveTrackTaskQueue();
virtual ~ODWaveTrackTaskQueue();
///Adds a track to the associated list.
void AddWaveTrack(WaveTrack* track);
///Removes a track from the list. Also notifies mTasks to stop using references
///to the instance in a thread-safe manner (may block)
void RemoveWaveTrack(WaveTrack* track);
///changes the tasks associated with this Waveform to process the task from a different point in the track
void DemandTrackUpdate(WaveTrack* track, double seconds);
///replaces all instances of a WaveTrack within this task with another.
void ReplaceWaveTrack(WaveTrack* oldTrack,WaveTrack* newTrack);
//if the wavetrack is in this queue, and is not the only wavetrack, clones the tasks and schedules it.
void MakeWaveTrackIndependent(WaveTrack* track);
///returns whether or not this queue's task list and another's can merge together, as when we make two mono tracks stereo.
virtual bool CanMergeWith(ODWaveTrackTaskQueue* otherQueue);
void MergeWaveTrack(WaveTrack* track);
//returns true if the agrument is in the WaveTrack list.
bool ContainsWaveTrack(WaveTrack* track);
//returns the wavetrack at position x.
WaveTrack* GetWaveTrack(size_t x);
///returns the number of wavetracks in this queue.
int GetNumWaveTracks();
///Add a task to the queue.
void AddTask(ODTask* task);
//returns true if either tracks or tasks are empty
bool IsEmpty();
//returns true if the foremost task exists and is empty.
bool IsFrontTaskComplete();
///Removes and deletes the front task from the list.
void RemoveFrontTask();
///Schedules the front task for immediate execution
ODTask* GetFrontTask();
///returns the number of ODTasks in this queue
int GetNumTasks();
///returns a ODTask at position x
ODTask* GetTask(size_t x);
///fills in the status bar message for a given track
void FillTipForWaveTrack( WaveTrack * t, const wxChar ** ppTip );
protected:
//because we need to save this around for the tool tip.
wxString mTipMsg;
///the list of tracks associated with this queue.
std::vector<WaveTrack*> mTracks;
ODLock mTracksMutex;
///the list of tasks associated with the tracks. This class owns these tasks.
std::vector<ODTask*> mTasks;
ODLock mTasksMutex;
};
#endif