1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 08:09:32 +02:00

Use an enumeration for UndoManager::PushState

This commit is contained in:
Paul Licameli 2016-02-24 12:06:29 -05:00
parent 73ced7b93f
commit cd9bd79d83
9 changed files with 44 additions and 35 deletions

View File

@ -2067,7 +2067,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt)
{ {
p->PushState(_("Modified Label"), p->PushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
PUSH_CONSOLIDATE); UndoPush::CONSOLIDATE);
} }
break; break;
@ -2082,7 +2082,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt)
{ {
p->PushState(_("Modified Label"), p->PushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
true /* consolidate */); UndoPush::CONSOLIDATE);
} }
break; break;
@ -2094,7 +2094,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt)
DeleteLabel(ndx); DeleteLabel(ndx);
p->PushState(_("Deleted Label"), p->PushState(_("Deleted Label"),
_("Label Edit"), _("Label Edit"),
true /* consolidate */); UndoPush::CONSOLIDATE);
} }
break; break;
} }

View File

@ -406,7 +406,7 @@ void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/)
mProject->RefreshTPTrack(mLeftTrack); mProject->RefreshTPTrack(mLeftTrack);
#endif #endif
if (bWantPushState) if (bWantPushState)
mProject->TP_PushState(_("Moved gain slider"), _("Gain"), PUSH_CONSOLIDATE ); mProject->TP_PushState(_("Moved gain slider"), _("Gain"), UndoPush::CONSOLIDATE );
} }
void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/) void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/)
@ -425,7 +425,7 @@ void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/)
#endif #endif
if (bWantPushState) if (bWantPushState)
mProject->TP_PushState(_("Moved pan slider"), _("Pan"), PUSH_CONSOLIDATE ); mProject->TP_PushState(_("Moved pan slider"), _("Pan"), UndoPush::CONSOLIDATE );
} }
void MixerTrackCluster::ResetMeter(const bool bResetClipping) void MixerTrackCluster::ResetMeter(const bool bResetClipping)

View File

@ -4001,12 +4001,12 @@ void AudacityProject::InitialState()
void AudacityProject::PushState(const wxString &desc, const wxString &shortDesc) void AudacityProject::PushState(const wxString &desc, const wxString &shortDesc)
{ {
PushState(desc, shortDesc, PUSH_AUTOSAVE); PushState(desc, shortDesc, UndoPush::AUTOSAVE);
} }
void AudacityProject::PushState(const wxString &desc, void AudacityProject::PushState(const wxString &desc,
const wxString &shortDesc, const wxString &shortDesc,
int flags ) UndoPush flags )
{ {
GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion,
desc, shortDesc, flags); desc, shortDesc, flags);
@ -4033,7 +4033,7 @@ void AudacityProject::PushState(const wxString &desc,
if (GetTracksFitVerticallyZoomed()) if (GetTracksFitVerticallyZoomed())
this->DoZoomFitV(); this->DoZoomFitV();
if( (flags & PUSH_AUTOSAVE)!= 0) if((flags & UndoPush::AUTOSAVE) != UndoPush::MINIMAL)
AutoSave(); AutoSave();
} }
@ -4707,7 +4707,7 @@ void AudacityProject::RefreshTPTrack(Track* pTrk, bool refreshbacking /*= true*/
// TrackPanel callback method // TrackPanel callback method
void AudacityProject::TP_PushState(const wxString &desc, const wxString &shortDesc, void AudacityProject::TP_PushState(const wxString &desc, const wxString &shortDesc,
int flags) UndoPush flags)
{ {
PushState(desc, shortDesc, flags); PushState(desc, shortDesc, flags);
} }
@ -4973,7 +4973,7 @@ void AudacityProject::SetTrackGain(Track * track, LWSlider * slider)
if (link) if (link)
link->SetGain(newValue); link->SetGain(newValue);
PushState(_("Adjusted gain"), _("Gain"), PUSH_CONSOLIDATE); PushState(_("Adjusted gain"), _("Gain"), UndoPush::CONSOLIDATE);
GetTrackPanel()->RefreshTrack(track); GetTrackPanel()->RefreshTrack(track);
} }
@ -4990,7 +4990,7 @@ void AudacityProject::SetTrackPan(Track * track, LWSlider * slider)
if (link) if (link)
link->SetPan(newValue); link->SetPan(newValue);
PushState(_("Adjusted Pan"), _("Pan"), PUSH_CONSOLIDATE); PushState(_("Adjusted Pan"), _("Pan"), UndoPush::CONSOLIDATE);
GetTrackPanel()->RefreshTrack(track); GetTrackPanel()->RefreshTrack(track);
} }

