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:
parent
21431d1982
commit
ee7b3b2b89
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user