1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-05 14:18:53 +02:00

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.
This commit is contained in:
James Crook 2017-05-11 22:36:55 +01:00
parent ddb8db8dd7
commit 35fe313f30
3 changed files with 35 additions and 36 deletions

View File

@ -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
//

View File

@ -276,6 +276,7 @@ void OnJoinLabels();
void OnDisjoinLabels();
void OnSelectAll();
void OnSelectSomething();
void OnSelectNone();
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
void OnToggleSpectralSelection();

View File

@ -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)
{