View File

@ -90,6 +90,7 @@ class Regions;
class LWSlider; class LWSlider;
class UndoManager; class UndoManager;
enum class UndoPush;
AudacityProject *CreateNewAudacityProject(); AudacityProject *CreateNewAudacityProject();
AUDACITY_DLL_API AudacityProject *GetActiveProject(); AUDACITY_DLL_API AudacityProject *GetActiveProject();
@ -399,7 +400,7 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame,
virtual ToolsToolBar * TP_GetToolsToolBar(); virtual ToolsToolBar * TP_GetToolsToolBar();
virtual void TP_PushState(const wxString &longDesc, const wxString &shortDesc, virtual void TP_PushState(const wxString &longDesc, const wxString &shortDesc,
int flags) override; UndoPush flags) override;
virtual void TP_ModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after virtual void TP_ModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects // a crash, as it can take many seconds for large (eg. 10 track-hours) projects
virtual void TP_RedrawScrollbars(); virtual void TP_RedrawScrollbars();
@ -486,8 +487,8 @@ public:
static void AllProjectsDeleteLock(); static void AllProjectsDeleteLock();
static void AllProjectsDeleteUnlock(); static void AllProjectsDeleteUnlock();
void PushState(const wxString &desc, const wxString &shortDesc); // use PUSH_AUTOSAVE void PushState(const wxString &desc, const wxString &shortDesc); // use UndoPush::AUTOSAVE
void PushState(const wxString &desc, const wxString &shortDesc, int flags); void PushState(const wxString &desc, const wxString &shortDesc, UndoPush flags);
void RollbackState(); void RollbackState();
private: private:

View File

