From 0bee195b0e9d2a522f18ef0c8774ed93add2b6f5 Mon Sep 17 00:00:00 2001 From: lllucius Date: Wed, 23 Oct 2013 17:47:00 +0000 Subject: [PATCH] Bug 275 - Snap-To status/quantisation are global, leading to incorrect indications in multiple projects Make Snap To project specific This makes the Snap To setting in the selection bar project specific. Changing it will no longer affect other open projects. The state is saved to audacity.cfg when the checkbox is changed. This means that the next project window to open will start with the new value. (As it should be). --- src/Project.cpp | 31 +++++++++++++++++-------------- src/Project.h | 5 +++-- src/TrackPanel.cpp | 4 ++-- src/toolbars/SelectionBar.cpp | 4 +++- src/toolbars/SelectionBar.h | 3 ++- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Project.cpp b/src/Project.cpp index b84d716ff..1623b0fa5 100644 --- a/src/Project.cpp +++ b/src/Project.cpp @@ -729,7 +729,7 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, mRate((double) gPrefs->Read(wxT("/SamplingRate/DefaultProjectSampleRate"), AudioIO::GetOptimalSupportedSampleRate())), mDefaultFormat((sampleFormat) gPrefs-> Read(wxT("/SamplingRate/DefaultProjectSampleFormat"), floatSample)), - mSnapTo(0), + mSnapTo((bool) gPrefs->Read(wxT("/SnapTo"), (long) false)), mDirty(false), mTrackPanel(NULL), mTrackFactory(NULL), @@ -836,7 +836,6 @@ AudacityProject::AudacityProject(wxWindow * parent, wxWindowID id, // mToolManager = new ToolManager( this ); GetSelectionBar()->SetListener(this); - GetSelectionBar()->SetRate(mRate); mToolManager->LayoutToolBars(); // Fix the sliders on the mixer toolbar so that the tip windows @@ -1047,8 +1046,6 @@ void AudacityProject::UpdatePrefs() if (mMixerBoard) mMixerBoard->ResizeTrackClusters(); // in case prefs "/GUI/Solo" changed - SetSnapTo(gPrefs->Read(wxT("/SnapTo"), 0L)!=0); - if (mToolManager) { mToolManager->UpdatePrefs(); } @@ -1176,10 +1173,14 @@ void AudacityProject::SetProjectTitle() SetName(name); // to make the nvda screen reader read the correct title } -void AudacityProject::AS_SetSnapTo(bool state) +double AudacityProject::AS_GetRate() { - SetSnapTo(state); - RedrawProject(); + return mRate; +} + +void AudacityProject::AS_SetRate(double rate) +{ + mRate = rate; } bool AudacityProject::AS_GetSnapTo() @@ -1187,9 +1188,15 @@ bool AudacityProject::AS_GetSnapTo() return GetSnapTo(); } -void AudacityProject::AS_SetRate(double rate) +void AudacityProject::AS_SetSnapTo(bool state) { - mRate = rate; + mSnapTo = state; + + mCommandManager.Check(wxT("Snap"), mSnapTo); + gPrefs->Write(wxT("/SnapTo"), mSnapTo); + gPrefs->Flush(); + + RedrawProject(); } void AudacityProject::AS_ModifySelection(double &start, double &end) @@ -4530,11 +4537,7 @@ bool AudacityProject::GetCacheBlockFiles() void AudacityProject::SetSnapTo(bool state) { - mSnapTo = state; - mCommandManager.Check(wxT("Snap"), mSnapTo); - gPrefs->Write(wxT("/SnapTo"), mSnapTo); - gPrefs->Flush(); - + AS_SetSnapTo(state); if (GetSelectionBar()) { GetSelectionBar()->SetSnapTo(state); } diff --git a/src/Project.h b/src/Project.h index eb84f3400..45c8081d1 100644 --- a/src/Project.h +++ b/src/Project.h @@ -360,10 +360,11 @@ class AUDACITY_DLL_API AudacityProject: public wxFrame, // SelectionBar callback methods + virtual double AS_GetRate(); virtual void AS_SetRate(double rate); - virtual void AS_ModifySelection(double &start, double &end); - virtual void AS_SetSnapTo(bool state); virtual bool AS_GetSnapTo(); + virtual void AS_SetSnapTo(bool state); + virtual void AS_ModifySelection(double &start, double &end); void SetStateTo(unsigned int n); diff --git a/src/TrackPanel.cpp b/src/TrackPanel.cpp index 0be910f21..08ee8520b 100644 --- a/src/TrackPanel.cpp +++ b/src/TrackPanel.cpp @@ -6491,7 +6491,7 @@ void TrackPanel::OnCursorLeft( bool shift, bool ctrl ) } mLastSelectionAdjustment = curtime; - bool snapToTime = (gPrefs->Read(wxT("/SnapTo"), 0L) != 0); + bool snapToTime = GetActiveProject()->GetSnapTo(); // Contract selection from the right to the left if( shift && ctrl ) @@ -6595,7 +6595,7 @@ void TrackPanel::OnCursorRight( bool shift, bool ctrl ) } mLastSelectionAdjustment = curtime; - bool snapToTime = (gPrefs->Read(wxT("/SnapTo"), 0L) != 0); + bool snapToTime = GetActiveProject()->GetSnapTo(); // Contract selection from the left to the right if( shift && ctrl ) diff --git a/src/toolbars/SelectionBar.cpp b/src/toolbars/SelectionBar.cpp index 50b53eaca..7771cfb92 100644 --- a/src/toolbars/SelectionBar.cpp +++ b/src/toolbars/SelectionBar.cpp @@ -241,7 +241,7 @@ void SelectionBar::Populate() mainSizer->Add(mSnapTo, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_CENTER | wxRIGHT, 5); mSnapTo->SetName(_("Snap To")); - mSnapTo->SetValue(gPrefs->Read(wxT("/SnapTo"), 0L)!=0); + mSnapTo->SetValue(mListener ? mListener->AS_GetSnapTo() : false); #if wxUSE_TOOLTIPS mSnapTo->SetToolTip(wxString::Format(_("Snap Clicks/Selections to %s"), formatName.c_str())); #endif @@ -303,6 +303,8 @@ void SelectionBar::UpdatePrefs() void SelectionBar::SetListener(SelectionBarListener *l) { mListener = l; + SetRate(mListener->AS_GetRate()); + SetSnapTo(mListener->AS_GetSnapTo()); }; void SelectionBar::OnSize(wxSizeEvent &evt) diff --git a/src/toolbars/SelectionBar.h b/src/toolbars/SelectionBar.h index 2b3a35db3..45af830a5 100644 --- a/src/toolbars/SelectionBar.h +++ b/src/toolbars/SelectionBar.h @@ -32,10 +32,11 @@ class AUDACITY_DLL_API SelectionBarListener { SelectionBarListener(){}; virtual ~SelectionBarListener(){}; + virtual double AS_GetRate() = 0; virtual void AS_SetRate(double rate) = 0; - virtual void AS_ModifySelection(double &start, double &end) = 0; virtual bool AS_GetSnapTo() = 0; virtual void AS_SetSnapTo(bool state) = 0; + virtual void AS_ModifySelection(double &start, double &end) = 0; }; class SelectionBar:public ToolBar {