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

Bug1426: Update mixer board for change of set of selected tracks

This commit is contained in:
Paul Licameli 2016-06-26 11:24:11 -04:00
parent 21431d1982
commit ee7b3b2b89
3 changed files with 35 additions and 27 deletions

View File

@ -776,19 +776,16 @@ void MixerTrackCluster::OnPaint(wxPaintEvent & WXUNUSED(event))
wxRect bev(0, 0, clusterSize.GetWidth() - 1, clusterSize.GetHeight() - 1); wxRect bev(0, 0, clusterSize.GetWidth() - 1, clusterSize.GetHeight() - 1);
#ifdef EXPERIMENTAL_MIDI_OUT #ifdef EXPERIMENTAL_MIDI_OUT
if (mTrack->GetSelected()) auto selected = mTrack->GetSelected();
#else #else
if (mLeftTrack->GetSelected()) auto selected = mLeftTrack->GetSelected();
#endif #endif
{
for (unsigned int i = 0; i < 4; i++) // 4 gives a big bevel, but there were complaints about visibility otherwise. for (unsigned int i = 0; i < 4; i++) // 4 gives a big bevel, but there were complaints about visibility otherwise.
{ {
bev.Inflate(-1, -1); bev.Inflate(-1, -1);
AColor::Bevel(dc, false, bev); AColor::Bevel(dc, !selected, bev);
} }
}
else
AColor::Bevel(dc, true, bev);
} }

View File

