1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxControl class 
   8 // Copyright:   (c) AUTHOR 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "control.h" 
  18 #include "wx/control.h" 
  22 #include "wx/notebook.h" 
  23 #include "wx/tabctrl.h" 
  24 #include "wx/radiobox.h" 
  25 #include "wx/spinbutt.h" 
  26 #include "wx/scrolbar.h" 
  27 #include "wx/button.h" 
  28 #include "wx/dialog.h" 
  29 #include "wx/statbox.h" 
  31 #include "wx/stattext.h" 
  33 #if !USE_SHARED_LIBRARY 
  34 IMPLEMENT_ABSTRACT_CLASS(wxControl
, wxWindow
) 
  36 BEGIN_EVENT_TABLE(wxControl
, wxWindow
) 
  37     EVT_MOUSE_EVENTS( wxControl::OnMouseEvent 
)  
  38     EVT_CHAR( wxControl::OnKeyDown 
)  
  39     EVT_PAINT( wxControl::OnPaint 
)  
  43 #include "wx/mac/uma.h" 
  47 ControlActionUPP wxMacLiveScrollbarActionUPP 
= NULL 
; 
  49 pascal void wxMacLiveScrollbarActionProc( ControlHandle control 
, ControlPartCode partCode 
) ; 
  50 pascal void wxMacLiveScrollbarActionProc( ControlHandle control 
, ControlPartCode partCode 
) 
  54         wxControl
*  wx 
= (wxControl
*) GetControlReference( control 
) ; 
  57             wx
->MacHandleControlClick( control 
, partCode 
) ; 
  62 wxControl::wxControl() 
  65     m_macHorizontalBorder 
= 0 ; // additional pixels around the real control 
  66     m_macVerticalBorder 
= 0 ; 
  67     m_backgroundColour 
= *wxWHITE
; 
  68     m_foregroundColour 
= *wxBLACK
; 
  69 #if WXWIN_COMPATIBILITY 
  71 #endif // WXWIN_COMPATIBILITY 
  73     if ( wxMacLiveScrollbarActionUPP 
== NULL 
) 
  75 #if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340) 
  76         wxMacLiveScrollbarActionUPP 
= NewControlActionUPP( wxMacLiveScrollbarActionProc 
); 
  78         wxMacLiveScrollbarActionUPP 