@ -1493,14 +1493,14 @@ void TrackPanel::OnPaint(wxPaintEvent & /* event */)
/// Makes our Parent (well, whoever is listening to us) push their state. /// Makes our Parent (well, whoever is listening to us) push their state.
/// this causes application state to be preserved on a stack for undo ops. /// this causes application state to be preserved on a stack for undo ops.
void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc, void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc,
int flags) UndoPush flags)
{ {
mListener->TP_PushState(desc, shortDesc, flags); mListener->TP_PushState(desc, shortDesc, flags);
} }
void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc) void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc)
{ {
MakeParentPushState(desc, shortDesc, PUSH_AUTOSAVE); MakeParentPushState(desc, shortDesc, UndoPush::AUTOSAVE);
} }
void TrackPanel::MakeParentModifyState(bool bWantsAutoSave) void TrackPanel::MakeParentModifyState(bool bWantsAutoSave)
@ -3306,7 +3306,7 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge,
break; break;
} }
MakeParentPushState(_("Stretch Note Track"), _("Stretch"), MakeParentPushState(_("Stretch Note Track"), _("Stretch"),
PUSH_CONSOLIDATE | PUSH_AUTOSAVE); UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE);
mStretched = true; mStretched = true;
Refresh(false); Refresh(false);
} }
@ -3837,7 +3837,7 @@ void TrackPanel::HandleSlide(wxMouseEvent & event)
consolidate = true; consolidate = true;
} }
MakeParentPushState(msg, _("Time-Shift"), MakeParentPushState(msg, _("Time-Shift"),
consolidate ? (PUSH_CONSOLIDATE) : (PUSH_AUTOSAVE)); consolidate ? (UndoPush::CONSOLIDATE) : (UndoPush::AUTOSAVE));
} }
} }
@ -5176,7 +5176,7 @@ void TrackPanel::HandleSampleEditingButtonUp( wxMouseEvent & WXUNUSED(event))
mDrawingTrack=NULL; //Set this to NULL so it will catch improper drag events. mDrawingTrack=NULL; //Set this to NULL so it will catch improper drag events.
MakeParentPushState(_("Moved Samples"), MakeParentPushState(_("Moved Samples"),
_("Sample Edit"), _("Sample Edit"),
PUSH_CONSOLIDATE|PUSH_AUTOSAVE); UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE);
} }
@ -5426,7 +5426,7 @@ void TrackPanel::HandleSliders(wxMouseEvent &event, bool pan)
#endif #endif
MakeParentPushState(pan ? _("Moved pan slider") : _("Moved gain slider"), MakeParentPushState(pan ? _("Moved pan slider") : _("Moved gain slider"),
pan ? _("Pan") : _("Gain"), pan ? _("Pan") : _("Gain"),
PUSH_CONSOLIDATE); UndoPush::CONSOLIDATE);
#ifdef EXPERIMENTAL_MIDI_OUT #ifdef EXPERIMENTAL_MIDI_OUT
} else { } else {
MakeParentPushState(_("Moved velocity slider"), _("Velocity"), true); MakeParentPushState(_("Moved velocity slider"), _("Velocity"), true);
@ -6441,7 +6441,7 @@ void TrackPanel::OnKeyDown(wxKeyEvent & event)
if (lt->OnKeyDown(mViewInfo->selectedRegion, event)) if (lt->OnKeyDown(mViewInfo->selectedRegion, event))
MakeParentPushState(_("Modified Label"), MakeParentPushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
PUSH_CONSOLIDATE); UndoPush::CONSOLIDATE);
// Make sure caret is in view // Make sure caret is in view
int x; int x;
@ -6485,7 +6485,7 @@ void TrackPanel::OnChar(wxKeyEvent & event)
if (((LabelTrack *)t)->OnChar(mViewInfo->selectedRegion, event)) if (((LabelTrack *)t)->OnChar(mViewInfo->selectedRegion, event))
MakeParentPushState(_("Modified Label"), MakeParentPushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
PUSH_CONSOLIDATE); UndoPush::CONSOLIDATE);
// If selection modified, refresh // If selection modified, refresh
// Otherwise, refresh track display if the keystroke was handled // Otherwise, refresh track display if the keystroke was handled
@ -6737,7 +6737,7 @@ bool TrackPanel::HandleTrackLocationMouseEvent(WaveTrack * track, wxRect &rect,
} }
} }
MakeParentPushState(_("Merged Clips"),_("Merge"), PUSH_CONSOLIDATE); MakeParentPushState(_("Merged Clips"),_("Merge"), UndoPush::CONSOLIDATE);
handled = true; handled = true;
} }
} }
@ -6886,7 +6886,7 @@ void TrackPanel::HandleGlyphDragRelease(LabelTrack * lTrack, wxMouseEvent & even
*mViewInfo, &mViewInfo->selectedRegion)) { *mViewInfo, &mViewInfo->selectedRegion)) {
MakeParentPushState(_("Modified Label"), MakeParentPushState(_("Modified Label"),
_("Label Edit"), _("Label Edit"),
PUSH_CONSOLIDATE); UndoPush::CONSOLIDATE);
} }
//If we are adjusting a label on a labeltrack, do not do anything //If we are adjusting a label on a labeltrack, do not do anything

View File

@ -457,9 +457,9 @@ protected:
virtual void MakeParentRedrawScrollbars(); virtual void MakeParentRedrawScrollbars();
// AS: Pushing the state preserves state for Undo operations. // AS: Pushing the state preserves state for Undo operations.
virtual void MakeParentPushState(const wxString &desc, const wxString &shortDesc); // use PUSH_AUTOSAVE virtual void MakeParentPushState(const wxString &desc, const wxString &shortDesc); // use UndoPush::AUTOSAVE
virtual void MakeParentPushState(const wxString &desc, const wxString &shortDesc, virtual void MakeParentPushState(const wxString &desc, const wxString &shortDesc,
int flags); UndoPush flags);
virtual void MakeParentModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after virtual void MakeParentModifyState(bool bWantsAutoSave); // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects // a crash, as it can take many seconds for large (eg. 10 track-hours) projects

