mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-26 09:28:07 +02:00
115 lines
3.3 KiB
C++
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
|
|
|