= NewControlActionProc( wxMacLiveScrollbarActionProc 
) ; 
  83 bool wxControl::Create(wxWindow 
*parent
, wxWindowID id
, 
  85                        const wxSize
& size
, long style
, 
  86                        const wxValidator
& validator
, 
  90     m_macHorizontalBorder 
= 0 ; // additional pixels around the real control 
  91     m_macVerticalBorder 
= 0 ; 
  92     bool rval 
= wxWindow::Create(parent
, id
, pos
, size
, style
, name
); 
  95         SetValidator(validator
); 
 101 wxControl::~wxControl() 
 103     m_isBeingDeleted 
= TRUE
; 
 104     // If we delete an item, we should initialize the parent panel, 
 105     // because it could now be invalid. 
 106     wxWindow 
*parent 
= GetParent() ; 
 109         if (parent
->GetDefaultItem() == (wxButton
*) this) 
 110             parent
->SetDefaultItem(NULL
); 
 114         ::DisposeControl( m_macControl 
) ; 
 115         m_macControl 
= NULL 
; 
 119 void wxControl::SetLabel(const wxString
& title
) 
 128         if( wxApp::s_macDefaultEncodingIsPC 
) 
 129             label 
= wxMacMakeMacStringFromPC( title 
) ; 
 134         c2pstrcpy( (StringPtr
) maclabel 
, label 
) ; 
 136         strcpy( (char *) maclabel 
, label 
) ; 
 137         c2pstr( (char *) maclabel 
) ; 
 139         ::SetControlTitle( m_macControl 
, maclabel 
) ; 
 144 wxSize 
wxControl::DoGetBestSize() const 
 146     Rect    bestsize 
= { 0 , 0 , 0 , 0 } ; 
 147     short   baselineoffset 
; 
 148     int bestWidth
, bestHeight 
; 
 149     ::GetBestControlRect( m_macControl 
, &bestsize 
, &baselineoffset 
) ; 
 151     if ( EmptyRect( &bestsize 
) ) 
 154         bestsize
.left 
= bestsize
.top 
= 0 ; 
 155         bestsize
.right 
= 16 ; 
 156         bestsize
.bottom 
= 16 ; 
 157         if ( IsKindOf( CLASSINFO( wxScrollBar 
) ) ) 
 159             bestsize
.bottom 
= 16 ; 
 161         else if ( IsKindOf( CLASSINFO( wxSpinButton 
) ) ) 
 163             bestsize
.bottom 
= 24 ;  
 167     if ( IsKindOf( CLASSINFO( wxButton 
) ) ) 
 169         bestWidth 
= m_label
.Length() * 8 + 12 ; 
 170         if ( bestWidth 
< 70 ) 
 173     else if ( IsKindOf( CLASSINFO( wxStaticText 
) ) ) 
 175         bestWidth 
= m_label
.Length() * 8 ; 
 178         bestWidth 
= bestsize
.right 
- bestsize
.left 
; 
 180     bestWidth 
+= 2 * m_macHorizontalBorder 
; 
 182     bestHeight 
= bestsize
.bottom 
- bestsize
.top 
; 
 183     if ( bestHeight 
< 10 ) 
 186     bestHeight 
+= 2 * m_macVerticalBorder
; 
 189     return wxSize(bestWidth
, bestHeight
); 
 192 bool wxControl::ProcessCommand (wxCommandEvent 
& event
) 
 195   // 1) A callback function (to become obsolete) 
 196   // 2) OnCommand, starting at this window and working up parent hierarchy 
 197   // 3) OnCommand then calls ProcessEvent to search the event tables. 
 198 #if WXWIN_COMPATIBILITY 
 201         (void)(*m_callback
)(this, event
); 
 206 #endif // WXWIN_COMPATIBILITY 
 208       return GetEventHandler()->ProcessEvent(event
); 
 212 // ------------------------ 
 213 wxList 
*wxWinMacControlList 
= NULL
; 
 214 wxControl 
*wxFindControlFromMacControl(ControlHandle inControl 
) 
 216     wxNode 
*node 
= wxWinMacControlList
->Find((long)inControl
); 
 219     return (wxControl 
*)node
->Data(); 
 222 void wxAssociateControlWithMacControl(ControlHandle inControl
, wxControl 
*control
) 
 224     // adding NULL WindowRef is (first) surely a result of an error and 
 225     // (secondly) breaks menu command processing 
 226     wxCHECK_RET( inControl 
!= (ControlHandle
) NULL
, "attempt to add a NULL WindowRef to window list" ); 
 228     if ( !wxWinMacControlList
->Find((long)inControl
) ) 
 229         wxWinMacControlList
->Append((long)inControl
, control
); 
 232 void wxRemoveMacControlAssociation(wxControl 
*control
) 
 234     wxWinMacControlList
->DeleteObject(control
); 
 237 void wxControl::MacPreControlCreate( wxWindow 
*parent
, wxWindowID id
, wxString label 
,  
 239              const wxSize
& size
, long style
, 
 240              const wxValidator
& validator
, 
 241              const wxString
& name 
, Rect 
*outBounds 
, StringPtr maclabel 
)  
 246     SetValidator(validator
); 
 248   m_windowStyle 
= style
; 
 249   parent
->AddChild(this); 
 251   m_backgroundColour 
= parent
->GetBackgroundColour() ; 
 252   m_foregroundColour 
= parent
->GetForegroundColour() ; 
 255       m_windowId 
= NewControlId(); 
 259    // These sizes will be adjusted in MacPostControlCreate 
 266     outBounds
->top 
= -10; 
 267     outBounds
->left 
= -10; 
 268     outBounds
->bottom 
= 0; 
 269     outBounds
->right 
= 0; 
 272     strcpy( c_text 
, label 
) ; 
 273     if( wxApp::s_macDefaultEncodingIsPC 
) 
 275         wxMacConvertFromPCForControls( c_text 
) ; 
 279     c2pstrcpy( (StringPtr
) maclabel 
, c_text 
) ; 
 281     strcpy( (char *) maclabel 
, c_text 
) ; 
 282     c2pstr( (char *) maclabel 
) ; 
 286 void wxControl::MacPostControlCreate() 
 288     wxASSERT_MSG( m_macControl 
!= NULL 
, "No valid mac control" ) ; 
 290     if ( IsKindOf( CLASSINFO( wxScrollBar 
) ) ) 
 294     else if ( IsKindOf( CLASSINFO( wxStaticBox 
) ) || IsKindOf( CLASSINFO( wxRadioBox 
) ) || IsKindOf( CLASSINFO( wxButton 
) ) ) 
 296         ControlFontStyleRec     controlstyle 
; 
 297         controlstyle
.flags 
= kControlUseFontMask 
; 
 298         controlstyle
.font 
= kControlFontSmallBoldSystemFont 
; 
 300         ::SetControlFontStyle( m_macControl 
, &controlstyle 
) ; 
 304         ControlFontStyleRec     controlstyle 
; 
 305         controlstyle
.flags 
= kControlUseFontMask 
; 
 306         controlstyle
.font 
= kControlFontSmallSystemFont 
; 
 308         ::SetControlFontStyle( m_macControl 
, &controlstyle 
) ; 
 310     ControlHandle container 
= GetParent()->MacGetContainerForEmbedding() ; 
 311     wxASSERT_MSG( container 
!= NULL 
, wxT("No valid mac container control") ) ; 
 312     ::EmbedControl( m_macControl 
, container 
) ; 
 313     m_macControlIsShown  
= true ; 
 315     wxAssociateControlWithMacControl( m_macControl 
, this ) ; 
 318      // Adjust the controls size and position 
 319      wxPoint 
pos(m_x
, m_y
); 
 320      wxSize 
best_size( DoGetBestSize() ); 
 321      wxSize 
new_size( m_width
, m_height 
); 
 323      m_x 
= m_y 
= m_width 
= m_height 
= -1;  // Forces SetSize to move/size the control 
 325      if (new_size
.x 
== -1) { 
 326         new_size
.x 
= best_size
.x
; 
 328      if (new_size
.y 
== -1) { 
 329          new_size
.y 
= best_size
.y
; 
 332      SetSize(pos
.x
, pos
.y
, new_size
.x
, new_size
.y
); 
 334      UMAShowControl( m_macControl 
) ; 
 337 void wxControl::MacAdjustControlRect()  
 339     wxASSERT_MSG( m_macControl 
!= NULL 
, wxT("No valid mac control") ) ; 
 340     if ( m_width 
== -1 || m_height 
== -1 ) 
 342         Rect    bestsize 
= { 0 , 0 , 0 , 0 } ; 
 343         short   baselineoffset 
; 
 345         ::GetBestControlRect( m_macControl 
, &bestsize 
, &baselineoffset 
) ; 
 347         if ( EmptyRect( &bestsize 
) ) 
 350             bestsize
.left 
= bestsize
.top 
= 0 ; 
 351             bestsize
.right 
= 16 ; 
 352             bestsize
.bottom 
= 16 ; 
 353             if ( IsKindOf( CLASSINFO( wxScrollBar 
) ) ) 
 355                 bestsize
.bottom 
= 16 ; 
 357             else if ( IsKindOf( CLASSINFO( wxSpinButton 
) ) ) 
 359                 bestsize
.bottom 
= 24 ;  
 365             if ( IsKindOf( CLASSINFO( wxButton 
) ) ) 
 367                 m_width 
= m_label
.Length() * 8 + 12 ; 
 371             else if ( IsKindOf( CLASSINFO( wxStaticText 
) ) ) 
 373                 m_width 
= m_label
.Length() * 8 ; 
 376                 m_width 
= bestsize
.right 
- bestsize
.left 
; 
 378             m_width 
+= 2 * m_macHorizontalBorder 
; 
 380         if ( m_height 
== -1 ) 
 382             m_height 
= bestsize
.bottom 
- bestsize
.top 
; 
 386             m_height 
+= 2 * m_macVerticalBorder
; 
 389         wxMacDrawingHelper 
helper ( wxFindWinFromMacWindow( MacGetRootWindow() ) ) ; 
 392             UMASizeControl( m_macControl 
, m_width 
- 2 * m_macHorizontalBorder
, m_height 
-  2 * m_macVerticalBorder 
) ; 
 396 ControlHandle 
wxControl::MacGetContainerForEmbedding()  
 399         return m_macControl 
; 
 401     return wxWindow::MacGetContainerForEmbedding() ; 
 404 void wxControl::MacSuperChangedPosition()  
 409         GetControlBounds( m_macControl 
, &contrlRect 
) ;  
 410         int former_mac_x 
= contrlRect
.left 
; 
 411         int former_mac_y 
= contrlRect
.top 
; 
 414         GetParent()->MacWindowToRootWindow( & mac_x 
, & mac_y 
) ; 
 416         WindowRef rootwindow 
= MacGetRootWindow() ; 
 417         wxWindow
* wxrootwindow 
= wxFindWinFromMacWindow( rootwindow 
) ; 
 419         wxMacDrawingHelper 
focus( wxrootwindow 
) ; 
 421         if ( mac_x 
+ m_macHorizontalBorder 
!= former_mac_x 
||  
 422             mac_y 
+ m_macVerticalBorder 
!= former_mac_y 
) 
 425                 Rect inval 
= { former_mac_y 
, former_mac_x 
, former_mac_y 
+ m_height 
, former_mac_x 
+ m_width 
} ; 
 426                 InvalWindowRect( rootwindow 
, &inval 
) ; 
 428             UMAMoveControl( m_macControl 
, mac_x 
+ m_macHorizontalBorder 
, mac_y 
+ m_macVerticalBorder 
) ; 
 430                 Rect inval 
= { mac_y 
, mac_x 
, mac_y 
+ m_height 
, mac_x 
+ m_width 
} ; 
 431                 InvalWindowRect( rootwindow 
, &inval 
) ; 
 436     wxWindow::MacSuperChangedPosition() ; 
 439 void wxControl::MacSuperEnabled( bool enabled 
)  
 441     wxWindow::MacSuperEnabled( enabled 
) ; 
 445         if ( UMAHasAppearance() ) 
 449                 ::DeactivateControl( m_macControl ) ;  
 454                     ::ActivateControl( m_macControl ) ; 
 461                 ::HiliteControl( m_macControl , 255 ) ; 
 466                     ::HiliteControl( m_macControl , 0 ) ; 
 470     wxWindow::MacSuperEnabled( enabled ) ; 
 474 void  wxControl::MacSuperShown( bool show 
)  
 480             if ( m_macControlIsShown 
) 
 482                 ::UMAHideControl( m_macControl 
) ; 
 483                 m_macControlIsShown 
= false ; 
 488             if ( MacIsReallyShown() && !m_macControlIsShown 
) 
 490                 ::UMAShowControl( m_macControl 
) ; 
 491                 m_macControlIsShown 
= true ; 
 496     wxWindow::MacSuperShown( show 
) ; 
 499 void  wxControl::DoSetSize(int x
, int y
, 
 500             int width
, int height
, 
 503     if ( m_macControl 
== NULL 
) 
 505         wxWindow::DoSetSize( x 
, y 
,width 
, height 
,sizeFlags 
) ; 
 509      Rect oldbounds
, newbounds
; 
 510      int new_x
, new_y
, new_width
, new_height
; 
 516      new_height 
= m_height
; 
 518      if (sizeFlags 
& wxSIZE_ALLOW_MINUS_ONE
) 
 527          if (x 
!= -1)      new_x      
= x
; 
 528          if (y 
!= -1)      new_y      
= y
; 
 529          if (width 
!= -1)  new_width  
= width
; 
 530          if (height 
!= -1) new_height 
= height
; 
 533      if(sizeFlags 
& wxSIZE_AUTO
) 
 535          wxSize size 
= GetBestSize(); 
 536          if (sizeFlags 
& wxSIZE_AUTO_WIDTH
) 
 538              if (width 
== -1)   new_width 
= size
.x
; 
 540          if (sizeFlags 
& wxSIZE_AUTO_HEIGHT
) 
 542              if (height 
== -1)   new_height 
= size
.y
; 
 545      AdjustForParentClientOrigin(new_x
, new_y
, sizeFlags
); 
 550          GetParent()->MacWindowToRootWindow(&mac_x
, &mac_y
); 
 552      GetControlBounds(m_macControl
, &oldbounds
); 
 553      oldbounds
.right 
= oldbounds
.left 
+ m_width
; 
 554      oldbounds
.bottom 
= oldbounds
.top 
+ m_height
; 
 557      bool doResize 
= false; 
 559      if ( mac_x 
!= (oldbounds
.left 
- m_macHorizontalBorder
) || 
 560           mac_y 
!= (oldbounds
.top 
- m_macVerticalBorder
) ) 
 564      if ( new_width 
!= oldbounds
.right 
- oldbounds
.left 
- 2 * m_macHorizontalBorder 
|| 
 565           new_height 
!= oldbounds
.bottom 
- oldbounds
.top 
- 2 * m_macVerticalBorder
) 
 570      if ( doMove 
|| doResize 
) 
 574          // Ensure resize is within constraints 
 575          if ((m_minWidth 
!= -1) && (new_width 
< m_minWidth
)) { 
 576              new_width 
= m_minWidth
; 
 578          if ((m_minHeight 
!= -1) && (new_height 
< m_minHeight
)) { 
 579              new_height 
= m_minHeight
; 
 581          if ((m_maxWidth 
!= -1) && (new_width 
> m_maxWidth
)) { 
 582              new_width 
= m_maxWidth
; 
 584          if ((m_maxHeight 
!= -1) && (new_height 
> m_maxHeight
)) { 
 585              new_height 
= m_maxHeight
; 
 593              UMAMoveControl(m_macControl
, 
 594                             mac_x 
+ m_macHorizontalBorder
, mac_y 
+ m_macVerticalBorder
); 
 596              wxMoveEvent 
event(wxPoint(m_x
, m_y
), m_windowId
); 
 597              event
.SetEventObject(this); 
 598              GetEventHandler()->ProcessEvent(event
) ; 
 603              m_height 
= new_height
; 
 605              UMASizeControl( m_macControl
, 
 606                              m_width 
- 2 * m_macHorizontalBorder
, 
 607                              m_height 
-  2 * m_macVerticalBorder 
) ; 
 610              wxSizeEvent 
event(wxSize(m_width
, m_height
), m_windowId
); 
 611              event
.SetEventObject(this); 
 612              GetEventHandler()->ProcessEvent(event
); 
 619 bool  wxControl::Show(bool show
)  
 621     if ( !wxWindow::Show( show 
) ) 
 628             if ( m_macControlIsShown 
) 
 630                 ::UMAHideControl( m_macControl 
) ; 
 631                 m_macControlIsShown 
= false ; 
 636             if ( MacIsReallyShown() && !m_macControlIsShown 
) 
 638                 ::UMAShowControl( m_macControl 
) ; 
 639                 m_macControlIsShown 
= true ; 
 646 bool  wxControl::Enable(bool enable
)  
 648     if ( !wxWindow::Enable(enable
) ) 
 654             UMAActivateControl( m_macControl 
) ; 
 656             UMADeactivateControl( m_macControl 
) ; 
 661 void wxControl::Refresh(bool eraseBack
, const wxRect 
*rect
) 
 663     wxWindow::Refresh( eraseBack 
, rect 
) ; 
 666 void wxControl::MacRedrawControl() 
 670         WindowRef window 
= MacGetRootWindow() ; 
 673             wxWindow
* win 
= wxFindWinFromMacWindow( window 
) ; 
 676                 wxMacDrawingHelper 
help( win 
) ; 
 677                 // the mac control manager always assumes to have the origin at 0,0 
 680                 wxWindow
* parent 
= GetParent() ; 
 683                     if( parent
->IsTopLevel() ) 
 685                     //    ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; 
 689                     if( parent
->IsKindOf( CLASSINFO( wxNotebook 
) ) ||  parent
->IsKindOf( CLASSINFO( wxTabCtrl 
) )) 
 691                         if ( ((wxControl
*)parent
)->m_macControl 
) 
 692                             SetUpControlBackground( ((wxControl
*)parent
)->m_macControl 
, -1 , true ) ; 
 696                     parent 
= parent
->GetParent() ; 
 699                 UMADrawControl( m_macControl 
) ; 
 700                 // ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; 
 706 void wxControl::OnPaint(wxPaintEvent
& event
) 
 710         WindowRef window 
= MacGetRootWindow() ; 
 713             wxWindow
* win 
= wxFindWinFromMacWindow( window 
) ; 
 716                 wxMacDrawingHelper 
help( win 
) ; 
 717                 // the mac control manager always assumes to have the origin at 0,0 
 721                 wxWindow* parent = GetParent() ; 
 724                     if( parent->IsTopLevel() ) 
 726                     //    ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ; 
 730                     if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) ||  parent->IsKindOf( CLASSINFO( wxTabCtrl ) )) 
 732                         if ( ((wxControl*)parent)->m_macControl ) 
 733                             SetUpControlBackground( ((wxControl*)parent)->m_macControl , -1 , true ) ; 
 737                     parent = parent->GetParent() ; 
 740                 SetUpControlBackground( m_macControl 
, -1 , true ) ; 
 741                 UMADrawControl( m_macControl 
) ; 
 742                 // ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ; 
 748         // wxWindow::OnPaint( event ) ; 
 751 void wxControl::OnEraseBackground(wxEraseEvent
& event
) 
 753     wxWindow::OnEraseBackground( event 
) ;  
 757 void  wxControl::OnKeyDown( wxKeyEvent 
&event 
)  
 759     if ( m_macControl 
== NULL 
) 
 762     EventRecord 
*ev 
= wxTheApp
->MacGetCurrentEvent() ; 
 765     keychar 
= short(ev
->message 
& charCodeMask
); 
 766     keycode 
= short(ev
->message 
& keyCodeMask
) >> 8 ; 
 768     ::HandleControlKey( m_macControl 
, keycode 
, keychar 
, ev
->modifiers 
) ; 
 771 void  wxControl::OnMouseEvent( wxMouseEvent 
&event 
)  
 773     if ( m_macControl 
== NULL 
) 
 779     if (event
.GetEventType() == wxEVT_LEFT_DOWN 
|| event
.GetEventType() == wxEVT_LEFT_DCLICK 
) 
 785         MacClientToRootWindow( &x 
, &y 
) ; 
 787         ControlHandle   control 
; 
 790         WindowRef   window 
= MacGetRootWindow() ; 
 797         if ( !event
.m_leftDown 
&& !event
.m_rightDown 
) 
 798             modifiers  
|= btnState 
; 
 800         if ( event
.m_shiftDown 
) 
 801             modifiers 
|= shiftKey 
; 
 803         if ( event
.m_controlDown 
) 
 804             modifiers 
|= controlKey 
; 
 806         if ( event
.m_altDown 
) 
 807             modifiers 
|= optionKey 
; 
 809         if ( event
.m_metaDown 
) 
 810             modifiers 
|= cmdKey 
; 
 813         control = FindControlUnderMouse( localwhere , window , &controlpart ) ; 
 815         controlpart = FindControl( localwhere , window , &control ) ; 
 820             if ( AcceptsFocus() && FindFocus() != this ) 
 825             control 
= m_macControl 
; 
 826             if ( control 
&& ::IsControlActive( control 
) ) 
 829                     controlpart 
= ::HandleControlClick( control 
, localwhere 
, modifiers 
, (ControlActionUPP
) -1 ) ; 
 830                     wxTheApp
->s_lastMouseDown 
= 0 ; 
 831                     if ( control 
&& controlpart 
!= kControlNoPart 
&&  
 832                         ! IsKindOf( CLASSINFO( wxScrollBar 
) )  
 833                     ) // otherwise we will get the event twice for scrollbar 
 835                         MacHandleControlClick( control 
, controlpart 
) ; 
 843 bool wxControl::MacCanFocus() const 
 845         { if ( m_macControl 
== NULL 
)  
 852 void wxControl::MacHandleControlClick( ControlHandle control 
, SInt16 controlpart 
)  
 854     wxASSERT_MSG( m_macControl 
!= NULL 
, "No valid mac control" ) ;