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:
parent
43776f5263
commit
fa0fb7d8e5
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user