From 01526d4f6cd7dd242e561aa24066f8ca0290a9ac Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Mon, 14 Feb 2005 19:29:37 +0000 Subject: [PATCH] Common code for the same handling of wxSL_INVERSE. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32044 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/mac/carbon/slider.h | 143 ++++++++++++++++----------------- include/wx/msw/slider95.h | 3 - include/wx/palmos/slider.h | 2 - include/wx/slider.h | 11 ++- src/mac/carbon/slider.cpp | 46 +++++------ src/msw/slider95.cpp | 18 ++--- src/palmos/slider.cpp | 14 +--- 7 files changed, 110 insertions(+), 127 deletions(-) diff --git a/include/wx/mac/carbon/slider.h b/include/wx/mac/carbon/slider.h index dbdc6866af..a53d0729ad 100644 --- a/include/wx/mac/carbon/slider.h +++ b/include/wx/mac/carbon/slider.h @@ -25,86 +25,85 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxSliderNameStr; // Slider class WXDLLEXPORT wxSlider: public wxControl { - DECLARE_DYNAMIC_CLASS(wxSlider) + DECLARE_DYNAMIC_CLASS(wxSlider) public: - wxSlider(); - - inline wxSlider(wxWindow *parent, wxWindowID id, - int value, int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr) - { - Create(parent, id, value, minValue, maxValue, pos, size, style, validator, name); - } - - ~wxSlider(); - - bool Create(wxWindow *parent, wxWindowID id, - int value, int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr); - - virtual int GetValue() const ; - virtual void SetValue(int); - - void SetRange(int minValue, int maxValue); - - inline int GetMin() const { return m_rangeMin; } - inline int GetMax() const { return m_rangeMax; } - - void SetMin(int minValue) { SetRange(minValue, m_rangeMax); } - void SetMax(int maxValue) { SetRange(m_rangeMin, maxValue); } - - // For trackbars only - void SetTickFreq(int n, int pos); - inline int GetTickFreq() const { return m_tickFreq; } - void SetPageSize(int pageSize); - int GetPageSize() const ; - void ClearSel() ; - void ClearTicks() ; - void SetLineSize(int lineSize); - int GetLineSize() const ; - int GetSelEnd() const ; - int GetSelStart() const ; - void SetSelection(int minPos, int maxPos); - void SetThumbLength(int len) ; - int GetThumbLength() const ; - void SetTick(int tickPos) ; - - - // set min/max size of the slider - virtual void DoSetSizeHints( int minW, int minH, - int maxW = -1, int maxH = -1, - int incW = -1, int incH = -1 ); - - protected: - virtual wxSize DoGetBestSize() const; - virtual void DoSetSize(int x, int y, int w, int h, int sizeFlags); - virtual void DoMoveWindow(int x, int y, int w, int h); - - void Command(wxCommandEvent& event); + wxSlider(); + + inline wxSlider(wxWindow *parent, wxWindowID id, + int value, int minValue, int maxValue, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSL_HORIZONTAL, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSliderNameStr) + { + Create(parent, id, value, minValue, maxValue, pos, size, style, validator, name); + } + + ~wxSlider(); + + bool Create(wxWindow *parent, wxWindowID id, + int value, int minValue, int maxValue, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSL_HORIZONTAL, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxSliderNameStr); + + virtual int GetValue() const ; + virtual void SetValue(int); + + void SetRange(int minValue, int maxValue); + + inline int GetMin() const { return m_rangeMin; } + inline int GetMax() const { return m_rangeMax; } + + void SetMin(int minValue) { SetRange(minValue, m_rangeMax); } + void SetMax(int maxValue) { SetRange(m_rangeMin, maxValue); } + + // For trackbars only + void SetTickFreq(int n, int pos); + inline int GetTickFreq() const { return m_tickFreq; } + void SetPageSize(int pageSize); + int GetPageSize() const ; + void ClearSel() ; + void ClearTicks() ; + void SetLineSize(int lineSize); + int GetLineSize() const ; + int GetSelEnd() const ; + int GetSelStart() const ; + void SetSelection(int minPos, int maxPos); + void SetThumbLength(int len) ; + int GetThumbLength() const ; + void SetTick(int tickPos) ; + + // set min/max size of the slider + virtual void DoSetSizeHints( int minW, int minH, + int maxW = -1, int maxH = -1, + int incW = -1, int incH = -1 ); + +protected: + virtual wxSize DoGetBestSize() const; + virtual void DoSetSize(int x, int y, int w, int h, int sizeFlags); + virtual void DoMoveWindow(int x, int y, int w, int h); + + void Command(wxCommandEvent& event); virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ; void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ; // Common processing to invert slider values based on wxSL_INVERSE - int MacInvertOrNot(int value) const; + virtual int ValueInvertOrNot(int value) const; - wxStaticText* m_macMinimumStatic ; - wxStaticText* m_macMaximumStatic ; - wxStaticText* m_macValueStatic ; + wxStaticText* m_macMinimumStatic ; + wxStaticText* m_macMaximumStatic ; + wxStaticText* m_macValueStatic ; - int m_rangeMin; - int m_rangeMax; - int m_pageSize; - int m_lineSize; - int m_tickFreq; + int m_rangeMin; + int m_rangeMax; + int m_pageSize; + int m_lineSize; + int m_tickFreq; private : DECLARE_EVENT_TABLE() }; diff --git a/include/wx/msw/slider95.h b/include/wx/msw/slider95.h index 2a78343eb8..45f330d943 100644 --- a/include/wx/msw/slider95.h +++ b/include/wx/msw/slider95.h @@ -99,9 +99,6 @@ 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/include/wx/palmos/slider.h b/include/wx/palmos/slider.h index d21ce89da6..5b583451a7 100644 --- a/include/wx/palmos/slider.h +++ b/include/wx/palmos/slider.h @@ -86,8 +86,6 @@ private: void Init(); - int PalmInvertOrNot(int value) const; - int m_oldPos; // needed for tracing thumb position during scrolling int m_oldValue; // needed for comparing thumb position before and after scrolling int m_lineSize; // imitate line size diff --git a/include/wx/slider.h b/include/wx/slider.h index 0e5d0939b1..2f62950add 100644 --- a/include/wx/slider.h +++ b/include/wx/slider.h @@ -80,10 +80,19 @@ public: virtual int GetSelStart() const { return GetMax(); } virtual void SetSelection(int WXUNUSED(min), int WXUNUSED(max)) { } - virtual void ApplyParentThemeBackground(const wxColour& bg) { SetBackgroundColour(bg); } +protected: + + // adjust value according to wxSL_INVERSE style + virtual int ValueInvertOrNot(int value) const + { + if (HasFlag(wxSL_INVERSE)) + return (GetMax() + GetMin()) - value; + else + return value; + } private: DECLARE_NO_COPY_CLASS(wxSliderBase) diff --git a/src/mac/carbon/slider.cpp b/src/mac/carbon/slider.cpp index c88fe4e2e2..6ffd9dd1a5 100644 --- a/src/mac/carbon/slider.cpp +++ b/src/mac/carbon/slider.cpp @@ -123,7 +123,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, wxSlider::~wxSlider() { - // this is a special case, as we had to add windows as siblings we are + // this is a special case, as we had to add windows as siblings we are // responsible for their disposal, but only if we are not part of a DestroyAllChildren if ( m_parent && m_parent->IsBeingDeleted() == false ) { @@ -136,7 +136,7 @@ wxSlider::~wxSlider() int wxSlider::GetValue() const { // We may need to invert the value returned by the widget - return MacInvertOrNot( m_peer->GetValue() ) ; + return ValueInvertOrNot( m_peer->GetValue() ) ; } void wxSlider::SetValue(int value) @@ -147,7 +147,7 @@ void wxSlider::SetValue(int value) m_macValueStatic->SetLabel( valuestring ) ; // We only invert for the setting of the actual native widget - m_peer->SetValue( MacInvertOrNot ( value ) ) ; + m_peer->SetValue( ValueInvertOrNot ( value ) ) ; } void wxSlider::SetRange(int minValue, int maxValue) @@ -161,11 +161,11 @@ void wxSlider::SetRange(int minValue, int maxValue) m_peer->SetMaximum( m_rangeMax); if(m_macMinimumStatic) { - value.Printf(wxT("%d"), MacInvertOrNot( m_rangeMin ) ); + value.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) ); m_macMinimumStatic->SetLabel(value); } if(m_macMaximumStatic) { - value.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); + value.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) ); m_macMaximumStatic->SetLabel(value); } SetValue(m_rangeMin); @@ -254,7 +254,7 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bo { // Whatever the native value is, we may need to invert it for calling // SetValue and putting the possibly inverted value in the event - SInt16 value = MacInvertOrNot ( m_peer->GetValue() ) ; + SInt16 value = ValueInvertOrNot ( m_peer->GetValue() ) ; SetValue( value ) ; @@ -278,7 +278,7 @@ wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) { // Whatever the native value is, we may need to invert it for calling // SetValue and putting the possibly inverted value in the event - SInt16 value = MacInvertOrNot ( m_peer->GetValue() ) ; + SInt16 value = ValueInvertOrNot ( m_peer->GetValue() ) ; SetValue( value ) ; @@ -326,9 +326,9 @@ wxSize wxSlider::DoGetBestSize() const int ht, wd; // Get maximum text label width and height - text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMin ) ); + text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) ); GetTextExtent(text, &textwidth, &textheight); - text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); + text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) ); GetTextExtent(text, &wd, &ht); if(ht > textheight) { textheight = ht; @@ -389,9 +389,9 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) int ht; // Get maximum text label width and height - text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMin ) ); + text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) ); GetTextExtent(text, &minValWidth, &textheight); - text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); + text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) ); GetTextExtent(text, &maxValWidth, &ht); if(ht > textheight) { textheight = ht; @@ -433,27 +433,26 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) m_macValueStatic->Move(GetPosition().x + w, GetPosition().y + 0); } } - - + // yet another hack since this is a composite control - // when wxSlider has it's size hardcoded, we're not allowed to - // change the size. But when the control has labels, we DO need + // when wxSlider has it's size hardcoded, we're not allowed to + // change the size. But when the control has labels, we DO need // to resize the internal Mac control to accomodate the text labels. // We need to trick the wxWidgets resize mechanism so that we can - // resize the slider part of the control ONLY. - + // resize the slider part of the control ONLY. + // TODO: Can all of this code go in the conditional wxSL_LABELS block? - + int minWidth; minWidth = m_minWidth; - + if (GetWindowStyle() & wxSL_LABELS) { // make sure we don't allow the entire control to be resized accidently if (width == GetSize().x) m_minWidth = -1; } - //If the control has labels, we still need to call this again because + //If the control has labels, we still need to call this again because //the labels alter the control's w and h values. wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; @@ -466,7 +465,7 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height) } // Common processing to invert slider values based on wxSL_INVERSE -int wxSlider::MacInvertOrNot(int value) const +int wxSlider::ValueInvertOrNot(int value) const { if (m_windowStyle & wxSL_VERTICAL) { @@ -480,10 +479,7 @@ int wxSlider::MacInvertOrNot(int value) const } else // normal logic applies to HORIZONTAL sliders { - if (m_windowStyle & wxSL_INVERSE) - return (m_rangeMax + m_rangeMin) - value; - else - return value; + return wxSliderBase::ValueInvertOrNot(value); } } diff --git a/src/msw/slider95.cpp b/src/msw/slider95.cpp index 7817554413..1f1f651ff9 100644 --- a/src/msw/slider95.cpp +++ b/src/msw/slider95.cpp @@ -307,7 +307,7 @@ bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation), return false; } - int newPos = MSWInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0)); + int newPos = ValueInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0)); if ( (newPos < GetMin()) || (newPos > GetMax()) ) { // out of range - but we did process it @@ -507,22 +507,14 @@ 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 MSWInvertOrNot(::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0)); + return ValueInvertOrNot(::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0)); } void wxSlider95::SetValue(int value) { - ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)MSWInvertOrNot(value)); + ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)ValueInvertOrNot(value)); if ( m_labels ) { @@ -539,8 +531,8 @@ void wxSlider95::SetRange(int minValue, int maxValue) if ( m_labels ) { - ::SetWindowText((*m_labels)[SliderLabel_Min], Format(MSWInvertOrNot(m_rangeMin))); - ::SetWindowText((*m_labels)[SliderLabel_Max], Format(MSWInvertOrNot(m_rangeMax))); + ::SetWindowText((*m_labels)[SliderLabel_Min], Format(ValueInvertOrNot(m_rangeMin))); + ::SetWindowText((*m_labels)[SliderLabel_Max], Format(ValueInvertOrNot(m_rangeMax))); } } diff --git a/src/palmos/slider.cpp b/src/palmos/slider.cpp index 2f344b1261..3776e7de96 100644 --- a/src/palmos/slider.cpp +++ b/src/palmos/slider.cpp @@ -195,14 +195,6 @@ int wxSlider::GetPageSize() const return ret; } -int wxSlider::PalmInvertOrNot(int value) const -{ - if (m_windowStyle & wxSL_INVERSE) - return (GetMax() + GetMin()) - value; - else - return value; -} - int wxSlider::GetValue() const { ControlType *control = (ControlType *)GetObjectPtr(); @@ -210,12 +202,12 @@ int wxSlider::GetValue() const return 0; uint16_t ret; CtlGetSliderValues(control, NULL, NULL, NULL, &ret); - return PalmInvertOrNot(ret); + return ValueInvertOrNot(ret); } void wxSlider::SetValue(int value) { - SetIntValue(PalmInvertOrNot(value)); + SetIntValue(ValueInvertOrNot(value)); m_oldValue = m_oldPos = value; } @@ -335,7 +327,7 @@ bool wxSlider::SendUpdatedEvent() bool wxSlider::SendScrollEvent(EventType* event) { wxEventType scrollEvent; - int newPos = PalmInvertOrNot(event->data.ctlRepeat.value); + int newPos = ValueInvertOrNot(event->data.ctlRepeat.value); if ( newPos == m_oldPos ) { // nothing changed since last event -- 2.45.2