From 35fe313f307ca9866378085fb31c25d63e8e73c5 Mon Sep 17 00:00:00 2001 From: James Crook Date: Thu, 11 May 2017 22:36:55 +0100 Subject: [PATCH] Smarter SelectAllIfNone Now if there is a time selection and no tracks selected, then just select all the tracks, preserving the time selection. This helps in the case a user has made a time selection, e.g. with selection toolbar, and then clicked on track panel, losing the selection of tracks but preserving the time selection. I also shortened some repeated cut-and-pasted code. --- src/Menus.cpp | 53 +++++++++++++++++++++++++++++-------------------- src/Menus.h | 1 + src/Project.cpp | 17 +++------------- 3 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/Menus.cpp b/src/Menus.cpp index 7f21ae22a..875b56525 100644 --- a/src/Menus.cpp +++ b/src/Menus.cpp @@ -2082,7 +2082,7 @@ void AudacityProject::SelectAllIfNone() auto flags = GetUpdateFlags(); if(!(flags & TracksSelectedFlag) || (mViewInfo.selectedRegion.isPoint())) - OnSelectAll(); + OnSelectSomething(); } void AudacityProject::StopIfPaused() @@ -5374,17 +5374,27 @@ void AudacityProject::OnSplitNew() RedrawProject(); } +void AudacityProject::OnSelectSomething() +{ + if( mViewInfo.selectedRegion.isPoint() ) + OnSelectAll(); + else + OnSelectAllTracks(); +} + void AudacityProject::OnSelectAll() { - TrackListIterator iter(GetTracks()); - - Track *t = iter.First(); - while (t) { - t->SetSelected(true); - t = iter.Next(); - } mViewInfo.selectedRegion.setTimes( mTracks->GetMinOffset(), mTracks->GetEndTime()); + OnSelectAllTracks(); +} + +void AudacityProject::OnSelectAllTracks() +{ + TrackListIterator iter(GetTracks()); + for (Track *t = iter.First(); t; t = iter.Next()) { + t->SetSelected(true); + } ModifyState(false); @@ -5393,6 +5403,19 @@ void AudacityProject::OnSelectAll() mMixerBoard->Refresh(false); } +void AudacityProject::SelectNone() +{ + TrackListIterator iter(GetTracks()); + Track *t = iter.First(); + while (t) { + t->SetSelected(false); + t = iter.Next(); + } + mTrackPanel->Refresh(false); + if (mMixerBoard) + mMixerBoard->Refresh(false); +} + void AudacityProject::OnSelectNone() { mViewInfo.selectedRegion.collapseToT0(); @@ -5723,20 +5746,6 @@ void AudacityProject::OnSelectSyncLockSel() mMixerBoard->Refresh(false); } -void AudacityProject::OnSelectAllTracks() -{ - 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); -} - // // View Menu // diff --git a/src/Menus.h b/src/Menus.h index 5aa72e64d..379b919c5 100644 --- a/src/Menus.h +++ b/src/Menus.h @@ -276,6 +276,7 @@ void OnJoinLabels(); void OnDisjoinLabels(); void OnSelectAll(); +void OnSelectSomething(); void OnSelectNone(); #ifdef EXPERIMENTAL_SPECTRAL_EDITING void OnToggleSpectralSelection(); diff --git a/src/Project.cpp b/src/Project.cpp index 8b712bfd1..164b4237c 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -2311,7 +2311,9 @@ bool AudacityProject::TryToMakeActionAllowed if( (MissingFlags & ~( TimeSelectedFlag | WaveTracksSelectedFlag)) ) return false; - OnSelectAll(); + // This was 'OnSelectAll'. Changing it to OnSelectSomething means if + // selecting all tracks is enough, we just do that. + OnSelectSomething(); flags = GetUpdateFlags(); bAllowed = ((flags & mask) == (flagsRqd & mask)); return bAllowed; @@ -4607,19 +4609,6 @@ void AudacityProject::Clear() RedrawProject(); } -void AudacityProject::SelectNone() -{ - TrackListIterator iter(GetTracks()); - Track *t = iter.First(); - while (t) { - t->SetSelected(false); - t = iter.Next(); - } - mTrackPanel->Refresh(false); - if (mMixerBoard) - mMixerBoard->Refresh(false); -} - // Utility function called by other zoom methods void AudacityProject::Zoom(double level) {