X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e40298d54ecd5b109222a7c60aa2ef084a304d69..23176131010f41b2f9a54bef50c8afa25472e195:/src/mac/carbon/slider.cpp diff --git a/src/mac/carbon/slider.cpp b/src/mac/carbon/slider.cpp index 2a95191da2..0ee335f027 100644 --- a/src/mac/carbon/slider.cpp +++ b/src/mac/carbon/slider.cpp @@ -57,8 +57,11 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, const wxValidator& validator, const wxString& name) { - Rect bounds ; - Str255 title ; + m_macIsUserPane = FALSE ; + + if ( !wxControl::Create(parent, id, pos, size, style, validator, name) ) + return false; + SInt16 procID; m_macMinimumStatic = NULL ; @@ -74,8 +77,7 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, m_pageSize = (int)((maxValue-minValue)/10); - MacPreControlCreate( parent, id, "", pos, size, style, - validator, name, &bounds, title ); + Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; procID = kControlSliderProc + kControlSliderLiveFeedback; if(style & wxSL_AUTOTICKS) { @@ -83,28 +85,13 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, } - m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, title, false, + m_macControl = (WXWidget) ::NewControl( MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, "\p", true, value, minValue, maxValue, procID, (long) this); - wxASSERT_MSG( (ControlHandle) m_macControl != NULL , "No valid mac control" ) ; - - ::SetControlAction( (ControlHandle) m_macControl , wxMacLiveScrollbarActionUPP ) ; - - if(style & wxSL_LABELS) - { - m_macMinimumStatic = new wxStaticText( this, -1, "" ); - m_macMaximumStatic = new wxStaticText( this, -1, "" ); - m_macValueStatic = new wxStaticText( this, -1, "" ); - SetRange(minValue, maxValue); - SetValue(value); - } - - else { - m_macMinimumStatic = NULL ; - m_macMaximumStatic = NULL ; - m_macValueStatic = NULL ; - } + wxASSERT_MSG( (ControlRef) m_macControl != NULL , wxT("No valid mac control") ) ; + ::SetControlAction( (ControlRef) m_macControl , wxMacLiveScrollbarActionUPP ) ; + if(style & wxSL_VERTICAL) { SetSizeHints(10, -1, 10, -1); // Forces SetSize to use the proper width } @@ -115,27 +102,39 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id, // proper dimensions, it also means other people cannot bugger the slider with // other values - MacPostControlCreate() ; + 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 ); + SetRange(minValue, maxValue); + SetValue(value); + } + + MacPostControlCreate(pos,size) ; return true; } wxSlider::~wxSlider() { + delete m_macMinimumStatic ; + delete m_macMaximumStatic ; + delete m_macValueStatic ; } int wxSlider::GetValue() const { - return GetControl32BitValue( (ControlHandle) m_macControl) ; + return GetControl32BitValue( (ControlRef) m_macControl) ; } void wxSlider::SetValue(int value) { wxString valuestring ; - valuestring.Printf( "%d" , value ) ; + valuestring.Printf( wxT("%d") , value ) ; if ( m_macValueStatic ) m_macValueStatic->SetLabel( valuestring ) ; - SetControl32BitValue( (ControlHandle) m_macControl , value ) ; + SetControl32BitValue( (ControlRef) m_macControl , value ) ; } void wxSlider::SetRange(int minValue, int maxValue) @@ -145,15 +144,15 @@ void wxSlider::SetRange(int minValue, int maxValue) m_rangeMin = minValue; m_rangeMax = maxValue; - SetControl32BitMinimum( (ControlHandle) m_macControl, m_rangeMin); - SetControl32BitMaximum( (ControlHandle) m_macControl, m_rangeMax); + SetControl32BitMinimum( (ControlRef) m_macControl, m_rangeMin); + SetControl32BitMaximum( (ControlRef) m_macControl, m_rangeMax); if(m_macMinimumStatic) { - value.Printf("%d", m_rangeMin); + value.Printf(wxT("%d"), m_rangeMin); m_macMinimumStatic->SetLabel(value); } if(m_macMaximumStatic) { - value.Printf("%d", m_rangeMax); + value.Printf(wxT("%d"), m_rangeMax); m_macMaximumStatic->SetLabel(value); } SetValue(m_rangeMin); @@ -238,13 +237,20 @@ void wxSlider::Command (wxCommandEvent & event) ProcessCommand (event); } -void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) +void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool mouseStillDown ) { - SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ; + SInt16 value = ::GetControl32BitValue( (ControlRef) m_macControl ) ; SetValue( value ) ; - wxScrollEvent event(wxEVT_SCROLL_THUMBTRACK, m_windowId); + wxEventType scrollEvent = wxEVT_NULL ; + + if ( mouseStillDown ) + scrollEvent = wxEVT_SCROLL_THUMBTRACK; + else + scrollEvent = wxEVT_SCROLL_THUMBRELEASE; + + wxScrollEvent event(scrollEvent, m_windowId); event.SetPosition(value); event.SetEventObject( this ); GetEventHandler()->ProcessEvent(event); @@ -283,9 +289,9 @@ wxSize wxSlider::DoGetBestSize() const int ht, wd; // Get maximum text label width and height - text.Printf("%d", m_rangeMin); + text.Printf(wxT("%d"), m_rangeMin); GetTextExtent(text, &textwidth, &textheight); - text.Printf("%d", m_rangeMax); + text.Printf(wxT("%d"), m_rangeMax); GetTextExtent(text, &wd, &ht); if(ht > textheight) { textheight = ht; @@ -324,26 +330,8 @@ wxSize wxSlider::DoGetBestSize() const return size; } -void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags) +void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags) { - wxControl::DoSetSize( x, y , width , height ,sizeFlags ) ; -} - -void wxSlider::MacUpdateDimensions() -{ - // actually in the current systems this should never be possible, but later reparenting - // may become a reality - - if ( (ControlHandle) m_macControl == NULL ) - return ; - - if ( GetParent() == NULL ) - return ; - - WindowRef rootwindow = (WindowRef) MacGetRootWindow() ; - if ( rootwindow == NULL ) - return ; - int xborder, yborder; int minValWidth, maxValWidth, textwidth, textheight; int sliderBreadth; @@ -356,9 +344,9 @@ void wxSlider::MacUpdateDimensions() int ht; // Get maximum text label width and height - text.Printf("%d", m_rangeMin); + text.Printf(wxT("%d"), m_rangeMin); GetTextExtent(text, &minValWidth, &textheight); - text.Printf("%d", m_rangeMax); + text.Printf(wxT("%d"), m_rangeMax); GetTextExtent(text, &maxValWidth, &ht); if(ht > textheight) { textheight = ht; @@ -378,43 +366,30 @@ void wxSlider::MacUpdateDimensions() if(GetWindowStyle() & wxSL_VERTICAL) { - m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, - m_height - yborder - textheight); - m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0); - m_macValueStatic->Move(0, m_height - textheight); + + if ( m_macMinimumStatic ) + m_macMinimumStatic->Move(x + sliderBreadth + wxSLIDER_BORDERTEXT, + y + h - yborder - textheight); + if ( m_macMaximumStatic ) + m_macMaximumStatic->Move(x + sliderBreadth + wxSLIDER_BORDERTEXT, y + 0); + if ( m_macValueStatic ) + m_macValueStatic->Move(0, y + h - textheight); + h = h - yborder ; } else { - m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT); - m_macMaximumStatic->Move(m_width - xborder - maxValWidth / 2, - sliderBreadth + wxSLIDER_BORDERTEXT); - m_macValueStatic->Move(m_width - textwidth, 0); + if ( m_macMinimumStatic ) + m_macMinimumStatic->Move(x + 0, y + sliderBreadth + wxSLIDER_BORDERTEXT); + if ( m_macMaximumStatic ) + m_macMaximumStatic->Move(x + w - xborder - maxValWidth / 2, + y + sliderBreadth + wxSLIDER_BORDERTEXT); + if ( m_macValueStatic ) + m_macValueStatic->Move(x + w - textwidth, y + 0); + w = w - xborder ; } } - Rect oldBounds ; - GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ; - - int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ; - int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ; - int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder - xborder ; - int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder - yborder ; - - GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ; - bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ; - bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ; - if ( doMove || doResize ) - { - InvalWindowRect( rootwindow, &oldBounds ) ; - if ( doMove ) - { - UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ; - } - if ( doResize ) - { - UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ; - } - } + wxControl::DoSetSize( x, y , w , h ,sizeFlags ) ; } void wxSlider::DoMoveWindow(int x, int y, int width, int height)