1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-21 08:27:13 +01:00

static TrackList::Get()...

... not member function of AudacityProject
This commit is contained in:
Paul Licameli
2019-05-06 19:00:10 -04:00
parent 1ed9338e6f
commit 14ab93a01f
73 changed files with 553 additions and 482 deletions

View File

@@ -37,7 +37,7 @@ namespace {
void DoMixAndRender
(AudacityProject &project, bool toNewTrack)
{
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackFactory = project.GetTrackFactory();
auto rate = project.GetRate();
auto defaultFormat = project.GetDefaultFormat();
@@ -47,12 +47,12 @@ void DoMixAndRender
WaveTrack::Holder uNewLeft, uNewRight;
::MixAndRender(
tracks, trackFactory, rate, defaultFormat, 0.0, 0.0, uNewLeft, uNewRight);
&tracks, trackFactory, rate, defaultFormat, 0.0, 0.0, uNewLeft, uNewRight);
if (uNewLeft) {
// Remove originals, get stats on what tracks were mixed
auto trackRange = tracks->Selected< WaveTrack >();
auto trackRange = tracks.Selected< WaveTrack >();
auto selectedCount = (trackRange + &Track::IsLeader).size();
wxString firstName;
if (selectedCount > 0)
@@ -60,18 +60,18 @@ void DoMixAndRender
if (!toNewTrack) {
// Beware iterator invalidation!
for (auto &it = trackRange.first, &end = trackRange.second; it != end;)
tracks->Remove( *it++ );
tracks.Remove( *it++ );
}
// Add NEW tracks
auto pNewLeft = tracks->Add( uNewLeft );
auto pNewLeft = tracks.Add( uNewLeft );
decltype(pNewLeft) pNewRight{};
if (uNewRight)
pNewRight = tracks->Add( uNewRight );
pNewRight = tracks.Add( uNewRight );
// Do this only after adding tracks to the list
tracks->GroupChannels(*pNewLeft, pNewRight ? 2 : 1);
tracks.GroupChannels(*pNewLeft, pNewRight ? 2 : 1);
// If we're just rendering (not mixing), keep the track name the same
if (selectedCount==1) {
@@ -110,10 +110,10 @@ void DoMixAndRender
void DoPanTracks(AudacityProject &project, float PanValue)
{
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
// count selected wave tracks
const auto range = tracks->Any< WaveTrack >();
const auto range = tracks.Any< WaveTrack >();
const auto selectedRange = range + &Track::IsSelected;
auto count = selectedRange.size();
@@ -153,7 +153,7 @@ const size_t kAlignLabelsCount = alignLabels.end() - alignLabels.begin();
void DoAlign
(AudacityProject &project, int index, bool moveSel)
{
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto &selectedRegion = project.GetViewInfo().selectedRegion;
wxString action;
@@ -161,8 +161,8 @@ void DoAlign
double delta = 0.0;
double newPos = -1.0;
auto channelRange = tracks->Selected< AudioTrack >();
auto trackRange = tracks->SelectedLeaders< AudioTrack >();
auto channelRange = tracks.Selected< AudioTrack >();
auto trackRange = tracks.SelectedLeaders< AudioTrack >();
auto FindOffset = []( const Track *pTrack ) {
return TrackList::Channels(pTrack).min( &Track::GetOffset ); };
@@ -255,7 +255,7 @@ void DoAlign
if ((unsigned)index >= kAlignLabelsCount) {
// This is an alignLabelsNoSync command.
for (auto t : tracks->SelectedLeaders< AudioTrack >()) {
for (auto t : tracks.SelectedLeaders< AudioTrack >()) {
// This shifts different tracks in different ways, so no sync-lock
// move.
// Only align Wave and Note tracks end to end.
@@ -278,7 +278,7 @@ void DoAlign
if (delta != 0.0) {
// For a fixed-distance shift move sync-lock selected tracks also.
for (auto t : tracks->Any() + &Track::IsSelectedOrSyncLockSelected )
for (auto t : tracks.Any() + &Track::IsSelectedOrSyncLockSelected )
t->SetOffset(t->GetOffset() + delta);
}
@@ -471,14 +471,14 @@ void DoSortTracks( AudacityProject &project, int flags )
// This one place outside of TrackList where we must use undisguised
// std::list iterators! Avoid this elsewhere!
std::vector<TrackNodePointer> arr;
auto pTracks = project.GetTracks();
arr.reserve(pTracks->size());
auto &tracks = TrackList::Get( project );
arr.reserve(tracks.size());
// First find the permutation.
// This routine, very unusually, deals with the underlying stl list
// iterators, not with TrackIter! Dangerous!
for (auto iter = pTracks->ListOfTracks::begin(),
end = pTracks->ListOfTracks::end(); iter != end; ++iter) {
for (auto iter = tracks.ListOfTracks::begin(),
end = tracks.ListOfTracks::end(); iter != end; ++iter) {
const auto &track = *iter;
if ( !track->IsLeader() )
// keep channels contiguous
@@ -515,11 +515,11 @@ void DoSortTracks( AudacityProject &project, int flags )
ndx += channels.size();
}
}
arr.insert(arr.begin() + ndx, TrackNodePointer{iter, pTracks});
arr.insert(arr.begin() + ndx, TrackNodePointer{iter, &tracks});
}
// Now apply the permutation
pTracks->Permute(arr);
tracks.Permute(arr);
}
void SetTrackGain(AudacityProject &project, WaveTrack * wt, LWSlider * slider)
@@ -556,29 +556,29 @@ namespace TrackActions {
void DoRemoveTracks( AudacityProject &project )
{
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackPanel = project.GetTrackPanel();
std::vector<Track*> toRemove;
for (auto track : tracks->Selected())
for (auto track : tracks.Selected())
toRemove.push_back(track);
// Capture the track preceding the first removed track
Track *f{};
if (!toRemove.empty()) {
auto found = tracks->Find(toRemove[0]);
auto found = tracks.Find(toRemove[0]);
f = *--found;
}
for (auto track : toRemove)
tracks->Remove(track);
tracks.Remove(track);
if (!f)
// try to use the last track
f = *tracks->Any().rbegin();
f = *tracks.Any().rbegin();
if (f) {
// Try to use the first track after the removal
auto found = tracks->FindLeader(f);
auto found = tracks.FindLeader(f);
auto t = *++found;
if (t)
f = t;
@@ -596,7 +596,7 @@ void DoRemoveTracks( AudacityProject &project )
void DoTrackMute(AudacityProject &project, Track *t, bool exclusive)
{
auto &tracks = *project.GetTracks();
auto &tracks = TrackList::Get( project );
auto &trackPanel = *project.GetTrackPanel();
// Whatever t is, replace with lead channel
@@ -645,7 +645,7 @@ void DoTrackMute(AudacityProject &project, Track *t, bool exclusive)
void DoTrackSolo(AudacityProject &project, Track *t, bool exclusive)
{
auto &tracks = *project.GetTracks();
auto &tracks = TrackList::Get( project );
auto &trackPanel = *project.GetTrackPanel();
// Whatever t is, replace with lead channel
@@ -697,7 +697,7 @@ void DoTrackSolo(AudacityProject &project, Track *t, bool exclusive)
void DoRemoveTrack(AudacityProject &project, Track * toRemove)
{
auto &tracks = *project.GetTracks();
auto &tracks = TrackList::Get( project );
auto &trackPanel = *project.GetTrackPanel();
// If it was focused, then NEW focus is the next or, if
@@ -738,7 +738,7 @@ void DoMoveTrack
(AudacityProject &project, Track* target, MoveChoice choice)
{
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
wxString longDesc, shortDesc;
@@ -751,8 +751,8 @@ void DoMoveTrack
// TODO: write TrackList::Rotate to do this in one step and avoid emitting
// an event for each swap
while (tracks->CanMoveUp(target))
tracks->Move(target, true);
while (tracks.CanMoveUp(target))
tracks.Move(target, true);
break;
case OnMoveBottomID:
@@ -762,14 +762,14 @@ void DoMoveTrack
// TODO: write TrackList::Rotate to do this in one step and avoid emitting
// an event for each swap
while (tracks->CanMoveDown(target))
tracks->Move(target, false);
while (tracks.CanMoveDown(target))
tracks.Move(target, false);
break;
default:
bool bUp = (OnMoveUpID == choice);
tracks->Move(target, bUp);
tracks.Move(target, bUp);
longDesc =
/* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/
bUp? _("Moved '%s' Up")
@@ -794,13 +794,13 @@ struct Handler : CommandHandlerObject {
void OnNewWaveTrack(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackFactory = project.GetTrackFactory();
auto trackPanel = project.GetTrackPanel();
auto defaultFormat = project.GetDefaultFormat();
auto rate = project.GetRate();
auto t = tracks->Add(trackFactory->NewWaveTrack(defaultFormat, rate));
auto t = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate));
SelectActions::SelectNone( project );
t->SetSelected(true);
@@ -814,7 +814,7 @@ void OnNewWaveTrack(const CommandContext &context)
void OnNewStereoTrack(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackFactory = project.GetTrackFactory();
auto trackPanel = project.GetTrackPanel();
auto defaultFormat = project.GetDefaultFormat();
@@ -822,13 +822,13 @@ void OnNewStereoTrack(const CommandContext &context)
SelectActions::SelectNone( project );
auto left = tracks->Add(trackFactory->NewWaveTrack(defaultFormat, rate));
auto left = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate));
left->SetSelected(true);
auto right = tracks->Add(trackFactory->NewWaveTrack(defaultFormat, rate));
auto right = tracks.Add(trackFactory->NewWaveTrack(defaultFormat, rate));
right->SetSelected(true);
tracks->GroupChannels(*left, 2);
tracks.GroupChannels(*left, 2);
project.PushState(_("Created new stereo audio track"), _("New Track"));
@@ -839,11 +839,11 @@ void OnNewStereoTrack(const CommandContext &context)
void OnNewLabelTrack(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackFactory = project.GetTrackFactory();
auto trackPanel = project.GetTrackPanel();
auto t = tracks->Add(trackFactory->NewLabelTrack());
auto t = tracks.Add(trackFactory->NewLabelTrack());
SelectActions::SelectNone( project );
@@ -858,16 +858,16 @@ void OnNewLabelTrack(const CommandContext &context)
void OnNewTimeTrack(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto trackFactory = project.GetTrackFactory();
auto trackPanel = project.GetTrackPanel();
if (tracks->GetTimeTrack()) {
if (tracks.GetTimeTrack()) {
AudacityMessageBox(_("This version of Audacity only allows one time track for each project window."));
return;
}
auto t = tracks->AddToHead(trackFactory->NewTimeTrack());
auto t = tracks.AddToHead(trackFactory->NewTimeTrack());
SelectActions::SelectNone( project );
@@ -903,7 +903,7 @@ void OnResample(const CommandContext &context)
{
auto &project = context.project;
auto projectRate = project.GetRate();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto &undoManager = *project.GetUndoManager();
int newRate;
@@ -974,7 +974,7 @@ void OnResample(const CommandContext &context)
int ndx = 0;
auto flags = UndoPush::AUTOSAVE;
for (auto wt : tracks->Selected< WaveTrack >())
for (auto wt : tracks.Selected< WaveTrack >())
{
wxString msg;
@@ -1013,11 +1013,11 @@ void OnRemoveTracks(const CommandContext &context)
void OnMuteAllTracks(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto soloSimple = project.IsSoloSimple();
auto soloNone = project.IsSoloNone();
for (auto pt : tracks->Any<PlayableTrack>())
for (auto pt : tracks.Any<PlayableTrack>())
{
pt->SetMute(true);
if (soloSimple || soloNone)
@@ -1031,11 +1031,11 @@ void OnMuteAllTracks(const CommandContext &context)
void OnUnmuteAllTracks(const CommandContext &context)
{
auto &project = context.project;
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
auto soloSimple = project.IsSoloSimple();
auto soloNone = project.IsSoloNone();
for (auto pt : tracks->Any<PlayableTrack>())
for (auto pt : tracks.Any<PlayableTrack>())
{
pt->SetMute(false);
if (soloSimple || soloNone)
@@ -1399,10 +1399,10 @@ void OnTrackMoveUp(const CommandContext &context)
{
auto &project = context.project;
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
Track *const focusedTrack = trackPanel->GetFocusedTrack();
if (tracks->CanMoveUp(focusedTrack)) {
if (tracks.CanMoveUp(focusedTrack)) {
DoMoveTrack(project, focusedTrack, OnMoveUpID);
trackPanel->Refresh(false);
}
@@ -1412,10 +1412,10 @@ void OnTrackMoveDown(const CommandContext &context)
{
auto &project = context.project;
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
Track *const focusedTrack = trackPanel->GetFocusedTrack();
if (tracks->CanMoveDown(focusedTrack)) {
if (tracks.CanMoveDown(focusedTrack)) {
DoMoveTrack(project, focusedTrack, OnMoveDownID);
trackPanel->Refresh(false);
}
@@ -1425,10 +1425,10 @@ void OnTrackMoveTop(const CommandContext &context)
{
auto &project = context.project;
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
Track *const focusedTrack = trackPanel->GetFocusedTrack();
if (tracks->CanMoveUp(focusedTrack)) {
if (tracks.CanMoveUp(focusedTrack)) {
DoMoveTrack(project, focusedTrack, OnMoveTopID);
trackPanel->Refresh(false);
}
@@ -1438,10 +1438,10 @@ void OnTrackMoveBottom(const CommandContext &context)
{
auto &project = context.project;
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto &tracks = TrackList::Get( project );
Track *const focusedTrack = trackPanel->GetFocusedTrack();
if (tracks->CanMoveDown(focusedTrack)) {
if (tracks.CanMoveDown(focusedTrack)) {
DoMoveTrack(project, focusedTrack, OnMoveBottomID);
trackPanel->Refresh(false);
}