1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-15 16:17:41 +02:00

Bug 1484 - Cannot one-step extend/contract selections vertically or horizontally to specific TrackSelFunc

Progresses us a little towards closing.  Ctrl-Click on waveform now removes track selection status, not just adds it, and we don't flicker on again subsequently when we drag.  Ctrl-Click won't remove the last remaining selection (by design).  Shift-Click can now reduce us down to one track, rather than the previous behaviour when reducing track selection.
This commit is contained in:
James Crook 2016-10-03 13:28:25 +01:00
parent 967275528b
commit 37a0cd3af6
2 changed files with 24 additions and 10 deletions

View File

@ -1871,6 +1871,16 @@ void TrackPanel::SelectTrack(Track *pTrack, bool selected, bool updateLastPicked
}
}
size_t TrackPanel::GetSelectedTrackCount(){
size_t count = 0;
TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) {
count += t->GetSelected() ? 1:0;
}
return count;
}
void TrackPanel::SelectRangeOfTracks(Track *sTrack, Track *eTrack)
{
if (eTrack) {
@ -1907,18 +1917,18 @@ void TrackPanel::ChangeSelectionOnShiftClick(Track * pTrack){
TrackListIterator iter(GetTracks());
for (Track *t = iter.First(); t; t = iter.Next()) {
const bool isSelected = t->GetSelected();
// If our track is after the first, extend from the first.
if( t == pTrack ){
pExtendFrom = pFirst;
}
// Record first and last selected.
if( isSelected ){
if( !pFirst )
pFirst = t;
pLast = t;
}
// If our track is at or after the first, extend from the first.
if( t == pTrack ){
pExtendFrom = pFirst;
}
// Our track was the first or earlier. Extend from the last.
}
// Our track was earlier than the first. Extend from the last.
if( !pExtendFrom )
pExtendFrom = pLast;
@ -1976,10 +1986,12 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
if( bShiftDown )
ChangeSelectionOnShiftClick( pTrack );
if( bCtrlDown ){
//bool bIsSelected = pTrack->GetSelected();
bool bIsSelected = false;
bool bIsSelected = pTrack->GetSelected();
//bool bIsSelected = true;
// could set bIsSelected true here, but toggling is more technically correct.
// if we want to match behaviour in Track Control Panel.
// Don't toggle away the last selected track.
if( !bIsSelected || GetSelectedTrackCount() > 1 )
SelectTrack( pTrack, !bIsSelected, false );
}
@ -2821,6 +2833,7 @@ void TrackPanel::SelectionHandleDrag(wxMouseEvent & event, Track *clickedTrack)
// Handle which tracks are selected
Track *sTrack = pTrack;
Track *eTrack = FindTrack(x, y, false, false, NULL);
if( !event.ControlDown() )
SelectRangeOfTracks(sTrack, eTrack);
#ifdef USE_MIDI

View File

@ -291,6 +291,7 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel {
// AS: Selection handling
void SelectTrack(Track *track, bool selected, bool updateLastPicked = true);
void SelectRangeOfTracks(Track *sTrack, Track *eTrack);
size_t GetSelectedTrackCount();
virtual void HandleSelect(wxMouseEvent & event);
virtual void SelectionHandleDrag(wxMouseEvent &event, Track *pTrack);