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 {