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

Disable Undo and Redo while there are pending changes in TrackList...

... But perhaps we are developing the means to relax even this ban safely.

For instance, why not undo a mistaken AddLabelPlaying command (Ctrl+M) without
stopping the recording?
This commit is contained in:
Paul Licameli 2018-01-10 21:40:26 -05:00
parent 43776f5263
commit fa0fb7d8e5
3 changed files with 23 additions and 5 deletions

View File

@ -1962,6 +1962,7 @@ void AudacityProject::ModifyUndoMenuItems()
mCommandManager.Modify(wxT("Undo"),
wxString::Format(_("&Undo %s"),
desc));
mCommandManager.Enable(wxT("Undo"), this->UndoAvailable());
}
else {
mCommandManager.Modify(wxT("Undo"),
@ -1973,7 +1974,7 @@ void AudacityProject::ModifyUndoMenuItems()
mCommandManager.Modify(wxT("Redo"),
wxString::Format(_("&Redo %s"),
desc));
mCommandManager.Enable(wxT("Redo"), true);
mCommandManager.Enable(wxT("Redo"), this->RedoAvailable());
}
else {
mCommandManager.Modify(wxT("Redo"),
@ -2153,10 +2154,10 @@ CommandFlag AudacityProject::GetUpdateFlags(bool checkActive)
if (!mLastEffect.IsEmpty())
flags |= HasLastEffectFlag;
if (GetUndoManager()->UndoAvailable())
if (UndoAvailable())
flags |= UndoAvailableFlag;
if (GetUndoManager()->RedoAvailable())
if (RedoAvailable())
flags |= RedoAvailableFlag;
if (ZoomInAvailable() && (flags & TracksExistFlag))
@ -4809,7 +4810,7 @@ void AudacityProject::OnPrint(const CommandContext &WXUNUSED(context) )
void AudacityProject::OnUndo(const CommandContext &WXUNUSED(context) )
{
if (!GetUndoManager()->UndoAvailable()) {
if (!UndoAvailable()) {
AudacityMessageBox(_("Nothing to undo"));
return;
}
@ -4839,7 +4840,7 @@ void AudacityProject::OnUndo(const CommandContext &WXUNUSED(context) )
void AudacityProject::OnRedo(const CommandContext &WXUNUSED(context) )
{
if (!GetUndoManager()->RedoAvailable()) {
if (!RedoAvailable()) {
AudacityMessageBox(_("Nothing to redo"));
return;
}

View File

@ -4487,6 +4487,20 @@ void AudacityProject::InitialState()
this->UpdateMixerBoard();
}
bool AudacityProject::UndoAvailable()
{
auto trackList = GetTracks();
return GetUndoManager()->UndoAvailable() &&
!GetTracks()->HasPendingTracks();
}
bool AudacityProject::RedoAvailable()
{
auto trackList = GetTracks();
return GetUndoManager()->RedoAvailable() &&
!GetTracks()->HasPendingTracks();
}
void AudacityProject::PushState(const wxString &desc, const wxString &shortDesc)
{
PushState(desc, shortDesc, UndoPush::AUTOSAVE);

View File

@ -556,6 +556,9 @@ public:
bool TryToMakeActionAllowed
( CommandFlag & flags, CommandFlag flagsRqd, CommandFlag mask );
bool UndoAvailable();
bool RedoAvailable();
void PushState(const wxString &desc, const wxString &shortDesc); // use UndoPush::AUTOSAVE
void PushState(const wxString &desc, const wxString &shortDesc, UndoPush flags);
void RollbackState();