X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1f0c8f31f407ecfce909060464c0ea655221cdab..baac715443ebb90983c07cd1d29640a0b6410c53:/src/osx/carbon/gauge.cpp diff --git a/src/osx/carbon/gauge.cpp b/src/osx/carbon/gauge.cpp index 57a83ed4f1..9a74a41a7c 100644 --- a/src/osx/carbon/gauge.cpp +++ b/src/osx/carbon/gauge.cpp @@ -15,113 +15,81 @@ #include "wx/gauge.h" -IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl) - -#include "wx/osx/uma.h" - -bool wxGauge::Create( wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos, - const wxSize& s, - long style, - const wxValidator& validator, - const wxString& name ) -{ - m_macIsUserPane = false; - - if ( !wxGaugeBase::Create( parent, id, range, pos, s, style & 0xE0FFFFFF, validator, name ) ) - return false; - - wxSize size = s; - -#if 0 - if (size.x == wxDefaultCoord && size.y == wxDefaultCoord) - size = wxSize( 200 , 16 ); -#endif - - Rect bounds = wxMacGetBoundsForControl( this, pos, size ); - m_peer = new wxMacControl( this ); - OSStatus err = CreateProgressBarControl( - MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, - GetValue(), 0, GetRange(), false /* not indeterminate */, m_peer->GetControlRefAddr() ); - verify_noerr( err ); +#include "wx/osx/private.h" - if ( GetValue() == 0 ) - m_peer->SetData( kControlEntireControl, kControlProgressBarAnimatingTag, (Boolean)false ); - - MacPostControlCreate( pos, size ); - - return true; -} - -void wxGauge::SetRange(int r) +class wxMacGaugeCarbonControl : public wxMacControl { - // we are going via the base class in case there is - // some change behind the values by it - wxGaugeBase::SetRange( r ) ; - if ( m_peer && m_peer->Ok() ){ +public : + wxMacGaugeCarbonControl( wxWindowMac* peer ) : wxMacControl( peer ) + { + } + + void SetMaximum(wxInt32 v) + { // switch back to determinate mode if not there already - if ( m_peer->GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != false ) + if ( GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != false ) { - m_peer->SetData( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false ); + SetData( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false ); } - m_peer->SetMaximum( GetRange() ) ; + wxMacControl::SetMaximum( v ) ; } -} - -void wxGauge::SetValue(int pos) -{ - // we are going via the base class in case there is - // some change behind the values by it - wxGaugeBase::SetValue( pos ) ; - if ( m_peer && m_peer->Ok() ) + void SetValue(wxInt32 v) { // switch back to determinate mode if not there already - if ( m_peer->GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != false ) + if ( GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != false ) { - m_peer->SetData( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false ); + SetData( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false ); } - m_peer->SetValue( GetValue() ) ; + wxMacControl::SetValue( v ) ; // turn off animation in the unnecessary situations as this is consuming a lot of CPU otherwise - Boolean shouldAnimate = ( GetValue() > 0 && GetValue() < GetRange() ) ; - if ( m_peer->GetData( kControlEntireControl, kControlProgressBarAnimatingTag ) != shouldAnimate ) + Boolean shouldAnimate = ( v > 0 && v < GetMaximum() ) ; + if ( GetData( kControlEntireControl, kControlProgressBarAnimatingTag ) != shouldAnimate ) { - m_peer->SetData( kControlEntireControl, kControlProgressBarAnimatingTag, shouldAnimate ) ; + SetData( kControlEntireControl, kControlProgressBarAnimatingTag, shouldAnimate ) ; if ( !shouldAnimate ) - Refresh() ; + SetNeedsDisplay(NULL) ; } } -} - -int wxGauge::GetValue() const -{ -#if 0 - if ( m_peer && m_peer->Ok() ) - return m_peer->GetValue() ; -#endif - return m_gaugePos ; -} - -void wxGauge::Pulse() -{ - if ( m_peer && m_peer->Ok() ) + void PulseGauge() { - if ( m_peer->GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != true ) + if ( GetData( kControlNoPart, kControlProgressBarIndeterminateTag ) != true ) { - m_peer->SetData( kControlNoPart, kControlProgressBarIndeterminateTag, true); + SetData( kControlNoPart, kControlProgressBarIndeterminateTag, true); } - if ( m_peer->GetData( kControlEntireControl, kControlProgressBarAnimatingTag ) != true ) + if ( GetData( kControlEntireControl, kControlProgressBarAnimatingTag ) != true ) { - m_peer->SetData( kControlEntireControl, kControlProgressBarAnimatingTag, true ) ; + SetData( kControlEntireControl, kControlProgressBarAnimatingTag, true ) ; } } +}; + + +wxWidgetImplType* wxWidgetImpl::CreateGauge( wxWindowMac* wxpeer, + wxWindowMac* parent, + wxWindowID WXUNUSED(id), + wxInt32 value, + wxInt32 minimum, + wxInt32 maximum, + const wxPoint& pos, + const wxSize& size, + long WXUNUSED(style), + long WXUNUSED(extraStyle)) +{ + Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size ); + wxMacGaugeCarbonControl* peer = new wxMacGaugeCarbonControl( wxpeer ); + OSStatus err = CreateProgressBarControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, + value, minimum, maximum, false /* not indeterminate */, peer->GetControlRefAddr() ); + verify_noerr( err ); + if ( value == 0 ) + peer->SetData( kControlEntireControl, kControlProgressBarAnimatingTag, (Boolean)false ); + return peer; } #endif // wxUSE_GAUGE