]> git.saurik.com Git - wxWidgets.git/blame - src/mac/classic/button.cpp
Robert Lang's patch [ 1583183 ] Fixes printing/print preview inconsistencies
[wxWidgets.git] / src / mac / classic / button.cpp
CommitLineData
2646f485 1/////////////////////////////////////////////////////////////////////////////
18f3decb 2// Name: src/mac/classic/button.cpp
2646f485
SC
3// Purpose: wxButton
4// Author: Stefan Csomor
5// Modified by:
6// Created: 1998-01-01
7// RCS-ID: $Id$
8// Copyright: (c) Stefan Csomor
18f3decb 9// Licence: wxWindows licence
2646f485
SC
10/////////////////////////////////////////////////////////////////////////////
11
18f3decb
WS
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15 #pragma hdrstop
16#endif
2646f485
SC
17
18#include "wx/button.h"
8e609c82
WS
19
20#ifndef WX_PRECOMP
21 #include "wx/panel.h"
22#endif
23
5f7bcb48 24#include "wx/stockitem.h"
2646f485 25
2646f485 26IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
2646f485
SC
27
28#include "wx/mac/uma.h"
29// Button
30
31static const int kMacOSXHorizontalBorder = 2 ;
32static const int kMacOSXVerticalBorder = 4 ;
33
5f7bcb48 34bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl,
2646f485
SC
35 const wxPoint& pos,
36 const wxSize& size, long style,
37 const wxValidator& validator,
38 const wxString& name)
39{
5f7bcb48
VS
40 wxString label(lbl);
41 if (label.empty() && wxIsStockID(id))
42 label = wxGetStockLabel(id);
18f3decb 43
2646f485
SC
44 if ( !wxButtonBase::Create(parent, id, pos, size, style, validator, name) )
45 return false;
46
47 Rect bounds ;
48 Str255 title ;
49
50 if ( UMAHasAquaLayout() )
51 {
52 m_macHorizontalBorder = kMacOSXHorizontalBorder;
53 m_macVerticalBorder = kMacOSXVerticalBorder;
54 }
18f3decb 55
2646f485
SC
56 MacPreControlCreate( parent , id , label , pos , size ,style, validator , name , &bounds , title ) ;
57
18f3decb 58 m_macControl = (WXWidget) ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
2646f485
SC
59 kControlPushButtonProc , (long) this ) ;
60 wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ;
18f3decb 61
2646f485 62 MacPostControlCreate() ;
18f3decb
WS
63
64 return true;
2646f485
SC
65}
66
67void wxButton::SetDefault()
68{
6c20e8f8 69 wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
2646f485 70 wxButton *btnOldDefault = NULL;
6c20e8f8 71 if ( tlw )
2646f485 72 {
6c20e8f8
VZ
73 btnOldDefault = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
74 tlw->SetDefaultItem(this);
2646f485
SC
75 }
76
77 Boolean inData;
78 if ( btnOldDefault && btnOldDefault->m_macControl )
79 {
80 inData = 0;
81 ::SetControlData( (ControlHandle) btnOldDefault->m_macControl , kControlButtonPart ,
82 kControlPushButtonDefaultTag , sizeof( Boolean ) , (char*)(&inData) ) ;
83 }
84 if ( (ControlHandle) m_macControl )
85 {
86 inData = 1;
87 ::SetControlData( (ControlHandle) m_macControl , kControlButtonPart ,
88 kControlPushButtonDefaultTag , sizeof( Boolean ) , (char*)(&inData) ) ;
89 }
90}
91
92wxSize wxButton::DoGetBestSize() const
93{
18f3decb
WS
94 wxSize sz = GetDefaultSize() ;
95
8e609c82 96 int wBtn = m_label.length() * 8 + 12 + 2 * kMacOSXHorizontalBorder ;
18f3decb
WS
97
98 if (wBtn > sz.x) sz.x = wBtn;
99
100 return sz ;
2646f485
SC
101}
102
103wxSize wxButton::GetDefaultSize()
104{
18f3decb 105 int wBtn = 70 ;
2646f485
SC
106 int hBtn = 20 ;
107
108 if ( UMAHasAquaLayout() )
109 {
110 wBtn += 2 * kMacOSXHorizontalBorder ;
111 hBtn += 2 * kMacOSXVerticalBorder ;
112 }
113
114 return wxSize(wBtn, hBtn);
115}
116
117void wxButton::Command (wxCommandEvent & event)
118{
119 if ( (ControlHandle) m_macControl )
120 {
121 HiliteControl( (ControlHandle) m_macControl , kControlButtonPart ) ;
122 unsigned long finalTicks ;
123 Delay( 8 , &finalTicks ) ;
124 HiliteControl( (ControlHandle) m_macControl , 0 ) ;
125 }
126 ProcessCommand (event);
127}
128
18f3decb 129void wxButton::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 controlpart , bool WXUNUSED(mouseStillDown) )
2646f485
SC
130{
131 if ( controlpart != kControlNoPart )
132 {
133 wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId );
134 event.SetEventObject(this);
135 ProcessCommand(event);
136 }
137}