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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user