1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-23 07:40:05 +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);
#ifdef EXPERIMENTAL_MIDI_OUT
if (mTrack->GetSelected())
auto selected = mTrack->GetSelected();
#else
if (mLeftTrack->GetSelected())
auto selected = mLeftTrack->GetSelected();
#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);
AColor::Bevel(dc, false, bev);
}
bev.Inflate(-1, -1);
AColor::Bevel(dc, !selected, bev);
}
else
AColor::Bevel(dc, true, bev);
}

View File

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

View File

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