]> git.saurik.com Git - wxWidgets.git/blame - src/mac/carbon/scrolbar.cpp
Compilation fixes for wxPython's wxWizard, added wxRegionFromPoints
[wxWidgets.git] / src / mac / carbon / scrolbar.cpp
CommitLineData
e9576ca5
SC
1/////////////////////////////////////////////////////////////////////////////
2// Name: scrolbar.cpp
3// Purpose: wxScrollBar
4// Author: AUTHOR
5// Modified by:
6// Created: ??/??/98
7// RCS-ID: $Id$
8// Copyright: (c) AUTHOR
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifdef __GNUG__
13#pragma implementation "scrolbar.h"
14#endif
15
d8c736e5
GD
16#include "wx/defs.h"
17
8140eec9
SC
18#ifndef WX_PRECOMP
19 #include "wx/intl.h"
20 #include "wx/log.h"
21#endif // WX_PRECOMP
22
e9576ca5 23#include "wx/scrolbar.h"
519cb848 24#include "wx/mac/uma.h"
e9576ca5 25
2f1ae414 26#if !USE_SHARED_LIBRARY
e9576ca5
SC
27IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
28
169935ad
SC
29BEGIN_EVENT_TABLE(wxScrollBar, wxControl)
30END_EVENT_TABLE()
31
2f1ae414 32#endif
e9576ca5 33
519cb848
SC
34extern ControlActionUPP wxMacLiveScrollbarActionUPP ;
35
e9576ca5
SC
36// Scrollbar
37bool wxScrollBar::Create(wxWindow *parent, wxWindowID id,
38 const wxPoint& pos,
39 const wxSize& size, long style,
40 const wxValidator& validator,
41 const wxString& name)
42{
519cb848
SC
43 if (!parent)
44 return FALSE;
e9576ca5 45
519cb848
SC
46 Rect bounds ;
47 Str255 title ;
48
49 MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
50
76a5e5d2 51 m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , true , 0 , 0 , 100,
519cb848
SC
52 kControlScrollBarLiveProc , (long) this ) ;
53
76a5e5d2 54 wxASSERT_MSG( (ControlHandle) m_macControl != NULL , "No valid mac control" ) ;
519cb848 55
76a5e5d2 56 ::SetControlAction( (ControlHandle) m_macControl , wxMacLiveScrollbarActionUPP ) ;
e9576ca5 57
519cb848 58 MacPostControlCreate() ;
e9576ca5 59
519cb848 60 return TRUE;
e9576ca5
SC
61}
62
63wxScrollBar::~wxScrollBar()
64{
65}
66
67void wxScrollBar::SetThumbPosition(int viewStart)
68{
467e3168 69 ::SetControl32BitValue( (ControlHandle) m_macControl , viewStart ) ;
e9576ca5
SC
70}
71
72int wxScrollBar::GetThumbPosition() const
73{
467e3168 74 return ::GetControl32BitValue( (ControlHandle) m_macControl ) ;
e9576ca5
SC
75}
76
77void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageSize,
78 bool refresh)
79{
4b1c4c21
SC
80 m_pageSize = pageSize;
81 m_viewSize = thumbSize;
e9576ca5
SC
82 m_objectSize = range;
83
4b1c4c21 84 int range1 = wxMax((m_objectSize - m_viewSize), 0) ;
519cb848 85
467e3168
SC
86 SetControl32BitMaximum( (ControlHandle) m_macControl , range1 ) ;
87 SetControl32BitMinimum( (ControlHandle) m_macControl , 0 ) ;
88 SetControl32BitValue( (ControlHandle) m_macControl , position ) ;
519cb848
SC
89
90 if ( UMAGetAppearanceVersion() >= 0x0110 )
91 {
a49afa93
SC
92 if ( SetControlViewSize != (void*) kUnresolvedCFragSymbolAddress )
93 {
4b1c4c21 94 SetControlViewSize( (ControlHandle) m_macControl , m_viewSize ) ;
a49afa93 95 }
519cb848 96 }
66a09d47
SC
97 if ( refresh )
98 MacRedrawControl() ;
e9576ca5
SC
99}
100
101
102void wxScrollBar::Command(wxCommandEvent& event)
103{
104 SetThumbPosition(event.m_commandInt);
105 ProcessCommand(event);
106}
107
76a5e5d2 108void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
519cb848 109{
76a5e5d2 110 if ( (ControlHandle) m_macControl == NULL )
519cb848
SC
111 return ;
112
467e3168
SC
113 int position = GetControl32BitValue( (ControlHandle) m_macControl) ;
114 int minPos = GetControl32BitMinimum( (ControlHandle) m_macControl) ;
115 int maxPos = GetControl32BitMaximum( (ControlHandle) m_macControl) ;
519cb848
SC
116
117 wxEventType scrollEvent = wxEVT_NULL;
118 int nScrollInc;
119
120 switch( controlpart )
121 {
122 case kControlUpButtonPart :
4b1c4c21 123 nScrollInc = -1;
519cb848
SC
124 scrollEvent = wxEVT_SCROLL_LINEUP;
125 break ;
126 case kControlDownButtonPart :
4b1c4c21 127 nScrollInc = 1;
519cb848
SC
128 scrollEvent = wxEVT_SCROLL_LINEDOWN;
129 break ;
130 case kControlPageUpPart :
4b1c4c21 131 nScrollInc = -m_pageSize;
519cb848
SC
132 scrollEvent = wxEVT_SCROLL_PAGEUP;
133 break ;
134 case kControlPageDownPart :
4b1c4c21 135 nScrollInc = m_pageSize;
519cb848
SC
136 scrollEvent = wxEVT_SCROLL_PAGEDOWN;
137 break ;
138 case kControlIndicatorPart :
139 nScrollInc = 0 ;
140 scrollEvent = wxEVT_SCROLL_THUMBTRACK;
141 break ;
8140eec9
SC
142 default :
143 wxLogError(_("illegal scrollbar selector %d"), controlpart);
144 break ;
519cb848
SC
145 }
146
147 int new_pos = position + nScrollInc;
148
8140eec9
SC
149 if (new_pos < minPos)
150 new_pos = minPos;
519cb848
SC
151 if (new_pos > maxPos)
152 new_pos = maxPos;
153 if ( nScrollInc )
154 SetThumbPosition(new_pos);
155
156 wxScrollEvent event(scrollEvent, m_windowId);
157 if ( m_windowStyle & wxHORIZONTAL )
158 {
159 event.SetOrientation( wxHORIZONTAL ) ;
160 }
161 else
162 {
163 event.SetOrientation( wxVERTICAL ) ;
164 }
165 event.SetPosition(new_pos);
166 event.SetEventObject( this );
7c74e7fe
SC
167 wxWindow* window = GetParent() ;
168 if (window && window->MacIsWindowScrollbar(this) )
169 {
170 // this is hardcoded
171 window->MacOnScroll(event);
172 }
173 else
174 GetEventHandler()->ProcessEvent(event);
519cb848
SC
175}
176