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(); auto flags = GetUpdateFlags();
if(!(flags & TracksSelectedFlag) || if(!(flags & TracksSelectedFlag) ||
(mViewInfo.selectedRegion.isPoint())) (mViewInfo.selectedRegion.isPoint()))
OnSelectAll(); OnSelectSomething();
} }
void AudacityProject::StopIfPaused() void AudacityProject::StopIfPaused()
@ -5374,17 +5374,27 @@ void AudacityProject::OnSplitNew()
RedrawProject(); RedrawProject();
} }
void AudacityProject::OnSelectSomething()
{
if( mViewInfo.selectedRegion.isPoint() )
OnSelectAll();
else
OnSelectAllTracks();
}
void AudacityProject::OnSelectAll() void AudacityProject::OnSelectAll()
{ {
TrackListIterator iter(GetTracks());
Track *t = iter.First();
while (t) {
t->SetSelected(true);
t = iter.Next();
}
mViewInfo.selectedRegion.setTimes( mViewInfo.selectedRegion.setTimes(
mTracks->GetMinOffset(), mTracks->GetEndTime()); 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); ModifyState(false);
@ -5393,6 +5403,19 @@ void AudacityProject::OnSelectAll()
mMixerBoard->Refresh(false); 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() void AudacityProject::OnSelectNone()
{ {
mViewInfo.selectedRegion.collapseToT0(); mViewInfo.selectedRegion.collapseToT0();
@ -5723,20 +5746,6 @@ void AudacityProject::OnSelectSyncLockSel()
mMixerBoard->Refresh(false); 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 Menu
// //

View File

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

View File

@ -2311,7 +2311,9 @@ bool AudacityProject::TryToMakeActionAllowed
if( (MissingFlags & ~( TimeSelectedFlag | WaveTracksSelectedFlag)) ) if( (MissingFlags & ~( TimeSelectedFlag | WaveTracksSelectedFlag)) )
return false; return false;
OnSelectAll(); // This was 'OnSelectAll'. Changing it to OnSelectSomething means if
// selecting all tracks is enough, we just do that.
OnSelectSomething();
flags = GetUpdateFlags(); flags = GetUpdateFlags();
bAllowed = ((flags & mask) == (flagsRqd & mask)); bAllowed = ((flags & mask) == (flagsRqd & mask));
return bAllowed; return bAllowed;
@ -4607,19 +4609,6 @@ void AudacityProject::Clear()
RedrawProject(); 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 // Utility function called by other zoom methods
void AudacityProject::Zoom(double level) void AudacityProject::Zoom(double level)
{ {