TrackList has back-pointer to project...
... and Track::GetOwner() is publicized, so that now you can find the the AudacityProject, if any, that owns a given Track; this will help eliminate some uses of GetActiveProject
This commit is contained in:
parent
c7984a2c83
commit
a93c4472f5
|
@ -12,7 +12,7 @@
|
|||
wxDEFINE_EVENT( EVT_CLIPBOARD_CHANGE, wxCommandEvent);
|
||||
|
||||
Clipboard::Clipboard()
|
||||
: mTracks { TrackList::Create() }
|
||||
: mTracks { TrackList::Create( nullptr ) }
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -767,7 +767,7 @@ void ProjectAudioManager::SetupCutPreviewTracks(double WXUNUSED(playStart), doub
|
|||
{
|
||||
auto trackRange = TrackList::Get( *p ).Selected< const PlayableTrack >();
|
||||
if( !trackRange.empty() ) {
|
||||
auto cutPreviewTracks = TrackList::Create();
|
||||
auto cutPreviewTracks = TrackList::Create( nullptr );
|
||||
for (const auto track1 : trackRange) {
|
||||
// Duplicate and change tracks
|
||||
// Clear has a very small chance of throwing
|
||||
|
|
|
@ -204,7 +204,7 @@ auto ProjectFileManager::ReadProjectFile( const FilePath &fileName )
|
|||
// the version saved on disk will be preserved until the
|
||||
// user selects Save().
|
||||
|
||||
mLastSavedTracks = TrackList::Create();
|
||||
mLastSavedTracks = TrackList::Create( nullptr );
|
||||
|
||||
auto &tracks = TrackList::Get( project );
|
||||
for (auto t : tracks.Any()) {
|
||||
|
@ -589,7 +589,7 @@ bool ProjectFileManager::DoSave (const bool fromSaveAs,
|
|||
|
||||
if (mLastSavedTracks)
|
||||
mLastSavedTracks->Clear();
|
||||
mLastSavedTracks = TrackList::Create();
|
||||
mLastSavedTracks = TrackList::Create( nullptr );
|
||||
|
||||
auto &tracks = TrackList::Get( proj );
|
||||
for ( auto t : tracks.Any() ) {
|
||||
|
@ -643,7 +643,7 @@ bool ProjectFileManager::SaveCopyWaveTracks(const FilePath & strProjectPathName,
|
|||
// Copy the tracks because we're going to do some state changes before exporting.
|
||||
unsigned int numWaveTracks = 0;
|
||||
|
||||
auto ppSavedTrackList = TrackList::Create();
|
||||
auto ppSavedTrackList = TrackList::Create( nullptr );
|
||||
auto &pSavedTrackList = *ppSavedTrackList;
|
||||
|
||||
auto trackRange = tracks.Any< WaveTrack >();
|
||||
|
|
|
@ -492,7 +492,7 @@ wxDEFINE_EVENT(EVT_TRACKLIST_DELETION, TrackListEvent);
|
|||
long TrackList::sCounter = -1;
|
||||
|
||||
static const AudacityProject::AttachedObjects::RegisteredFactory key{
|
||||
[](AudacityProject&) { return TrackList::Create(); }
|
||||
[](AudacityProject &project) { return TrackList::Create( &project ); }
|
||||
};
|
||||
|
||||
TrackList &TrackList::Get( AudacityProject &project )
|
||||
|
@ -505,17 +505,19 @@ const TrackList &TrackList::Get( const AudacityProject &project )
|
|||
return Get( const_cast< AudacityProject & >( project ) );
|
||||
}
|
||||
|
||||
TrackList::TrackList()
|
||||
TrackList::TrackList( AudacityProject *pOwner )
|
||||
: wxEvtHandler()
|
||||
, mOwner{ pOwner }
|
||||
{
|
||||
}
|
||||
|
||||
// Factory function
|
||||
std::shared_ptr<TrackList> TrackList::Create()
|
||||
std::shared_ptr<TrackList> TrackList::Create( AudacityProject *pOwner )
|
||||
{
|
||||
return std::make_shared<TrackList>();
|
||||
return std::make_shared<TrackList>( pOwner );
|
||||
}
|
||||
|
||||
#if 0
|
||||
TrackList &TrackList::operator= (TrackList &&that)
|
||||
{
|
||||
if (this != &that) {
|
||||
|
@ -524,6 +526,7 @@ TrackList &TrackList::operator= (TrackList &&that)
|
|||
}
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
void TrackList::Swap(TrackList &that)
|
||||
{
|
||||
|
|
18
src/Track.h
18
src/Track.h
|
@ -285,9 +285,9 @@ public:
|
|||
|
||||
bool HasOwner() const { return static_cast<bool>(GetOwner());}
|
||||
|
||||
private:
|
||||
std::shared_ptr<TrackList> GetOwner() const { return mList.lock(); }
|
||||
|
||||
private:
|
||||
Track *GetLink() const;
|
||||
bool GetLinked () const { return mLinked; }
|
||||
|
||||
|
@ -1141,9 +1141,9 @@ class TrackList final
|
|||
TrackList(const TrackList &that) = delete;
|
||||
TrackList &operator= (const TrackList&) = delete;
|
||||
|
||||
// Allow move
|
||||
TrackList(TrackList &&that) : TrackList() { Swap(that); }
|
||||
TrackList& operator= (TrackList&&);
|
||||
// No need for move, disallow it
|
||||
TrackList(TrackList &&that) = delete;
|
||||
TrackList& operator= (TrackList&&) = delete;
|
||||
|
||||
void clear() = delete;
|
||||
|
||||
|
@ -1153,10 +1153,10 @@ class TrackList final
|
|||
|
||||
// Create an empty TrackList
|
||||
// Don't call directly -- use Create() instead
|
||||
TrackList();
|
||||
explicit TrackList( AudacityProject *pOwner );
|
||||
|
||||
// Create an empty TrackList
|
||||
static std::shared_ptr<TrackList> Create();
|
||||
static std::shared_ptr<TrackList> Create( AudacityProject *pOwner );
|
||||
|
||||
// Move is defined in terms of Swap
|
||||
void Swap(TrackList &that);
|
||||
|
@ -1164,6 +1164,10 @@ class TrackList final
|
|||
// Destructor
|
||||
virtual ~TrackList();
|
||||
|
||||
// Find the owning project, which may be null
|
||||
AudacityProject *GetOwner() { return mOwner; }
|
||||
const AudacityProject *GetOwner() const { return mOwner; }
|
||||
|
||||
// Iteration
|
||||
|
||||
// Hide the inherited begin() and end()
|
||||
|
@ -1561,6 +1565,8 @@ public:
|
|||
bool HasPendingTracks() const;
|
||||
|
||||
private:
|
||||
AudacityProject *mOwner;
|
||||
|
||||
// Need to put pending tracks into a list so that GetLink() works
|
||||
ListOfTracks mPendingUpdates;
|
||||
// This is in correspondence with mPendingUpdates
|
||||
|
|
|
@ -254,7 +254,7 @@ void UndoManager::ModifyState(const TrackList * l,
|
|||
stack[current]->state.tracks.reset();
|
||||
|
||||
// Duplicate
|
||||
auto tracksCopy = TrackList::Create();
|
||||
auto tracksCopy = TrackList::Create( nullptr );
|
||||
for (auto t : *l) {
|
||||
if ( t->GetId() == TrackId{} )
|
||||
// Don't copy a pending added track
|
||||
|
@ -294,7 +294,7 @@ void UndoManager::PushState(const TrackList * l,
|
|||
return;
|
||||
}
|
||||
|
||||
auto tracksCopy = TrackList::Create();
|
||||
auto tracksCopy = TrackList::Create( nullptr );
|
||||
for (auto t : *l) {
|
||||
if ( t->GetId() == TrackId{} )
|
||||
// Don't copy a pending added track
|
||||
|
|
|
@ -1983,7 +1983,7 @@ void Effect::CopyInputTracks(bool allSyncLockSelected)
|
|||
mIMap.clear();
|
||||
mOMap.clear();
|
||||
|
||||
mOutputTracks = TrackList::Create();
|
||||
mOutputTracks = TrackList::Create( nullptr );
|
||||
|
||||
auto trackRange = mTracks->Any() +
|
||||
[&] (const Track *pTrack) {
|
||||
|
@ -2271,7 +2271,9 @@ void Effect::Preview(bool dryOnly)
|
|||
} );
|
||||
|
||||
// Build NEW tracklist from rendering tracks
|
||||
auto uTracks = TrackList::Create();
|
||||
// Set the same owning project, so FindProject() can see it within Process()
|
||||
const auto pProject = saveTracks->GetOwner();
|
||||
auto uTracks = TrackList::Create( pProject );
|
||||
mTracks = uTracks.get();
|
||||
|
||||
// Linear Effect preview optimised by pre-mixing to one track.
|
||||
|
|
|
@ -339,7 +339,7 @@ bool EffectEqualization48x::TrackCompare()
|
|||
SecondIMap.clear();
|
||||
SecondOMap.clear();
|
||||
|
||||
auto pSecondOutputTracks = TrackList::Create();
|
||||
auto pSecondOutputTracks = TrackList::Create( nullptr );
|
||||
auto &SecondOutputTracks = *pSecondOutputTracks;
|
||||
|
||||
for (auto aTrack :
|
||||
|
|
|
@ -256,7 +256,7 @@ void OnCut(const CommandContext &context)
|
|||
auto &clipboard = Clipboard::Get();
|
||||
clipboard.Clear();
|
||||
|
||||
auto pNewClipboard = TrackList::Create();
|
||||
auto pNewClipboard = TrackList::Create( nullptr );
|
||||
auto &newClipboard = *pNewClipboard;
|
||||
|
||||
tracks.Selected().Visit(
|
||||
|
@ -361,7 +361,7 @@ void OnCopy(const CommandContext &context)
|
|||
auto &clipboard = Clipboard::Get();
|
||||
clipboard.Clear();
|
||||
|
||||
auto pNewClipboard = TrackList::Create();
|
||||
auto pNewClipboard = TrackList::Create( nullptr );
|
||||
auto &newClipboard = *pNewClipboard;
|
||||
|
||||
for (auto n : tracks.Selected()) {
|
||||
|
@ -681,7 +681,7 @@ void OnSplitCut(const CommandContext &context)
|
|||
auto &clipboard = Clipboard::Get();
|
||||
clipboard.Clear();
|
||||
|
||||
auto pNewClipboard = TrackList::Create();
|
||||
auto pNewClipboard = TrackList::Create( nullptr );
|
||||
auto &newClipboard = *pNewClipboard;
|
||||
|
||||
Track::Holder dest;
|
||||
|
|
|
@ -190,7 +190,7 @@ void EditClipboardByLabel( AudacityProject &project,
|
|||
auto &clipboard = Clipboard::Get();
|
||||
clipboard.Clear();
|
||||
|
||||
auto pNewClipboard = TrackList::Create();
|
||||
auto pNewClipboard = TrackList::Create( nullptr );
|
||||
auto &newClipboard = *pNewClipboard;
|
||||
|
||||
//Apply action on wavetracks starting from
|
||||
|
|
Loading…
Reference in New Issue