1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxGauge class
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
18 IMPLEMENT_DYNAMIC_CLASS(wxGauge
, wxControl
)
20 #include "wx/osx/uma.h"
22 bool wxGauge::Create( wxWindow
*parent
,
28 const wxValidator
& validator
,
29 const wxString
& name
)
31 m_macIsUserPane
= false;
33 if ( !wxGaugeBase::Create( parent
, id
, range
, pos
, s
, style
& 0xE0FFFFFF, validator
, name
) )
39 if (size
.x
== wxDefaultCoord
&& size
.y
== wxDefaultCoord
)
40 size
= wxSize( 200 , 16 );
43 Rect bounds
= wxMacGetBoundsForControl( this, pos
, size
);
44 m_peer
= new wxMacControl( this );
45 OSStatus err
= CreateProgressBarControl(
46 MAC_WXHWND(parent
->MacGetTopLevelWindowRef()), &bounds
,
47 GetValue(), 0, GetRange(), false /* not indeterminate */, m_peer
->GetControlRefAddr() );
50 if ( GetValue() == 0 )
51 m_peer
->SetData
<Boolean
>( kControlEntireControl
, kControlProgressBarAnimatingTag
, (Boolean
)false );
53 MacPostControlCreate( pos
, size
);
58 void wxGauge::SetRange(int r
)
60 // we are going via the base class in case there is
61 // some change behind the values by it
62 wxGaugeBase::SetRange( r
) ;
63 if ( m_peer
&& m_peer
->Ok() ){
64 // switch back to determinate mode if not there already
65 if ( m_peer
->GetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
) != false )
67 m_peer
->SetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
, (Boolean
)false );
70 m_peer
->SetMaximum( GetRange() ) ;
74 void wxGauge::SetValue(int pos
)
76 // we are going via the base class in case there is
77 // some change behind the values by it
78 wxGaugeBase::SetValue( pos
) ;
80 if ( m_peer
&& m_peer
->Ok() )
82 // switch back to determinate mode if not there already
83 if ( m_peer
->GetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
) != false )
85 m_peer
->SetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
, (Boolean
)false );
88 m_peer
->SetValue( GetValue() ) ;
90 // turn off animation in the unnecessary situations as this is consuming a lot of CPU otherwise
91 Boolean shouldAnimate
= ( GetValue() > 0 && GetValue() < GetRange() ) ;
92 if ( m_peer
->GetData
<Boolean
>( kControlEntireControl
, kControlProgressBarAnimatingTag
) != shouldAnimate
)
94 m_peer
->SetData
<Boolean
>( kControlEntireControl
, kControlProgressBarAnimatingTag
, shouldAnimate
) ;
101 int wxGauge::GetValue() const
104 if ( m_peer
&& m_peer
->Ok() )
105 return m_peer
->GetValue() ;
111 void wxGauge::Pulse()
113 if ( m_peer
&& m_peer
->Ok() )
115 if ( m_peer
->GetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
) != true )
117 m_peer
->SetData
<Boolean
>( kControlNoPart
, kControlProgressBarIndeterminateTag
, true);
120 if ( m_peer
->GetData
<Boolean
>( kControlEntireControl
, kControlProgressBarAnimatingTag
) != true )
122 m_peer
->SetData
<Boolean
>( kControlEntireControl
, kControlProgressBarAnimatingTag
, true ) ;
127 #endif // wxUSE_GAUGE