]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/carbon/gauge.cpp
Fixup Blit so it can be used with a source that is a wxBufferedDC,
[wxWidgets.git] / src / mac / carbon / gauge.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: gauge.cpp
3// Purpose: wxGauge class
4// Author: Stefan Csomor
5// Modified by:
6// Created: 1998-01-01
7// RCS-ID: $Id$
8// Copyright: (c) Stefan Csomor
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#include "wx/wxprec.h"
13
14#if wxUSE_GAUGE
15
16#include "wx/gauge.h"
17
18IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl)
19
20#include "wx/mac/uma.h"
21
22bool wxGauge::Create( wxWindow *parent,
23 wxWindowID id,
24 int range,
25 const wxPoint& pos,
26 const wxSize& s,
27 long style,
28 const wxValidator& validator,
29 const wxString& name )
30{
31 m_macIsUserPane = false;
32
33 if ( !wxGaugeBase::Create( parent, id, range, pos, s, style & 0xE0FFFFFF, validator, name ) )
34 return false;
35
36 wxSize size = s;
37
38#if 0
39 if (size.x == wxDefaultCoord && size.y == wxDefaultCoord)
40 size = wxSize( 200 , 16 );
41#endif
42
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() );
48 verify_noerr( err );
49
50 if ( GetValue() == 0 )
51 m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, (Boolean)false );
52
53 MacPostControlCreate( pos, size );
54
55 return true;
56}
57
58void wxGauge::SetRange(int r)
59{
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 )
66 {
67 m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
68 }
69
70 m_peer->SetMaximum( GetRange() ) ;
71 }
72}
73
74void wxGauge::SetValue(int pos)
75{
76 // we are going via the base class in case there is
77 // some change behind the values by it
78 wxGaugeBase::SetValue( pos ) ;
79
80 if ( m_peer && m_peer->Ok() )
81 {
82 // switch back to determinate mode if not there already
83 if ( m_peer->GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != false )
84 {
85 m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
86 }
87
88 m_peer->SetValue( GetValue() ) ;
89
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 )
93 {
94 m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, shouldAnimate ) ;
95 if ( !shouldAnimate )
96 Refresh() ;
97 }
98 }
99}
100
101int wxGauge::GetValue() const
102{
103#if 0
104 if ( m_peer && m_peer->Ok() )
105 return m_peer->GetValue() ;
106#endif
107
108 return m_gaugePos ;
109}
110
111void wxGauge::Pulse()
112{
113 if ( m_peer && m_peer->Ok() )
114 {
115 if ( m_peer->GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != true )
116 {
117 m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, true);
118 }
119
120 if ( m_peer->GetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag ) != true )
121 {
122 m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, true ) ;
123 }
124 }
125}
126
127#endif // wxUSE_GAUGE
128