1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-21 14:02:57 +02:00

Allow SelectTrack to select channels using 0.5 of a track.

This is a feature possibly only Audacity developers will actually use, but does allow for some cool use of stereo tracks.
This commit is contained in:
James Crook
2018-03-19 12:50:03 +00:00
parent 0a7d0068ec
commit 8f8429f9a5
2 changed files with 16 additions and 13 deletions

View File

@@ -164,8 +164,8 @@ static const wxString kModes[nModes] =
bool SelectTracksCommand::DefineParams( ShuttleParams & S ){ bool SelectTracksCommand::DefineParams( ShuttleParams & S ){
wxArrayString modes( nModes, kModes ); wxArrayString modes( nModes, kModes );
S.OptionalN( bHasFirstTrack).Define( mFirstTrack, wxT("First"), 0, 0, 100); S.OptionalN( bHasFirstTrack).Define( mFirstTrack, wxT("Track"), 0.0, 0.0, 100.0);
S.OptionalN( bHasLastTrack ).Define( mLastTrack, wxT("Last"), 0, 0, 100); S.OptionalN( bHasNumTracks ).Define( mNumTracks, wxT("TrackCount"), 1.0, 0.0, 100.0);
S.OptionalY( bHasMode ).DefineEnum( mMode, wxT("Mode"), 0, modes ); S.OptionalY( bHasMode ).DefineEnum( mMode, wxT("Mode"), 0, modes );
return true; return true;
@@ -180,7 +180,7 @@ void SelectTracksCommand::PopulateOrExchange(ShuttleGui & S)
{ {
S.SetStretchyCol( 2 ); S.SetStretchyCol( 2 );
S.Optional( bHasFirstTrack).TieTextBox(_("First Track:"),mFirstTrack); S.Optional( bHasFirstTrack).TieTextBox(_("First Track:"),mFirstTrack);
S.Optional( bHasLastTrack).TieTextBox(_("Last Track:"),mLastTrack); S.Optional( bHasNumTracks).TieTextBox(_("Track Count:"),mNumTracks);
} }
S.EndMultiColumn(); S.EndMultiColumn();
S.StartMultiColumn(2, wxALIGN_CENTER); S.StartMultiColumn(2, wxALIGN_CENTER);
@@ -193,17 +193,19 @@ void SelectTracksCommand::PopulateOrExchange(ShuttleGui & S)
bool SelectTracksCommand::Apply(const CommandContext &context) bool SelectTracksCommand::Apply(const CommandContext &context)
{ {
if( !bHasFirstTrack && !bHasLastTrack )
return true;
int index = 0; int index = 0;
TrackList *tracks = context.GetProject()->GetTracks(); TrackList *tracks = context.GetProject()->GetTracks();
int last = wxMax( mFirstTrack, mLastTrack ); // Stereo second tracks count as 0.5 of a track.
double last = mFirstTrack+mNumTracks;
double first = mFirstTrack;
bool bIsSecondChannel = false;
TrackListIterator iter(tracks); TrackListIterator iter(tracks);
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
bool sel = mFirstTrack <= index && index <= last; // Add 0.01 so we are free of rounding errors in comparisons.
// Optionally add 0.5 for second track which counts as is half a track
double track = index + 0.01 + (bIsSecondChannel ? 0.5 : 0.0);
bool sel = first <= track && track <= last;
if( mMode == 0 ){ // Set if( mMode == 0 ){ // Set
t->SetSelected(sel); t->SetSelected(sel);
} }
@@ -214,7 +216,8 @@ bool SelectTracksCommand::Apply(const CommandContext &context)
t->SetSelected(!sel); t->SetSelected(!sel);
} }
// Do second channel in stereo track too. // Do second channel in stereo track too.
if( !t->GetLinked() ) bIsSecondChannel = t->GetLinked();
if( !bIsSecondChannel )
++index; ++index;
t = iter.Next(); t = iter.Next();
} }

View File

@@ -88,11 +88,11 @@ public:
wxString ManualPage() override {return wxT("Audio_Selection");}; wxString ManualPage() override {return wxT("Audio_Selection");};
bool bHasFirstTrack; bool bHasFirstTrack;
bool bHasLastTrack; bool bHasNumTracks;
bool bHasMode; bool bHasMode;
int mFirstTrack; double mFirstTrack;
int mLastTrack; double mNumTracks;
int mMode; int mMode;
}; };