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
This commit is contained in:
Włodzimierz Skiba
2005-02-14 19:29:37 +00:00
parent cd0bbd03d7
commit 01526d4f6c
7 changed files with 102 additions and 119 deletions

View File

@@ -25,86 +25,85 @@ WXDLLEXPORT_DATA(extern const wxChar*) wxSliderNameStr;
// Slider // Slider
class WXDLLEXPORT wxSlider: public wxControl class WXDLLEXPORT wxSlider: public wxControl
{ {
DECLARE_DYNAMIC_CLASS(wxSlider) DECLARE_DYNAMIC_CLASS(wxSlider)
public: public:
wxSlider(); wxSlider();
inline wxSlider(wxWindow *parent, wxWindowID id, inline wxSlider(wxWindow *parent, wxWindowID id,
int value, int minValue, int maxValue, int value, int minValue, int maxValue,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
long style = wxSL_HORIZONTAL, long style = wxSL_HORIZONTAL,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxSliderNameStr) const wxString& name = wxSliderNameStr)
{ {
Create(parent, id, value, minValue, maxValue, pos, size, style, validator, name); Create(parent, id, value, minValue, maxValue, pos, size, style, validator, name);
} }
~wxSlider(); ~wxSlider();
bool Create(wxWindow *parent, wxWindowID id, bool Create(wxWindow *parent, wxWindowID id,
int value, int minValue, int maxValue, int value, int minValue, int maxValue,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
long style = wxSL_HORIZONTAL, long style = wxSL_HORIZONTAL,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxSliderNameStr); const wxString& name = wxSliderNameStr);
virtual int GetValue() const ; virtual int GetValue() const ;
virtual void SetValue(int); virtual void SetValue(int);
void SetRange(int minValue, int maxValue); void SetRange(int minValue, int maxValue);
inline int GetMin() const { return m_rangeMin; } inline int GetMin() const { return m_rangeMin; }
inline int GetMax() const { return m_rangeMax; } inline int GetMax() const { return m_rangeMax; }
void SetMin(int minValue) { SetRange(minValue, m_rangeMax); } void SetMin(int minValue) { SetRange(minValue, m_rangeMax); }
void SetMax(int maxValue) { SetRange(m_rangeMin, maxValue); } 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) ;
// For trackbars only
// set min/max size of the slider void SetTickFreq(int n, int pos);
virtual void DoSetSizeHints( int minW, int minH, inline int GetTickFreq() const { return m_tickFreq; }
int maxW = -1, int maxH = -1, void SetPageSize(int pageSize);
int incW = -1, int incH = -1 ); int GetPageSize() const ;
void ClearSel() ;
protected: void ClearTicks() ;
virtual wxSize DoGetBestSize() const; void SetLineSize(int lineSize);
virtual void DoSetSize(int x, int y, int w, int h, int sizeFlags); int GetLineSize() const ;
virtual void DoMoveWindow(int x, int y, int w, int h); int GetSelEnd() const ;
int GetSelStart() const ;
void Command(wxCommandEvent& event); 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 ) ; virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ; void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ;
// Common processing to invert slider values based on wxSL_INVERSE // 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_macMinimumStatic ;
wxStaticText* m_macMaximumStatic ; wxStaticText* m_macMaximumStatic ;
wxStaticText* m_macValueStatic ; wxStaticText* m_macValueStatic ;
int m_rangeMin; int m_rangeMin;
int m_rangeMax; int m_rangeMax;
int m_pageSize; int m_pageSize;
int m_lineSize; int m_lineSize;
int m_tickFreq; int m_tickFreq;
private : private :
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };

View File

@@ -99,9 +99,6 @@ protected:
// format an integer value as string // format an integer value as string
static wxString Format(int n) { return wxString::Format(_T("%d"), n); } 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 // get the boundig box for the slider and possible labels
wxRect GetBoundingBox() const; wxRect GetBoundingBox() const;

View File

@@ -86,8 +86,6 @@ private:
void Init(); void Init();
int PalmInvertOrNot(int value) const;
int m_oldPos; // needed for tracing thumb position during scrolling int m_oldPos; // needed for tracing thumb position during scrolling
int m_oldValue; // needed for comparing thumb position before and after scrolling int m_oldValue; // needed for comparing thumb position before and after scrolling
int m_lineSize; // imitate line size int m_lineSize; // imitate line size

