diff --git a/src/ShuttleGui.cpp b/src/ShuttleGui.cpp index ead5aa0f2..48f5e78b2 100644 --- a/src/ShuttleGui.cpp +++ b/src/ShuttleGui.cpp @@ -618,7 +618,7 @@ wxSlider * ShuttleGuiBase::AddSlider( SliderTextCtrl* ShuttleGuiBase::AddSliderTextCtrl( const TranslatableString &Prompt, double pos, double Max, double Min, - int precision, double* value, double scale) + int precision, double* value, double scale, double offset) { HandleOptionality( Prompt ); AddPrompt( Prompt ); @@ -627,7 +627,7 @@ SliderTextCtrl* ShuttleGuiBase::AddSliderTextCtrl( return wxDynamicCast(wxWindow::FindWindowById( miId, mpDlg), SliderTextCtrl); SliderTextCtrl * pSlider; mpWind = pSlider = safenew SliderTextCtrl(GetParent(), miId, - pos, Min, Max, precision, scale, wxDefaultPosition, wxDefaultSize, + pos, Min, Max, precision, scale, offset, wxDefaultPosition, wxDefaultSize, GetStyle( SliderTextCtrl::HORIZONTAL ), value ); diff --git a/src/ShuttleGui.h b/src/ShuttleGui.h index 04a97b28e..5bd72d9a8 100644 --- a/src/ShuttleGui.h +++ b/src/ShuttleGui.h @@ -267,7 +267,7 @@ public: SliderTextCtrl* AddSliderTextCtrl( const TranslatableString &Prompt, double pos, double Max, double Min = 0, - int precision = 2, double* value = NULL, double scale = 0); + int precision = 2, double* value = NULL, double scale = 0, double offset = 0); // Pass the same initValue to the sequence of calls to AddRadioButton and // AddRadioButtonToGroup. diff --git a/src/widgets/SliderTextCtrl.cpp b/src/widgets/SliderTextCtrl.cpp index 524d1a9f6..837152d89 100644 --- a/src/widgets/SliderTextCtrl.cpp +++ b/src/widgets/SliderTextCtrl.cpp @@ -29,7 +29,8 @@ wxDEFINE_EVENT(cEVT_SLIDERTEXT, wxCommandEvent); SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid, double value, double min, double max, int precision, double scale, - const wxPoint& pos, const wxSize& size, long style, double* varValue) + double offset, const wxPoint& pos, const wxSize& size, long style, + double* varValue) : wxPanelWrapper(parent, winid, pos, size, wxWS_EX_VALIDATE_RECURSIVELY) { m_log = style & LOG; @@ -38,6 +39,7 @@ SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid, m_min = min; m_max = max; m_zero = -std::numeric_limits::infinity(); + m_offset = offset; if(m_int) { @@ -62,13 +64,13 @@ SliderTextCtrl::SliderTextCtrl(wxWindow *parent, wxWindowID winid, min = m_zero; } else - min = log10(min); + min = log10(min + m_offset); if(value <= 0.0) value = m_zero; else - value = log10(value); - max = log10(max); + value = log10(value + m_offset); + max = log10(max + m_offset); } m_sizer = safenew wxBoxSizer( @@ -118,7 +120,7 @@ void SliderTextCtrl::OnTextChange(wxCommandEvent& event) if(m_value == 0.0) value = m_zero; else - value = log10(m_value); + value = log10(m_value + m_offset); } m_slider->SetValue(round(value * m_scale)); event.SetEventType(cEVT_SLIDERTEXT); @@ -134,7 +136,7 @@ void SliderTextCtrl::OnSlider(wxCommandEvent& event) m_value = 0.0; else { - m_value = pow(10.0, m_value); + m_value = pow(10.0, m_value) - m_offset; m_value = std::max(m_min, m_value); m_value = std::min(m_max, m_value); } diff --git a/src/widgets/SliderTextCtrl.h b/src/widgets/SliderTextCtrl.h index f8d27efa0..b2c0d15da 100644 --- a/src/widgets/SliderTextCtrl.h +++ b/src/widgets/SliderTextCtrl.h @@ -37,7 +37,8 @@ class SliderTextCtrl : public wxPanelWrapper SliderTextCtrl(wxWindow *parent, wxWindowID winid, double value, double min, double max, int precision = 2, - double scale = 0, const wxPoint& pos = wxDefaultPosition, + double scale = 0, double offset = 0, + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = HORIZONTAL, double* varValue = NULL); @@ -69,6 +70,7 @@ class SliderTextCtrl : public wxPanelWrapper double m_min; double m_max; double m_zero; + double m_offset; wxString m_format; DECLARE_EVENT_TABLE()