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:
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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")
|
||||
|
Reference in New Issue
Block a user