View File

@@ -80,10 +80,19 @@ public:
virtual int GetSelStart() const { return GetMax(); } virtual int GetSelStart() const { return GetMax(); }
virtual void SetSelection(int WXUNUSED(min), int WXUNUSED(max)) { } virtual void SetSelection(int WXUNUSED(min), int WXUNUSED(max)) { }
virtual void ApplyParentThemeBackground(const wxColour& bg) virtual void ApplyParentThemeBackground(const wxColour& bg)
{ SetBackgroundColour(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: private:
DECLARE_NO_COPY_CLASS(wxSliderBase) DECLARE_NO_COPY_CLASS(wxSliderBase)

View File

@@ -123,7 +123,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
wxSlider::~wxSlider() 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 // responsible for their disposal, but only if we are not part of a DestroyAllChildren
if ( m_parent && m_parent->IsBeingDeleted() == false ) if ( m_parent && m_parent->IsBeingDeleted() == false )
{ {
@@ -136,7 +136,7 @@ wxSlider::~wxSlider()
int wxSlider::GetValue() const int wxSlider::GetValue() const
{ {
// We may need to invert the value returned by the widget // 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) void wxSlider::SetValue(int value)
@@ -147,7 +147,7 @@ void wxSlider::SetValue(int value)
m_macValueStatic->SetLabel( valuestring ) ; m_macValueStatic->SetLabel( valuestring ) ;
// We only invert for the setting of the actual native widget // 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) void wxSlider::SetRange(int minValue, int maxValue)
@@ -161,11 +161,11 @@ void wxSlider::SetRange(int minValue, int maxValue)
m_peer->SetMaximum( m_rangeMax); m_peer->SetMaximum( m_rangeMax);
if(m_macMinimumStatic) { if(m_macMinimumStatic) {
value.Printf(wxT("%d"), MacInvertOrNot( m_rangeMin ) ); value.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) );
m_macMinimumStatic->SetLabel(value); m_macMinimumStatic->SetLabel(value);
} }
if(m_macMaximumStatic) { if(m_macMaximumStatic) {
value.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); value.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
m_macMaximumStatic->SetLabel(value); m_macMaximumStatic->SetLabel(value);
} }
SetValue(m_rangeMin); 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 // Whatever the native value is, we may need to invert it for calling
// SetValue and putting the possibly inverted value in the event // SetValue and putting the possibly inverted value in the event
SInt16 value = MacInvertOrNot ( m_peer->GetValue() ) ; SInt16 value = ValueInvertOrNot ( m_peer->GetValue() ) ;
SetValue( value ) ; 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 // Whatever the native value is, we may need to invert it for calling
// SetValue and putting the possibly inverted value in the event // SetValue and putting the possibly inverted value in the event
SInt16 value = MacInvertOrNot ( m_peer->GetValue() ) ; SInt16 value = ValueInvertOrNot ( m_peer->GetValue() ) ;
SetValue( value ) ; SetValue( value ) ;
@@ -326,9 +326,9 @@ wxSize wxSlider::DoGetBestSize() const
int ht, wd; int ht, wd;
// Get maximum text label width and height // 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); GetTextExtent(text, &textwidth, &textheight);
text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
GetTextExtent(text, &wd, &ht); GetTextExtent(text, &wd, &ht);
if(ht > textheight) { if(ht > textheight) {
textheight = ht; textheight = ht;
@@ -389,9 +389,9 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags)
int ht; int ht;
// Get maximum text label width and height // 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); GetTextExtent(text, &minValWidth, &textheight);
text.Printf(wxT("%d"), MacInvertOrNot( m_rangeMax ) ); text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
GetTextExtent(text, &maxValWidth, &ht); GetTextExtent(text, &maxValWidth, &ht);
if(ht > textheight) { if(ht > textheight) {
textheight = ht; 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); m_macValueStatic->Move(GetPosition().x + w, GetPosition().y + 0);
} }
} }
// yet another hack since this is a composite control // yet another hack since this is a composite control
// when wxSlider has it's size hardcoded, we're not allowed to // when wxSlider has it's size hardcoded, we're not allowed to
// change the size. But when the control has labels, we DO need // change the size. But when the control has labels, we DO need
// to resize the internal Mac control to accomodate the text labels. // to resize the internal Mac control to accomodate the text labels.
// We need to trick the wxWidgets resize mechanism so that we can // 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? // TODO: Can all of this code go in the conditional wxSL_LABELS block?
int minWidth; int minWidth;
minWidth = m_minWidth; minWidth = m_minWidth;
if (GetWindowStyle() & wxSL_LABELS) if (GetWindowStyle() & wxSL_LABELS)
{ {
// make sure we don't allow the entire control to be resized accidently // make sure we don't allow the entire control to be resized accidently
if (width == GetSize().x) if (width == GetSize().x)
m_minWidth = -1; 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. //the labels alter the control's w and h values.
wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; 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 // 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) if (m_windowStyle & wxSL_VERTICAL)
{ {
@@ -480,10 +479,7 @@ int wxSlider::MacInvertOrNot(int value) const
} }
else // normal logic applies to HORIZONTAL sliders else // normal logic applies to HORIZONTAL sliders
{ {
if (m_windowStyle & wxSL_INVERSE) return wxSliderBase::ValueInvertOrNot(value);
return (m_rangeMax + m_rangeMin) - value;
else
return value;
} }
} }

View File

@@ -307,7 +307,7 @@ bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation),
return false; 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()) ) if ( (newPos < GetMin()) || (newPos > GetMax()) )
{ {
// out of range - but we did process it // out of range - but we did process it
@@ -507,22 +507,14 @@ wxSize wxSlider95::DoGetBestSize() const
// slider-specific methods // 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 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) 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 ) if ( m_labels )
{ {
@@ -539,8 +531,8 @@ void wxSlider95::SetRange(int minValue, int maxValue)
if ( m_labels ) if ( m_labels )
{ {
::SetWindowText((*m_labels)[SliderLabel_Min], Format(MSWInvertOrNot(m_rangeMin))); ::SetWindowText((*m_labels)[SliderLabel_Min], Format(ValueInvertOrNot(m_rangeMin)));
::SetWindowText((*m_labels)[SliderLabel_Max], Format(MSWInvertOrNot(m_rangeMax))); ::SetWindowText((*m_labels)[SliderLabel_Max], Format(ValueInvertOrNot(m_rangeMax)));
} }
} }

View File

@@ -195,14 +195,6 @@ int wxSlider::GetPageSize() const
return ret; return ret;
} }
int wxSlider::PalmInvertOrNot(int value) const
{
if (m_windowStyle & wxSL_INVERSE)
return (GetMax() + GetMin()) - value;
else
return value;
}
int wxSlider::GetValue() const int wxSlider::GetValue() const
{ {
ControlType *control = (ControlType *)GetObjectPtr(); ControlType *control = (ControlType *)GetObjectPtr();
@@ -210,12 +202,12 @@ int wxSlider::GetValue() const
return 0; return 0;
uint16_t ret; uint16_t ret;
CtlGetSliderValues(control, NULL, NULL, NULL, &ret); CtlGetSliderValues(control, NULL, NULL, NULL, &ret);
return PalmInvertOrNot(ret); return ValueInvertOrNot(ret);
} }
void wxSlider::SetValue(int value) void wxSlider::SetValue(int value)
{ {
SetIntValue(PalmInvertOrNot(value)); SetIntValue(ValueInvertOrNot(value));
m_oldValue = m_oldPos = value; m_oldValue = m_oldPos = value;
} }
@@ -335,7 +327,7 @@ bool wxSlider::SendUpdatedEvent()
bool wxSlider::SendScrollEvent(EventType* event) bool wxSlider::SendScrollEvent(EventType* event)
{ {
wxEventType scrollEvent; wxEventType scrollEvent;
int newPos = PalmInvertOrNot(event->data.ctlRepeat.value); int newPos = ValueInvertOrNot(event->data.ctlRepeat.value);
if ( newPos == m_oldPos ) if ( newPos == m_oldPos )
{ {
// nothing changed since last event // nothing changed since last event