]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/mac/carbon/scrolbar.cpp
Fix wxListCtrl background colour bug Part I
[wxWidgets.git] / src / mac / carbon / scrolbar.cpp
... / ...
CommitLineData
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
16#include "wx/defs.h"
17
18#include "wx/scrolbar.h"
19#include "wx/mac/uma.h"
20
21#if !USE_SHARED_LIBRARY
22IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
23
24BEGIN_EVENT_TABLE(wxScrollBar, wxControl)
25END_EVENT_TABLE()
26
27#endif
28
29extern ControlActionUPP wxMacLiveScrollbarActionUPP ;
30
31// Scrollbar
32bool wxScrollBar::Create(wxWindow *parent, wxWindowID id,
33 const wxPoint& pos,
34 const wxSize& size, long style,
35 const wxValidator& validator,
36 const wxString& name)
37{
38 if (!parent)
39 return FALSE;
40
41 Rect bounds ;
42 Str255 title ;
43
44 MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
45
46 m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , true , 0 , 0 , 100,
47 kControlScrollBarLiveProc , (long) this ) ;
48
49 wxASSERT_MSG( (ControlHandle) m_macControl != NULL , "No valid mac control" ) ;
50
51 ::SetControlAction( (ControlHandle) m_macControl , wxMacLiveScrollbarActionUPP ) ;
52
53 MacPostControlCreate() ;
54
55 return TRUE;
56}
57
58wxScrollBar::~wxScrollBar()
59{
60}
61
62void wxScrollBar::SetThumbPosition(int viewStart)
63{
64 ::SetControlValue( (ControlHandle) m_macControl , viewStart ) ;
65}
66
67int wxScrollBar::GetThumbPosition() const
68{
69 return ::GetControlValue( (ControlHandle) m_macControl ) ;
70}
71
72void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageSize,
73 bool refresh)
74{
75 m_pageSize = pageSize;
76 m_viewSize = thumbSize;
77 m_objectSize = range;
78
79 int range1 = wxMax((m_objectSize - m_viewSize), 0) ;
80
81 SetControlMaximum( (ControlHandle) m_macControl , range1 ) ;
82 SetControlMinimum( (ControlHandle) m_macControl , 0 ) ;
83 SetControlValue( (ControlHandle) m_macControl , position ) ;
84
85 if ( UMAGetAppearanceVersion() >= 0x0110 )
86 {
87 if ( SetControlViewSize != (void*) kUnresolvedCFragSymbolAddress )
88 {
89 SetControlViewSize( (ControlHandle) m_macControl , m_viewSize ) ;
90 }
91 }
92 if ( refresh )
93 MacRedrawControl() ;
94}
95
96
97void wxScrollBar::Command(wxCommandEvent& event)
98{
99 SetThumbPosition(event.m_commandInt);
100 ProcessCommand(event);
101}
102
103void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
104{
105 if ( (ControlHandle) m_macControl == NULL )
106 return ;
107
108 int position = GetControlValue( (ControlHandle) m_macControl) ;
109 int minPos = GetControlMinimum( (ControlHandle) m_macControl) ;
110 int maxPos = GetControlMaximum( (ControlHandle) m_macControl) ;
111
112 wxEventType scrollEvent = wxEVT_NULL;
113 int nScrollInc;
114
115 switch( controlpart )
116 {
117 case kControlUpButtonPart :
118 nScrollInc = -1;
119 scrollEvent = wxEVT_SCROLL_LINEUP;
120 break ;
121 case kControlDownButtonPart :
122 nScrollInc = 1;
123 scrollEvent = wxEVT_SCROLL_LINEDOWN;
124 break ;
125 case kControlPageUpPart :
126 nScrollInc = -m_pageSize;
127 scrollEvent = wxEVT_SCROLL_PAGEUP;
128 break ;
129 case kControlPageDownPart :
130 nScrollInc = m_pageSize;
131 scrollEvent = wxEVT_SCROLL_PAGEDOWN;
132 break ;
133 case kControlIndicatorPart :
134 nScrollInc = 0 ;
135 scrollEvent = wxEVT_SCROLL_THUMBTRACK;
136 break ;
137 }
138
139 int new_pos = position + nScrollInc;
140
141 if (new_pos < 0)
142 new_pos = 0;
143 if (new_pos > maxPos)
144 new_pos = maxPos;
145 if ( nScrollInc )
146 SetThumbPosition(new_pos);
147
148 wxScrollEvent event(scrollEvent, m_windowId);
149 if ( m_windowStyle & wxHORIZONTAL )
150 {
151 event.SetOrientation( wxHORIZONTAL ) ;
152 }
153 else
154 {
155 event.SetOrientation( wxVERTICAL ) ;
156 }
157 event.SetPosition(new_pos);
158 event.SetEventObject( this );
159 wxWindow* window = GetParent() ;
160 if (window && window->MacIsWindowScrollbar(this) )
161 {
162 // this is hardcoded
163 window->MacOnScroll(event);
164 }
165 else
166 GetEventHandler()->ProcessEvent(event);
167}
168