mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-17 17:17:40 +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:
parent
967275528b
commit
37a0cd3af6
@ -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)
|
void TrackPanel::SelectRangeOfTracks(Track *sTrack, Track *eTrack)
|
||||||
{
|
{
|
||||||
if (eTrack) {
|
if (eTrack) {
|
||||||
@ -1907,18 +1917,18 @@ void TrackPanel::ChangeSelectionOnShiftClick(Track * pTrack){
|
|||||||
TrackListIterator iter(GetTracks());
|
TrackListIterator iter(GetTracks());
|
||||||
for (Track *t = iter.First(); t; t = iter.Next()) {
|
for (Track *t = iter.First(); t; t = iter.Next()) {
|
||||||
const bool isSelected = t->GetSelected();
|
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.
|
// Record first and last selected.
|
||||||
if( isSelected ){
|
if( isSelected ){
|
||||||
if( !pFirst )
|
if( !pFirst )
|
||||||
pFirst = t;
|
pFirst = t;
|
||||||
pLast = 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 )
|
if( !pExtendFrom )
|
||||||
pExtendFrom = pLast;
|
pExtendFrom = pLast;
|
||||||
|
|
||||||
@ -1976,11 +1986,13 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
if( bShiftDown )
|
if( bShiftDown )
|
||||||
ChangeSelectionOnShiftClick( pTrack );
|
ChangeSelectionOnShiftClick( pTrack );
|
||||||
if( bCtrlDown ){
|
if( bCtrlDown ){
|
||||||
//bool bIsSelected = pTrack->GetSelected();
|
bool bIsSelected = pTrack->GetSelected();
|
||||||
bool bIsSelected = false;
|
//bool bIsSelected = true;
|
||||||
// could set bIsSelected true here, but toggling is more technically correct.
|
// could set bIsSelected true here, but toggling is more technically correct.
|
||||||
// if we want to match behaviour in Track Control Panel.
|
// if we want to match behaviour in Track Control Panel.
|
||||||
SelectTrack( pTrack, !bIsSelected, false );
|
// Don't toggle away the last selected track.
|
||||||
|
if( !bIsSelected || GetSelectedTrackCount() > 1 )
|
||||||
|
SelectTrack( pTrack, !bIsSelected, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
double value;
|
double value;
|
||||||
@ -2070,7 +2082,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
// Not shift-down, choose boundary only within snapping
|
// Not shift-down, choose boundary only within snapping
|
||||||
@ -2821,7 +2833,8 @@ void TrackPanel::SelectionHandleDrag(wxMouseEvent & event, Track *clickedTrack)
|
|||||||
// Handle which tracks are selected
|
// Handle which tracks are selected
|
||||||
Track *sTrack = pTrack;
|
Track *sTrack = pTrack;
|
||||||
Track *eTrack = FindTrack(x, y, false, false, NULL);
|
Track *eTrack = FindTrack(x, y, false, false, NULL);
|
||||||
SelectRangeOfTracks(sTrack, eTrack);
|
if( !event.ControlDown() )
|
||||||
|
SelectRangeOfTracks(sTrack, eTrack);
|
||||||
|
|
||||||
#ifdef USE_MIDI
|
#ifdef USE_MIDI
|
||||||
if (mStretching) {
|
if (mStretching) {
|
||||||
|
@ -291,6 +291,7 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel {
|
|||||||
// AS: Selection handling
|
// AS: Selection handling
|
||||||
void SelectTrack(Track *track, bool selected, bool updateLastPicked = true);
|
void SelectTrack(Track *track, bool selected, bool updateLastPicked = true);
|
||||||
void SelectRangeOfTracks(Track *sTrack, Track *eTrack);
|
void SelectRangeOfTracks(Track *sTrack, Track *eTrack);
|
||||||
|
size_t GetSelectedTrackCount();
|
||||||
virtual void HandleSelect(wxMouseEvent & event);
|
virtual void HandleSelect(wxMouseEvent & event);
|
||||||
virtual void SelectionHandleDrag(wxMouseEvent &event, Track *pTrack);
|
virtual void SelectionHandleDrag(wxMouseEvent &event, Track *pTrack);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user