1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-21 08:27:13 +01:00

MixerBoard listens to TrackList for insert, delete, permute...

... Which is also sufficient to detect undo/redo/rollback

And detects more often than undo state changes, so that if you drag a track
in TrackPanel, the same permutation is seen at once in MixerBoard, even before
button-up
This commit is contained in:
Paul Licameli
2018-02-05 19:04:23 -05:00
parent 7150d43083
commit 5ab2faceea
7 changed files with 47 additions and 112 deletions

View File

@@ -515,7 +515,6 @@ void DoRemoveTracks( AudacityProject &project )
{
auto tracks = project.GetTracks();
auto trackPanel = project.GetTrackPanel();
auto mixerBoard = project.GetMixerBoard();
std::vector<Track*> toRemove;
for (auto track : tracks->Selected())
@@ -528,10 +527,6 @@ void DoRemoveTracks( AudacityProject &project )
f = *--found;
}
if (mixerBoard)
for (auto track : tracks->Selected<PlayableTrack>())
mixerBoard->RemoveTrackCluster(track);
for (auto track : toRemove)
tracks->Remove(track);
@@ -554,9 +549,6 @@ void DoRemoveTracks( AudacityProject &project )
trackPanel->UpdateViewIfNoTracks();
trackPanel->Refresh(false);
if (mixerBoard)
mixerBoard->Refresh(true);
}
void DoMoveTrack
@@ -564,11 +556,9 @@ void DoMoveTrack
{
auto trackPanel = project.GetTrackPanel();
auto tracks = project.GetTracks();
auto mixerBoard = project.GetMixerBoard(); // Update mixer board.
wxString longDesc, shortDesc;
auto pt = dynamic_cast<PlayableTrack*>(target);
switch (choice)
{
case OnMoveTopID:
@@ -576,32 +566,27 @@ void DoMoveTrack
longDesc = _("Moved '%s' to Top");
shortDesc = _("Move Track to Top");
while (tracks->CanMoveUp(target)) {
if (tracks->Move(target, true)) {
if (mixerBoard && pt)
mixerBoard->MoveTrackCluster(pt, true);
}
}
// TODO: write TrackList::Rotate to do this in one step and avoid emitting
// an event for each swap
while (tracks->CanMoveUp(target))
tracks->Move(target, true);
break;
case OnMoveBottomID:
/* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/
longDesc = _("Moved '%s' to Bottom");
shortDesc = _("Move Track to Bottom");
while (tracks->CanMoveDown(target)) {
if(tracks->Move(target, false)) {
if (mixerBoard && pt)
mixerBoard->MoveTrackCluster(pt, false);
}
}
// TODO: write TrackList::Rotate to do this in one step and avoid emitting
// an event for each swap
while (tracks->CanMoveDown(target))
tracks->Move(target, false);
break;
default:
bool bUp = (OnMoveUpID == choice);
if (tracks->Move(target, bUp)) {
if (mixerBoard && pt)
mixerBoard->MoveTrackCluster(pt, bUp);
}
tracks->Move(target, bUp);
longDesc =
/* i18n-hint: Past tense of 'to move', as in 'moved audio track up'.*/
bUp? _("Moved '%s' Up")