// 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()
};
// 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;
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
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)
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 )
{
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)
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)
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);
{
// 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 ) ;
{
// 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 ) ;
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;
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;
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 ) ;
}
// 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)
{
}
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);
}
}
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
// 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 )
{
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)));
}
}
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();
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;
}
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