View File

@ -13,6 +13,7 @@
class ToolsToolBar; class ToolsToolBar;
class ControlToolBar; class ControlToolBar;
enum class UndoPush;
class AUDACITY_DLL_API TrackPanelListener { class AUDACITY_DLL_API TrackPanelListener {
@ -26,7 +27,7 @@ class AUDACITY_DLL_API TrackPanelListener {
virtual ToolsToolBar * TP_GetToolsToolBar() = 0; virtual ToolsToolBar * TP_GetToolsToolBar() = 0;
virtual void TP_PushState(const wxString &shortDesc, const wxString &longDesc, virtual void TP_PushState(const wxString &shortDesc, const wxString &longDesc,
int flags) = 0; UndoPush flags) = 0;
virtual void TP_ModifyState(bool bWantsAutoSave) = 0; // if true, writes auto-save file. Should set only if you really want the state change restored after virtual void TP_ModifyState(bool bWantsAutoSave) = 0; // if true, writes auto-save file. Should set only if you really want the state change restored after
// a crash, as it can take many seconds for large (eg. 10 track-hours) projects // a crash, as it can take many seconds for large (eg. 10 track-hours) projects
virtual void TP_RedrawScrollbars() = 0; virtual void TP_RedrawScrollbars() = 0;

View File

@ -214,12 +214,12 @@ void UndoManager::PushState(TrackList * l,
const SelectedRegion &selectedRegion, const SelectedRegion &selectedRegion,
const wxString &longDescription, const wxString &longDescription,
const wxString &shortDescription, const wxString &shortDescription,
int flags) UndoPush flags)
{ {
unsigned int i; unsigned int i;
// If consolidate is set to true, group up to 3 identical operations. // If consolidate is set to true, group up to 3 identical operations.
if (((flags&PUSH_CONSOLIDATE)!=0) && lastAction == longDescription && if (((flags & UndoPush::CONSOLIDATE) != UndoPush::MINIMAL) && lastAction == longDescription &&
consolidationCount < 2) { consolidationCount < 2) {
consolidationCount++; consolidationCount++;
ModifyState(l, selectedRegion); ModifyState(l, selectedRegion);

View File

@ -69,11 +69,18 @@ WX_DEFINE_USER_EXPORTED_ARRAY(UndoStackElem *, UndoStack, class AUDACITY_DLL_API
WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(wxLongLong_t, SpaceArray, class AUDACITY_DLL_API); WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(wxLongLong_t, SpaceArray, class AUDACITY_DLL_API);
// These flags control what extra to do on a PushState // These flags control what extra to do on a PushState
// Default is PUSH_AUTOSAVE // Default is AUTOSAVE
// Frequent/faster actions use PUSH_CONSOLIDATE // Frequent/faster actions use CONSOLIDATE
const int PUSH_MINIMAL = 0; enum class UndoPush {
const int PUSH_CONSOLIDATE = 1; MINIMAL = 0,
const int PUSH_AUTOSAVE = 2; CONSOLIDATE = 1 << 0,
AUTOSAVE = 1 << 1
};
inline UndoPush operator | (UndoPush a, UndoPush b)
{ return static_cast<UndoPush>(static_cast<int>(a) | static_cast<int>(b)); }
inline UndoPush operator & (UndoPush a, UndoPush b)
{ return static_cast<UndoPush>(static_cast<int>(a) & static_cast<int>(b)); }
class AUDACITY_DLL_API UndoManager { class AUDACITY_DLL_API UndoManager {
public: public:
@ -83,7 +90,7 @@ class AUDACITY_DLL_API UndoManager {
void PushState(TrackList * l, void PushState(TrackList * l,
const SelectedRegion &selectedRegion, const SelectedRegion &selectedRegion,
const wxString &longDescription, const wxString &shortDescription, const wxString &longDescription, const wxString &shortDescription,
int flags = PUSH_AUTOSAVE); UndoPush flags = UndoPush::AUTOSAVE);
void ModifyState(TrackList * l, void ModifyState(TrackList * l,
const SelectedRegion &selectedRegion); const SelectedRegion &selectedRegion);
void ClearStates(); void ClearStates();