1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-29 14:48:39 +02:00

SelectAllIfNone now selects all time if none, and all tracks if none.

This means you can now select just a time, and get all tracks selected, or some tracks, and get all time selected.
One side effect of this is that if you select a label (only) and apply 'cut' you now just cut the label, rather than cutting all tracks.  If you select a label and apply echo, you now get an error message, rather than applying echo to all tracks.
This commit is contained in:
James Crook 2017-05-13 10:06:52 +01:00
parent c42a111a42
commit 0ac2d90d8a
2 changed files with 68 additions and 18 deletions

View File

@ -5374,33 +5374,77 @@ void AudacityProject::OnSplitNew()
RedrawProject();
}
void AudacityProject::OnSelectSomething()
int AudacityProject::CountSelectedWaveTracks()
{
if( mViewInfo.selectedRegion.isPoint() )
OnSelectAll();
else
OnSelectAllTracks();
TrackListIterator iter(GetTracks());
Track *t = iter.First();
int count =0;
for (Track *t = iter.First(); t; t = iter.Next()) {
if( (t->GetKind() == Track::Wave) && t->GetSelected() )
count++;
}
return count;
}
void AudacityProject::OnSelectAll()
int AudacityProject::CountSelectedTracks()
{
mViewInfo.selectedRegion.setTimes(
mTracks->GetMinOffset(), mTracks->GetEndTime());
OnSelectAllTracks();
TrackListIterator iter(GetTracks());
Track *t = iter.First();
int count =0;
for (Track *t = iter.First(); t; t = iter.Next()) {
if( t->GetSelected() )
count++;
}
return count;
}
void AudacityProject::OnSelectTimeAndTracks(bool bAllTime, bool bAllTracks)
{
if( bAllTime )
mViewInfo.selectedRegion.setTimes(
mTracks->GetMinOffset(), mTracks->GetEndTime());
if( bAllTracks ){
TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) {
t->SetSelected(true);
}
ModifyState(false);
mTrackPanel->Refresh(false);
if (mMixerBoard)
mMixerBoard->Refresh(false);}
}
void AudacityProject::OnSelectAllTime()
{
OnSelectTimeAndTracks( true, false );
}
void AudacityProject::OnSelectAllTracks()
{
TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) {
t->SetSelected(true);
}
OnSelectTimeAndTracks( false, true );
}
ModifyState(false);
void AudacityProject::OnSelectAll()
{
OnSelectTimeAndTracks( true, true );
}
mTrackPanel->Refresh(false);
if (mMixerBoard)
mMixerBoard->Refresh(false);
// This function selects all tracks if no tracks selected,
// and all time if no time selected.
// There is an argument for making it just count wave tracks,
// However you could then not select a label and cut it,
// without this function selecting all tracks.
void AudacityProject::OnSelectSomething()
{
bool bTime = mViewInfo.selectedRegion.isPoint();
bool bTracks = CountSelectedTracks() == 0;
if( bTime || bTracks )
OnSelectTimeAndTracks(bTime,bTracks);
}
void AudacityProject::SelectNone()

View File

@ -275,9 +275,16 @@ void OnSplitLabels();
void OnJoinLabels();
void OnDisjoinLabels();
void OnSelectTimeAndTracks(bool bAllTime, bool bAllTracks);
void OnSelectAllTime();
void OnSelectAllTracks();
void OnSelectAll();
void OnSelectSomething();
void OnSelectNone();
private:
int CountSelectedWaveTracks();
int CountSelectedTracks();
public:
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
void OnToggleSpectralSelection();
void DoNextPeakFrequency(bool up);
@ -304,7 +311,6 @@ void OnSelectNextClip();
void OnSelectClip(bool next);
void OnSelectCursorStoredCursor();
void OnSelectSyncLockSel();
void OnSelectAllTracks();
// View Menu