1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-19 09:01:15 +02: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

@@ -2,7 +2,6 @@
#include "../AudacityApp.h" // for EVT_CLIPBOARD_CHANGE
#include "../LabelTrack.h"
#include "../Menus.h"
#include "../MixerBoard.h"
#include "../NoteTrack.h"
#include "../Prefs.h"
#include "../Project.h"
@@ -219,7 +218,6 @@ void DoUndo(AudacityProject &project)
{
auto trackPanel = project.GetTrackPanel();
auto &undoManager = *project.GetUndoManager();
auto mixerBoard = project.GetMixerBoard();
auto historyWindow = project.GetHistoryWindow();
if (!project.UndoAvailable()) {
@@ -239,10 +237,6 @@ void DoUndo(AudacityProject &project)
project.RedrawProject();
if (mixerBoard)
// Mixer board may need to change for selection state and pan/gain
mixerBoard->Refresh();
MenuManager::ModifyUndoMenuItems(project);
}
@@ -260,7 +254,6 @@ void OnRedo(const CommandContext &context)
auto &project = context.project;
auto trackPanel = project.GetTrackPanel();
auto &undoManager = *project.GetUndoManager();
auto mixerBoard = project.GetMixerBoard();
auto historyWindow = project.GetHistoryWindow();
if (!project.RedoAvailable()) {
@@ -279,10 +272,6 @@ void OnRedo(const CommandContext &context)
project.RedrawProject();
if (mixerBoard)
// Mixer board may need to change for selection state and pan/gain
mixerBoard->Refresh();
MenuManager::ModifyUndoMenuItems(project);
}

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")