X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1dc1b891f19f70ac0ab2e0d80a5357151202872d..143318ddbb005602b600216cca621439b771f889:/src/mac/carbon/slider.cpp diff --git a/src/mac/carbon/slider.cpp b/src/mac/carbon/slider.cpp index fb8d6a322a..0c73cb27bf 100644 --- a/src/mac/carbon/slider.cpp +++ b/src/mac/carbon/slider.cpp @@ -13,6 +13,10 @@ #pragma implementation "slider.h" #endif +#include "wx/defs.h" + +#if wxUSE_SLIDER + #include "wx/slider.h" #include "wx/mac/uma.h" @@ -27,15 +31,15 @@ END_EVENT_TABLE() #define wxSLIDER_DIMENSIONACROSS 15 #define wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS 24 #define wxSLIDER_DIMENSIONACROSS_ARROW 18 - + // Distance between slider and text #define wxSLIDER_BORDERTEXT 5 - + /* NB! The default orientation for a slider is horizontal however if the user specifies * some slider styles but dosen't specify the orientation we have to assume he wants a * horizontal one. Therefore in this file when testing for the sliders orientation * vertical is tested for if this is not set then we use the horizontal one - * eg. if(GetWindowStyle() & wxSL_VERTICAL) {} else { horizontal case }> + * eg. if(GetWindowStyle() & wxSL_VERTICAL) {} else { horizontal case }> */ // Slider @@ -57,39 +61,39 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, const wxValidator& validator, const wxString& name) { - m_macIsUserPane = FALSE ; - + m_macIsUserPane = false ; + if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) return false; m_macMinimumStatic = NULL ; m_macMaximumStatic = NULL ; m_macValueStatic = NULL ; - - + + m_lineSize = 1; m_tickFreq = 0; - + m_rangeMax = maxValue; m_rangeMin = minValue; - + m_pageSize = (int)((maxValue-minValue)/10); - - Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; - + + Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; + UInt16 tickMarks = 0 ; if ( style & wxSL_AUTOTICKS ) - tickMarks = (maxValue - minValue); - + tickMarks = (maxValue - minValue); + if (tickMarks > 20) tickMarks = tickMarks/5; //keep the number of tickmarks from becoming unwieldly - + m_peer = new wxMacControl() ; - verify_noerr ( CreateSliderControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , + verify_noerr ( CreateSliderControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , value , minValue , maxValue , kControlSliderPointsDownOrRight , tickMarks , true /* liveTracking */ , wxMacLiveScrollbarActionUPP , m_peer->GetControlRefAddr() ) ); - - + + if(style & wxSL_VERTICAL) { SetSizeHints(10, -1, 10, -1); // Forces SetSize to use the proper width } @@ -99,18 +103,18 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, // NB! SetSizeHints is overloaded by wxSlider and will substitute 10 with the // proper dimensions, it also means other people cannot bugger the slider with // other values - + if(style & wxSL_LABELS) { - m_macMinimumStatic = new wxStaticText( parent, -1, wxEmptyString ); - m_macMaximumStatic = new wxStaticText( parent, -1, wxEmptyString ); - m_macValueStatic = new wxStaticText( parent, -1, wxEmptyString ); + m_macMinimumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString ); + m_macMaximumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString ); + m_macValueStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString ); SetRange(minValue, maxValue); SetValue(value); } MacPostControlCreate(pos,size) ; - + return true; } @@ -129,7 +133,7 @@ int wxSlider::GetValue() const void wxSlider::SetValue(int value) { wxString valuestring ; - valuestring.Printf( wxT("%d") , value ) ; + valuestring.Printf( wxT("%d") , value ) ; if ( m_macValueStatic ) m_macValueStatic->SetLabel( valuestring ) ; m_peer->SetValue( value ) ; @@ -138,13 +142,13 @@ void wxSlider::SetValue(int value) void wxSlider::SetRange(int minValue, int maxValue) { wxString value; - + m_rangeMin = minValue; m_rangeMax = maxValue; - + m_peer->SetMinimum( m_rangeMin); m_peer->SetMaximum( m_rangeMax); - + if(m_macMinimumStatic) { value.Printf(wxT("%d"), m_rangeMin); m_macMinimumStatic->SetLabel(value); @@ -235,47 +239,47 @@ void wxSlider::Command (wxCommandEvent & event) ProcessCommand (event); } -void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool mouseStillDown ) +void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool mouseStillDown ) { SInt16 value = m_peer->GetValue() ; - - SetValue( value ) ; - + + SetValue( value ) ; + wxEventType scrollEvent = wxEVT_NULL ; - + scrollEvent = wxEVT_SCROLL_THUMBTRACK; - + wxScrollEvent event(scrollEvent, m_windowId); event.SetPosition(value); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); - + wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); - + GetEventHandler()->ProcessEvent( cevent ); } -wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) +wxInt32 wxSlider::MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF mevent ) { SInt16 value = m_peer->GetValue() ; - - SetValue( value ) ; - + + SetValue( value ) ; + wxEventType scrollEvent = wxEVT_NULL ; - + scrollEvent = wxEVT_SCROLL_THUMBRELEASE; - + wxScrollEvent event(scrollEvent, m_windowId); event.SetPosition(value); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); - + wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId ); cevent.SetInt( value ); cevent.SetEventObject( this ); - + GetEventHandler()->ProcessEvent( cevent ); return noErr ; } @@ -288,7 +292,7 @@ void wxSlider::SetSizeHints( int minW, int minH, int incW , int incH ) { wxSize size = GetBestSize(); - + if(GetWindowStyle() & wxSL_VERTICAL) { wxWindow::SetSizeHints(size.x, minH, size.x, maxH, incW, incH); } @@ -301,12 +305,12 @@ wxSize wxSlider::DoGetBestSize() const { wxSize size; int textwidth, textheight; - + if(GetWindowStyle() & wxSL_LABELS) { wxString text; int ht, wd; - + // Get maximum text label width and height text.Printf(wxT("%d"), m_rangeMin); GetTextExtent(text, &textwidth, &textheight); @@ -319,7 +323,7 @@ wxSize wxSlider::DoGetBestSize() const textwidth = wd; } } - + if(GetWindowStyle() & wxSL_VERTICAL) { if(GetWindowStyle() & wxSL_AUTOTICKS) { @@ -354,7 +358,7 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) int xborder, yborder; int minValWidth, maxValWidth, textwidth, textheight; int sliderBreadth; - + xborder = yborder = 0; if (GetWindowStyle() & wxSL_LABELS) @@ -365,10 +369,10 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) //relative to its parent in order to size properly, so //move the control first so we can use GetPosition() wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; - + wxString text; int ht; - + // Get maximum text label width and height text.Printf(wxT("%d"), m_rangeMin); GetTextExtent(text, &minValWidth, &textheight); @@ -378,10 +382,10 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) textheight = ht; } textwidth = (minValWidth > maxValWidth ? minValWidth : maxValWidth); - + xborder = textwidth + wxSLIDER_BORDERTEXT; yborder = textheight + wxSLIDER_BORDERTEXT; - + // Get slider breadth if(GetWindowStyle() & wxSL_AUTOTICKS) { sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS; @@ -389,11 +393,11 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) else { sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW; } - + if(GetWindowStyle() & wxSL_VERTICAL) { h = h - yborder ; - + if ( m_macMinimumStatic ) m_macMinimumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + h - yborder); @@ -415,7 +419,7 @@ void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) } } //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 ) ; } @@ -424,3 +428,5 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height) { wxControl::DoMoveWindow(x,y,width,height) ; } + +#endif // wxUSE_SLIDER