1
0
mirror of https://github.com/cookiengineer/audacity synced 2026-02-17 00:07:54 +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

@@ -460,7 +460,7 @@ void ControlToolBar::EnableDisableButtons()
bool busy = gAudioIO->IsBusy();
// Only interested in audio type tracks
bool tracks = p && p->GetTracks()->Any<AudioTrack>(); // PRL: PlayableTrack ?
bool tracks = p && TrackList::Get( *p ).Any<AudioTrack>(); // PRL: PlayableTrack ?
if (p) {
TranscriptionToolBar *const playAtSpeedTB = p->GetTranscriptionToolBar();
@@ -596,19 +596,17 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion,
if (!p)
return -1; // Should never happen, but...
TrackList *t = p->GetTracks();
if (!t)
return -1; // Should never happen, but...
auto &tracks = TrackList::Get( *p );
mLastPlayMode = mode;
bool hasaudio;
if (useMidi)
hasaudio = ! p->GetTracks()->Any<PlayableTrack>().empty();
hasaudio = ! tracks.Any<PlayableTrack>().empty();
else
hasaudio = ! p->GetTracks()->Any<WaveTrack>().empty();
hasaudio = ! tracks.Any<WaveTrack>().empty();
double latestEnd = (playWhiteSpace)? t1 : t->GetEndTime();
double latestEnd = (playWhiteSpace)? t1 : tracks.GetEndTime();
if (!hasaudio)
return -1; // No need to continue without audio tracks
@@ -630,25 +628,25 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion,
}
else {
// loop the entire project
t0 = t->GetStartTime();
t1 = t->GetEndTime();
t0 = tracks.GetStartTime();
t1 = tracks.GetEndTime();
}
} else {
// move t0 to valid range
if (t0 < 0) {
t0 = t->GetStartTime();
t0 = tracks.GetStartTime();
}
else if (t0 > t->GetEndTime()) {
t0 = t->GetEndTime();
else if (t0 > tracks.GetEndTime()) {
t0 = tracks.GetEndTime();
}
#if defined(EXPERIMENTAL_SEEK_BEHIND_CURSOR)
else {
init_seek = t0; //AC: init_seek is where playback will 'start'
t0 = t->GetStartTime();
t0 = tracks.GetStartTime();
}
#endif
}
t1 = t->GetEndTime();
t1 = tracks.GetEndTime();
}
else {
// maybe t1 < t0, with backwards scrubbing for instance
@@ -698,7 +696,7 @@ int ControlToolBar::PlayPlayRegion(const SelectedRegion &selectedRegion,
}
*/
token = gAudioIO->StartStream(
GetAllPlaybackTracks(*t, false, useMidi),
GetAllPlaybackTracks( tracks, false, useMidi ),
t0, t1, options);
}
if (token != 0) {
@@ -920,10 +918,10 @@ WaveTrackArray ControlToolBar::ChooseExistingRecordingTracks(
if (!strictRules && !selectedOnly)
return {};
auto trackList = p->GetTracks();
auto &trackList = TrackList::Get( *p );
std::vector<unsigned> channelCounts;
WaveTrackArray candidates;
const auto range = trackList->Leaders<WaveTrack>();
const auto range = trackList.Leaders<WaveTrack>();
for ( auto candidate : selectedOnly ? range + &Track::IsSelected : range ) {
// count channels in this track
const auto channels = TrackList::Channels( candidate );
@@ -1000,7 +998,7 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
WaveTrackArray existingTracks;
if (appendRecord) {
const auto trackRange = p->GetTracks()->Any< const WaveTrack >();
const auto trackRange = TrackList::Get( *p ).Any< const WaveTrack >();
// Try to find wave tracks to record into. (If any are selected,
// try to choose only from them; else if wave tracks exist, may record into any.)
@@ -1030,7 +1028,7 @@ void ControlToolBar::OnRecord(wxCommandEvent &evt)
// playback.
/* TODO: set up stereo tracks if that is how the user has set up
* their preferences, and choose sample format based on prefs */
transportTracks = GetAllPlaybackTracks(*p->GetTracks(), false, true);
transportTracks = GetAllPlaybackTracks(TrackList::Get( *p ), false, true);
for (const auto &wt : existingTracks) {
auto end = transportTracks.playbackTracks.end();
auto it = std::find(transportTracks.playbackTracks.begin(), end, wt);
@@ -1135,7 +1133,7 @@ bool ControlToolBar::DoRecord(AudacityProject &project,
// Get a copy of the track to be appended, to be pushed into
// undo history only later.
auto pending = std::static_pointer_cast<WaveTrack>(
p->GetTracks()->RegisterPendingChangedTrack(
TrackList::Get( *p ).RegisterPendingChangedTrack(
updater, wt.get() ) );
// End of current track is before or at recording start time.
@@ -1154,7 +1152,7 @@ bool ControlToolBar::DoRecord(AudacityProject &project,
}
transportTracks.captureTracks.push_back(pending);
}
p->GetTracks()->UpdatePendingTracks();
TrackList::Get( *p ).UpdatePendingTracks();
}
if( transportTracks.captureTracks.empty() )
@@ -1163,8 +1161,8 @@ bool ControlToolBar::DoRecord(AudacityProject &project,
wxString defaultTrackName, defaultRecordingTrackName;
// Count the tracks.
const auto trackList = p->GetTracks();
auto numTracks = trackList->Leaders<const WaveTrack>().size();
auto &trackList = TrackList::Get( *p );
auto numTracks = trackList.Leaders< const WaveTrack >().size();
auto recordingChannels = std::max(1L, gPrefs->Read(wxT("/AudioIO/RecordChannels"), 2));
@@ -1229,12 +1227,12 @@ bool ControlToolBar::DoRecord(AudacityProject &project,
newTrack->SetMinimized(true);
}
p->GetTracks()->RegisterPendingNewTrack( newTrack );
TrackList::Get( *p ).RegisterPendingNewTrack( newTrack );
transportTracks.captureTracks.push_back(newTrack);
// Bug 1548. New track needs the focus.
p->GetTrackPanel()->SetFocusedTrack( newTrack.get() );
}
p->GetTracks()->GroupChannels(*first, recordingChannels);
TrackList::Get( *p ).GroupChannels(*first, recordingChannels);
}
//Automated Input Level Adjustment Initialization
@@ -1341,7 +1339,7 @@ void ControlToolBar::SetupCutPreviewTracks(double WXUNUSED(playStart), double cu
ClearCutPreviewTracks();
AudacityProject *p = GetActiveProject();
if (p) {
auto trackRange = p->GetTracks()->Selected<const PlayableTrack>();
auto trackRange = TrackList::Get( *p ).Selected< const PlayableTrack >();
if( !trackRange.empty() ) {
auto cutPreviewTracks = TrackList::Create();
for (const auto track1 : trackRange) {
@@ -1501,11 +1499,11 @@ void ControlToolBar::StopScrolling()
void ControlToolBar::CommitRecording()
{
const auto project = GetActiveProject();
project->GetTracks()->ApplyPendingTracks();
TrackList::Get( *project ).ApplyPendingTracks();
}
void ControlToolBar::CancelRecording()
{
const auto project = GetActiveProject();
project->GetTracks()->ClearPendingTracks();
TrackList::Get( *project ).ClearPendingTracks();
}