1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/mac/tglbtn.cpp 
   3 // Purpose:     Definition of the wxToggleButton class, which implements a 
   4 //              toggle button under wxMac. 
   5 // Author:      Stefan Csomor 
   9 // Copyright:   (c) 2000 Johnny C. Norris II 
  10 // License:     Rocketeer license 
  11 ///////////////////////////////////////////////////////////////////////////// 
  13 // ============================================================================ 
  15 // ============================================================================ 
  17 // ---------------------------------------------------------------------------- 
  19 // ---------------------------------------------------------------------------- 
  22 #pragma implementation "button.h" 
  26 #include "wx/tglbtn.h" 
  30 #include "wx/mac/uma.h" 
  33 static const int kMacOSXHorizontalBorder 
= 2 ; 
  34 static const int kMacOSXVerticalBorder 
= 4 ; 
  36 // ---------------------------------------------------------------------------- 
  38 // ---------------------------------------------------------------------------- 
  40 IMPLEMENT_DYNAMIC_CLASS(wxToggleButton
, wxControl
) 
  41 DEFINE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
) 
  43 // ============================================================================ 
  45 // ============================================================================ 
  47 // ---------------------------------------------------------------------------- 
  49 // ---------------------------------------------------------------------------- 
  51 // Single check box item 
  52 bool wxToggleButton::Create(wxWindow 
*parent
, wxWindowID id
, 
  53                             const wxString
& label
, 
  55                             const wxSize
& size
, long style
, 
  56                             const wxValidator
& validator
, 
  59     if ( !wxControl::Create(parent
, id
, pos
, size
, style
, validator
, name
) ) 
  65     if ( UMAHasAquaLayout() ) 
  67         m_macHorizontalBorder 
= kMacOSXHorizontalBorder
; 
  68         m_macVerticalBorder 
= kMacOSXVerticalBorder
; 
  71     MacPreControlCreate( parent 
, id 
,  label 
, pos 
, size 
,style
, validator 
, name 
, &bounds 
, title 
) ; 
  73     m_macControl 
= ::NewControl( MAC_WXHWND(parent
->MacGetRootWindow()) , &bounds 
, title 
, false , 0 , kControlBehaviorToggles 
, 1,  
  74           kControlBevelButtonNormalBevelProc  
, (long) this ) ; 
  75     wxASSERT_MSG( (ControlHandle
) m_macControl 
!= NULL 
, wxT("No valid mac control") ) ; 
  77     MacPostControlCreate() ; 
  82 wxSize 
wxToggleButton::DoGetBestSize() const 
  87     int lBtn 
= m_label
.Length() * 8 + 12 ; 
  91     if ( UMAHasAquaLayout() ) 
  93         wBtn 
+= 2 * kMacOSXHorizontalBorder 
; 
  94         hBtn 
+= 2 * kMacOSXVerticalBorder 
; 
  96     return wxSize ( wBtn 
, hBtn 
) ; 
  99 void wxToggleButton::SetValue(bool val
) 
 101     ::SetControl32BitValue( (ControlHandle
) m_macControl 
, val 
) ; 
 104 bool wxToggleButton::GetValue() const 
 106     return GetControl32BitValue( (ControlHandle
) m_macControl 
) ; 
 109 void wxToggleButton::Command(wxCommandEvent 
& event
) 
 111    SetValue((event
.GetInt() != 0)); 
 112    ProcessCommand(event
); 
 115 void wxToggleButton::MacHandleControlClick( WXWidget 
WXUNUSED(control
) , wxInt16 controlpart 
, bool WXUNUSED(mouseStillDown
) )  
 117     if ( controlpart 
!= kControlNoPart 
) 
 119         wxCommandEvent 
event(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
, m_windowId
); 
 120         event
.SetInt(GetValue()); 
 121         event
.SetEventObject(this); 
 122         ProcessCommand(event
); 
 126 #endif // wxUSE_TOGGLEBTN