From: Kevin Hock Date: Fri, 11 Feb 2005 04:11:47 +0000 (+0000) Subject: wxSL_INVERSE for MSW. Heavily modified patch 1096922. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6bee5ffba48de20b40ae30d479bfe9e4fb12efb4 wxSL_INVERSE for MSW. Heavily modified patch 1096922. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/slider95.h b/include/wx/msw/slider95.h index 45f330d943..2a78343eb8 100644 --- a/include/wx/msw/slider95.h +++ b/include/wx/msw/slider95.h @@ -99,6 +99,9 @@ protected: // format an integer value as string static wxString Format(int n) { return wxString::Format(_T("%d"), n); } + // Common processing to invert slider values based on wxSL_INVERSE + int MSWInvertOrNot(int value) const; + // get the boundig box for the slider and possible labels wxRect GetBoundingBox() const; diff --git a/src/msw/slider95.cpp b/src/msw/slider95.cpp index 705ca4bd7f..7817554413 100644 --- a/src/msw/slider95.cpp +++ b/src/msw/slider95.cpp @@ -103,6 +103,7 @@ wxBEGIN_FLAGS( wxSliderStyle ) wxFLAGS_MEMBER(wxSL_BOTTOM) wxFLAGS_MEMBER(wxSL_BOTH) wxFLAGS_MEMBER(wxSL_SELRANGE) + wxFLAGS_MEMBER(wxSL_INVERSE) wxEND_FLAGS( wxSliderStyle ) @@ -306,7 +307,7 @@ bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation), return false; } - int newPos = (int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0); + int newPos = MSWInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0)); if ( (newPos < GetMin()) || (newPos > GetMax()) ) { // out of range - but we did process it @@ -506,14 +507,22 @@ wxSize wxSlider95::DoGetBestSize() const // slider-specific methods // ---------------------------------------------------------------------------- +int wxSlider95::MSWInvertOrNot(int value) const +{ + if (m_windowStyle & wxSL_INVERSE) + return (m_rangeMax + m_rangeMin) - value; + else + return value; +} + int wxSlider95::GetValue() const { - return ::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0); + return MSWInvertOrNot(::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0)); } void wxSlider95::SetValue(int value) { - ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)value); + ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)MSWInvertOrNot(value)); if ( m_labels ) { @@ -530,8 +539,8 @@ void wxSlider95::SetRange(int minValue, int maxValue) if ( m_labels ) { - ::SetWindowText((*m_labels)[SliderLabel_Min], Format(m_rangeMin)); - ::SetWindowText((*m_labels)[SliderLabel_Max], Format(m_rangeMax)); + ::SetWindowText((*m_labels)[SliderLabel_Min], Format(MSWInvertOrNot(m_rangeMin))); + ::SetWindowText((*m_labels)[SliderLabel_Max], Format(MSWInvertOrNot(m_rangeMax))); } } @@ -597,12 +606,12 @@ void wxSlider95::SetThumbLength(int len) int wxSlider95::GetThumbLength() const { - return (int)::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH, 0, 0); + return (int)::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH, 0, 0); } void wxSlider95::SetTick(int tickPos) { - ::SendMessage( GetHwnd(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos ); + ::SendMessage( GetHwnd(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos ); } // ----------------------------------------------------------------------------