@ -822,7 +822,7 @@ void TrackPanel::SelectNone()
TrackListIterator iter(mTracks); TrackListIterator iter(mTracks);
Track *t = iter.First(); Track *t = iter.First();
while (t) { while (t) {
t->SetSelected(false); SelectTrack(t, false, false);
t = iter.Next(); t = iter.Next();
} }
} }
@ -1196,6 +1196,10 @@ bool TrackPanel::HandleEscapeKey(bool down)
} }
mLastPickedTrack = mInitialLastPickedTrack; mLastPickedTrack = mInitialLastPickedTrack;
mViewInfo->selectedRegion = mInitialSelection; mViewInfo->selectedRegion = mInitialSelection;
// Refresh mixer board for change of set of selected tracks
if (MixerBoard* pMixerBoard = this->GetMixerBoard())
pMixerBoard->Refresh();
} }
break; break;
case IsZooming: case IsZooming:
@ -1845,18 +1849,28 @@ void TrackPanel::HandleSelect(wxMouseEvent & event)
SelectionHandleDrag(event, t); SelectionHandleDrag(event, t);
} }
void TrackPanel::SelectTrack(Track *pTrack, bool selected) void TrackPanel::SelectTrack(Track *pTrack, bool selected, bool updateLastPicked)
{ {
bool wasCorrect = (selected == pTrack->GetSelected());
if (selected) { if (selected) {
// This handles the case of linked tracks, selecting all channels // This handles the case of linked tracks, selecting all channels
mTracks->Select(pTrack, true); mTracks->Select(pTrack, true);
if (updateLastPicked)
mLastPickedTrack = pTrack; mLastPickedTrack = pTrack;
} }
else { else {
mTracks->Select(pTrack, false); mTracks->Select(pTrack, false);
if (pTrack == mLastPickedTrack) if (updateLastPicked && pTrack == mLastPickedTrack)
mLastPickedTrack = nullptr; mLastPickedTrack = nullptr;
} }
// Update mixer board, but only as needed so it does not flicker.
if (!wasCorrect) {
MixerBoard* pMixerBoard = this->GetMixerBoard();
if (pMixerBoard && (pTrack->GetKind() == Track::Wave))
pMixerBoard->RefreshTrackCluster(static_cast<WaveTrack*>(pTrack));
}
} }
void TrackPanel::SelectRangeOfTracks(Track *sTrack, Track *eTrack) void TrackPanel::SelectRangeOfTracks(Track *sTrack, Track *eTrack)
@ -1870,7 +1884,7 @@ void TrackPanel::SelectRangeOfTracks(Track *sTrack, Track *eTrack)
TrackListIterator iter(mTracks); TrackListIterator iter(mTracks);
sTrack = iter.StartWith(sTrack); sTrack = iter.StartWith(sTrack);
do { do {
mTracks->Select(sTrack); SelectTrack(sTrack, true);
if (sTrack == eTrack) { if (sTrack == eTrack) {
break; break;
} }
@ -2405,7 +2419,7 @@ void TrackPanel::MoveSnappingFreqSelection (int mouseYCoordinate,
mFreqSelTrack = wt; mFreqSelTrack = wt;
// SelectNone(); // SelectNone();
// mTracks->Select(pTrack); // SelectTrack(pTrack, true);
SetFocusedTrack(pTrack); SetFocusedTrack(pTrack);
} }
} }
@ -4972,9 +4986,6 @@ void TrackPanel::HandleLabelClick(wxMouseEvent & event)
if (event.ShiftDown()) { if (event.ShiftDown()) {
SelectTrack(t, !t->GetSelected()); SelectTrack(t, !t->GetSelected());
Refresh(false); Refresh(false);
MixerBoard* pMixerBoard = this->GetMixerBoard();
if (pMixerBoard && (t->GetKind() == Track::Wave))
pMixerBoard->RefreshTrackCluster((WaveTrack*)t);
return; return;
} }
@ -7261,7 +7272,7 @@ void TrackPanel::OnPrevTrack( bool shift )
pSelected = p->GetSelected(); pSelected = p->GetSelected();
if( tSelected && pSelected ) if( tSelected && pSelected )
{ {
mTracks->Select( t, false ); SelectTrack(t, false, false);
SetFocusedTrack( p ); // move focus to next track down SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p ); EnsureVisible( p );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7269,7 +7280,7 @@ void TrackPanel::OnPrevTrack( bool shift )
} }
if( tSelected && !pSelected ) if( tSelected && !pSelected )
{ {
mTracks->Select( p, true ); SelectTrack(p, true, false);
SetFocusedTrack( p ); // move focus to next track down SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p ); EnsureVisible( p );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7277,7 +7288,7 @@ void TrackPanel::OnPrevTrack( bool shift )
} }
if( !tSelected && pSelected ) if( !tSelected && pSelected )
{ {
mTracks->Select( p, false ); SelectTrack(p, false, false);
SetFocusedTrack( p ); // move focus to next track down SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p ); EnsureVisible( p );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7285,7 +7296,7 @@ void TrackPanel::OnPrevTrack( bool shift )
} }
if( !tSelected && !pSelected ) if( !tSelected && !pSelected )
{ {
mTracks->Select( t, true ); SelectTrack(t, true, false);
SetFocusedTrack( p ); // move focus to next track down SetFocusedTrack( p ); // move focus to next track down
EnsureVisible( p ); EnsureVisible( p );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7367,7 +7378,7 @@ void TrackPanel::OnNextTrack( bool shift )
nSelected = n->GetSelected(); nSelected = n->GetSelected();
if( tSelected && nSelected ) if( tSelected && nSelected )
{ {
mTracks->Select( t, false ); SelectTrack(t, false, false);
SetFocusedTrack( n ); // move focus to next track down SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n ); EnsureVisible( n );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7375,7 +7386,7 @@ void TrackPanel::OnNextTrack( bool shift )
} }
if( tSelected && !nSelected ) if( tSelected && !nSelected )
{ {
mTracks->Select( n, true ); SelectTrack(n, true, false);
SetFocusedTrack( n ); // move focus to next track down SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n ); EnsureVisible( n );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7383,7 +7394,7 @@ void TrackPanel::OnNextTrack( bool shift )
} }
if( !tSelected && nSelected ) if( !tSelected && nSelected )
{ {
mTracks->Select( n, false ); SelectTrack(n, false, false);
SetFocusedTrack( n ); // move focus to next track down SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n ); EnsureVisible( n );
MakeParentModifyState(false); MakeParentModifyState(false);
@ -7391,7 +7402,7 @@ void TrackPanel::OnNextTrack( bool shift )
} }
if( !tSelected && !nSelected ) if( !tSelected && !nSelected )
{ {
mTracks->Select( t, true ); SelectTrack(t, true, false);
SetFocusedTrack( n ); // move focus to next track down SetFocusedTrack( n ); // move focus to next track down
EnsureVisible( n ); EnsureVisible( n );
MakeParentModifyState(false); MakeParentModifyState(false);

View File

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