1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/mac/classic/button.cpp
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
18 #include "wx/button.h"
24 #include "wx/stockitem.h"
26 IMPLEMENT_DYNAMIC_CLASS(wxButton
, wxControl
)
28 #include "wx/mac/uma.h"
31 static const int kMacOSXHorizontalBorder
= 2 ;
32 static const int kMacOSXVerticalBorder
= 4 ;
34 bool wxButton::Create(wxWindow
*parent
, wxWindowID id
, const wxString
& lbl
,
36 const wxSize
& size
, long style
,
37 const wxValidator
& validator
,
41 if (label
.empty() && wxIsStockID(id
))
42 label
= wxGetStockLabel(id
);
44 if ( !wxButtonBase::Create(parent
, id
, pos
, size
, style
, validator
, name
) )
50 if ( UMAHasAquaLayout() )
52 m_macHorizontalBorder
= kMacOSXHorizontalBorder
;
53 m_macVerticalBorder
= kMacOSXVerticalBorder
;
56 MacPreControlCreate( parent
, id
, label
, pos
, size
,style
, validator
, name
, &bounds
, title
) ;
58 m_macControl
= (WXWidget
) ::NewControl( MAC_WXHWND(parent
->MacGetRootWindow()) , &bounds
, title
, false , 0 , 0 , 1,
59 kControlPushButtonProc
, (long) this ) ;
60 wxASSERT_MSG( (ControlHandle
) m_macControl
!= NULL
, wxT("No valid mac control") ) ;
62 MacPostControlCreate() ;
67 void wxButton::SetDefault()
69 wxTopLevelWindow
*tlw
= wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow
);
70 wxButton
*btnOldDefault
= NULL
;
73 btnOldDefault
= wxDynamicCast(tlw
->GetDefaultItem(), wxButton
);
74 tlw
->SetDefaultItem(this);
78 if ( btnOldDefault
&& btnOldDefault
->m_macControl
)
81 ::SetControlData( (ControlHandle
) btnOldDefault
->m_macControl
, kControlButtonPart
,
82 kControlPushButtonDefaultTag
, sizeof( Boolean
) , (char*)(&inData
) ) ;
84 if ( (ControlHandle
) m_macControl
)
87 ::SetControlData( (ControlHandle
) m_macControl
, kControlButtonPart
,
88 kControlPushButtonDefaultTag
, sizeof( Boolean
) , (char*)(&inData
) ) ;
92 wxSize
wxButton::DoGetBestSize() const
94 wxSize sz
= GetDefaultSize() ;
96 int wBtn
= m_label
.length() * 8 + 12 + 2 * kMacOSXHorizontalBorder
;
98 if (wBtn
> sz
.x
) sz
.x
= wBtn
;
103 wxSize
wxButton::GetDefaultSize()
108 if ( UMAHasAquaLayout() )
110 wBtn
+= 2 * kMacOSXHorizontalBorder
;
111 hBtn
+= 2 * kMacOSXVerticalBorder
;
114 return wxSize(wBtn
, hBtn
);
117 void wxButton::Command (wxCommandEvent
& event
)
119 if ( (ControlHandle
) m_macControl
)
121 HiliteControl( (ControlHandle
) m_macControl
, kControlButtonPart
) ;
122 unsigned long finalTicks
;
123 Delay( 8 , &finalTicks
) ;
124 HiliteControl( (ControlHandle
) m_macControl
, 0 ) ;
126 ProcessCommand (event
);
129 void wxButton::MacHandleControlClick( WXWidget
WXUNUSED(control
) , wxInt16 controlpart
, bool WXUNUSED(mouseStillDown
) )
131 if ( controlpart
!= kControlNoPart
)
133 wxCommandEvent
event(wxEVT_COMMAND_BUTTON_CLICKED
, m_windowId
);
134 event
.SetEventObject(this);
135 ProcessCommand(event
);