From cd9bd79d83ab5eb747ea2e3569fbbceb8ea4b72a Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 24 Feb 2016 12:06:29 -0500 Subject: [PATCH] Use an enumeration for UndoManager::PushState --- src/LabelTrack.cpp | 6 +++--- src/MixerBoard.cpp | 4 ++-- src/Project.cpp | 12 ++++++------ src/Project.h | 7 ++++--- src/TrackPanel.cpp | 20 ++++++++++---------- src/TrackPanel.h | 4 ++-- src/TrackPanelListener.h | 3 ++- src/UndoManager.cpp | 4 ++-- src/UndoManager.h | 19 +++++++++++++------ 9 files changed, 44 insertions(+), 35 deletions(-) diff --git a/src/LabelTrack.cpp b/src/LabelTrack.cpp index c461a4a61..f08eb48dd 100644 --- a/src/LabelTrack.cpp +++ b/src/LabelTrack.cpp @@ -2067,7 +2067,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt) { p->PushState(_("Modified Label"), _("Label Edit"), - PUSH_CONSOLIDATE); + UndoPush::CONSOLIDATE); } break; @@ -2082,7 +2082,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt) { p->PushState(_("Modified Label"), _("Label Edit"), - true /* consolidate */); + UndoPush::CONSOLIDATE); } break; @@ -2094,7 +2094,7 @@ void LabelTrack::OnContextMenu(wxCommandEvent & evt) DeleteLabel(ndx); p->PushState(_("Deleted Label"), _("Label Edit"), - true /* consolidate */); + UndoPush::CONSOLIDATE); } break; } diff --git a/src/MixerBoard.cpp b/src/MixerBoard.cpp index a94da18ad..4b7de1669 100644 --- a/src/MixerBoard.cpp +++ b/src/MixerBoard.cpp @@ -406,7 +406,7 @@ void MixerTrackCluster::HandleSliderGain(const bool bWantPushState /*= false*/) mProject->RefreshTPTrack(mLeftTrack); #endif 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*/) @@ -425,7 +425,7 @@ void MixerTrackCluster::HandleSliderPan(const bool bWantPushState /*= false*/) #endif 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) diff --git a/src/Project.cpp b/src/Project.cpp index b502034eb..da7c37384 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -4001,12 +4001,12 @@ void AudacityProject::InitialState() 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, const wxString &shortDesc, - int flags ) + UndoPush flags ) { GetUndoManager()->PushState(mTracks, mViewInfo.selectedRegion, desc, shortDesc, flags); @@ -4033,7 +4033,7 @@ void AudacityProject::PushState(const wxString &desc, if (GetTracksFitVerticallyZoomed()) this->DoZoomFitV(); - if( (flags & PUSH_AUTOSAVE)!= 0) + if((flags & UndoPush::AUTOSAVE) != UndoPush::MINIMAL) AutoSave(); } @@ -4707,7 +4707,7 @@ void AudacityProject::RefreshTPTrack(Track* pTrk, bool refreshbacking /*= true*/ // TrackPanel callback method void AudacityProject::TP_PushState(const wxString &desc, const wxString &shortDesc, - int flags) + UndoPush flags) { PushState(desc, shortDesc, flags); } @@ -4973,7 +4973,7 @@ void AudacityProject::SetTrackGain(Track * track, LWSlider * slider) if (link) link->SetGain(newValue); - PushState(_("Adjusted gain"), _("Gain"), PUSH_CONSOLIDATE); + PushState(_("Adjusted gain"), _("Gain"), UndoPush::CONSOLIDATE); GetTrackPanel()->RefreshTrack(track); } @@ -4990,7 +4990,7 @@ void AudacityProject::SetTrackPan(Track * track, LWSlider * slider) if (link) link->SetPan(newValue); - PushState(_("Adjusted Pan"), _("Pan"), PUSH_CONSOLIDATE); + PushState(_("Adjusted Pan"), _("Pan"), UndoPush::CONSOLIDATE); GetTrackPanel()->RefreshTrack(track); } diff --git a/src/Project.h b/src/Project.h index 6d164d943..3837fca4c 100644 --- a/src/Project.h +++ b/src/Project.h @@ -90,6 +90,7 @@ class Regions; class LWSlider; class UndoManager; +enum class UndoPush; AudacityProject *CreateNewAudacityProject(); AUDACITY_DLL_API AudacityProject *GetActiveProject(); @@ -399,7 +400,7 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, virtual ToolsToolBar * TP_GetToolsToolBar(); 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 // a crash, as it can take many seconds for large (eg. 10 track-hours) projects virtual void TP_RedrawScrollbars(); @@ -486,8 +487,8 @@ public: static void AllProjectsDeleteLock(); static void AllProjectsDeleteUnlock(); - void PushState(const wxString &desc, const wxString &shortDesc); // use PUSH_AUTOSAVE - void PushState(const wxString &desc, const wxString &shortDesc, int flags); + void PushState(const wxString &desc, const wxString &shortDesc); // use UndoPush::AUTOSAVE + void PushState(const wxString &desc, const wxString &shortDesc, UndoPush flags); void RollbackState(); private: diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index ed2d23610..07f52b820 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -1493,14 +1493,14 @@ void TrackPanel::OnPaint(wxPaintEvent & /* event */) /// 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. void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc, - int flags) + UndoPush flags) { mListener->TP_PushState(desc, shortDesc, flags); } void TrackPanel::MakeParentPushState(const wxString &desc, const wxString &shortDesc) { - MakeParentPushState(desc, shortDesc, PUSH_AUTOSAVE); + MakeParentPushState(desc, shortDesc, UndoPush::AUTOSAVE); } void TrackPanel::MakeParentModifyState(bool bWantsAutoSave) @@ -3306,7 +3306,7 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge, break; } MakeParentPushState(_("Stretch Note Track"), _("Stretch"), - PUSH_CONSOLIDATE | PUSH_AUTOSAVE); + UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); mStretched = true; Refresh(false); } @@ -3837,7 +3837,7 @@ void TrackPanel::HandleSlide(wxMouseEvent & event) consolidate = true; } 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. MakeParentPushState(_("Moved Samples"), _("Sample Edit"), - PUSH_CONSOLIDATE|PUSH_AUTOSAVE); + UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE); } @@ -5426,7 +5426,7 @@ void TrackPanel::HandleSliders(wxMouseEvent &event, bool pan) #endif MakeParentPushState(pan ? _("Moved pan slider") : _("Moved gain slider"), pan ? _("Pan") : _("Gain"), - PUSH_CONSOLIDATE); + UndoPush::CONSOLIDATE); #ifdef EXPERIMENTAL_MIDI_OUT } else { MakeParentPushState(_("Moved velocity slider"), _("Velocity"), true); @@ -6441,7 +6441,7 @@ void TrackPanel::OnKeyDown(wxKeyEvent & event) if (lt->OnKeyDown(mViewInfo->selectedRegion, event)) MakeParentPushState(_("Modified Label"), _("Label Edit"), - PUSH_CONSOLIDATE); + UndoPush::CONSOLIDATE); // Make sure caret is in view int x; @@ -6485,7 +6485,7 @@ void TrackPanel::OnChar(wxKeyEvent & event) if (((LabelTrack *)t)->OnChar(mViewInfo->selectedRegion, event)) MakeParentPushState(_("Modified Label"), _("Label Edit"), - PUSH_CONSOLIDATE); + UndoPush::CONSOLIDATE); // If selection modified, refresh // 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; } } @@ -6886,7 +6886,7 @@ void TrackPanel::HandleGlyphDragRelease(LabelTrack * lTrack, wxMouseEvent & even *mViewInfo, &mViewInfo->selectedRegion)) { MakeParentPushState(_("Modified Label"), _("Label Edit"), - PUSH_CONSOLIDATE); + UndoPush::CONSOLIDATE); } //If we are adjusting a label on a labeltrack, do not do anything diff --git a/src/TrackPanel.h b/src/TrackPanel.h index c784a8055..932bf67ee 100644 --- a/src/TrackPanel.h +++ b/src/TrackPanel.h @@ -457,9 +457,9 @@ protected: virtual void MakeParentRedrawScrollbars(); // 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, - 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 // a crash, as it can take many seconds for large (eg. 10 track-hours) projects diff --git a/src/TrackPanelListener.h b/src/TrackPanelListener.h index f07c2b11f..5e4625067 100644 --- a/src/TrackPanelListener.h +++ b/src/TrackPanelListener.h @@ -13,6 +13,7 @@ class ToolsToolBar; class ControlToolBar; +enum class UndoPush; class AUDACITY_DLL_API TrackPanelListener { @@ -26,7 +27,7 @@ class AUDACITY_DLL_API TrackPanelListener { virtual ToolsToolBar * TP_GetToolsToolBar() = 0; 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 // a crash, as it can take many seconds for large (eg. 10 track-hours) projects virtual void TP_RedrawScrollbars() = 0; diff --git a/src/UndoManager.cpp b/src/UndoManager.cpp index 30524974e..9b4643cac 100644 --- a/src/UndoManager.cpp +++ b/src/UndoManager.cpp @@ -214,12 +214,12 @@ void UndoManager::PushState(TrackList * l, const SelectedRegion &selectedRegion, const wxString &longDescription, const wxString &shortDescription, - int flags) + UndoPush flags) { unsigned int i; // 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++; ModifyState(l, selectedRegion); diff --git a/src/UndoManager.h b/src/UndoManager.h index f42b8e2f4..73ae22852 100644 --- a/src/UndoManager.h +++ b/src/UndoManager.h @@ -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); // These flags control what extra to do on a PushState -// Default is PUSH_AUTOSAVE -// Frequent/faster actions use PUSH_CONSOLIDATE -const int PUSH_MINIMAL = 0; -const int PUSH_CONSOLIDATE = 1; -const int PUSH_AUTOSAVE = 2; +// Default is AUTOSAVE +// Frequent/faster actions use CONSOLIDATE +enum class UndoPush { + MINIMAL = 0, + CONSOLIDATE = 1 << 0, + AUTOSAVE = 1 << 1 +}; + +inline UndoPush operator | (UndoPush a, UndoPush b) +{ return static_cast(static_cast(a) | static_cast(b)); } +inline UndoPush operator & (UndoPush a, UndoPush b) +{ return static_cast(static_cast(a) & static_cast(b)); } class AUDACITY_DLL_API UndoManager { public: @@ -83,7 +90,7 @@ class AUDACITY_DLL_API UndoManager { void PushState(TrackList * l, const SelectedRegion &selectedRegion, const wxString &longDescription, const wxString &shortDescription, - int flags = PUSH_AUTOSAVE); + UndoPush flags = UndoPush::AUTOSAVE); void ModifyState(TrackList * l, const SelectedRegion &selectedRegion); void ClearStates();