- m_macControl = NULL ;
- m_macControlAction = NULL ;
- m_macHorizontalBorder = 0 ; // additional pixels around the real control
- m_macVerticalBorder = 0 ;
- m_backgroundColour = *wxWHITE;
- m_foregroundColour = *wxBLACK;
-#if WXWIN_COMPATIBILITY
- m_callback = 0;
-#endif // WXWIN_COMPATIBILITY
-
- if ( wxMacLiveScrollbarActionUPP == NULL )
- {
-#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
- wxMacLiveScrollbarActionUPP = NewControlActionUPP( wxMacLiveScrollbarActionProc );
-#else
- wxMacLiveScrollbarActionUPP = NewControlActionProc( wxMacLiveScrollbarActionProc ) ;
-#endif
- }
-}
-
-bool wxControl::Create(wxWindow *parent, wxWindowID id,
- const wxPoint& pos,
- const wxSize& size, long style,
- const wxValidator& validator,
- const wxString& name)
-{
- m_macControl = NULL ;
- m_macHorizontalBorder = 0 ; // additional pixels around the real control
- m_macVerticalBorder = 0 ;
-
- bool rval = wxWindow::Create(parent, id, pos, size, style, name);
- if ( parent )
- {
- m_backgroundColour = parent->GetBackgroundColour() ;
- m_foregroundColour = parent->GetForegroundColour() ;
- }
- if (rval) {
-#if wxUSE_VALIDATORS
- SetValidator(validator);
-#endif
- }
- return rval;
-}
-
-wxControl::~wxControl()
-{
- m_isBeingDeleted = TRUE;
- wxRemoveMacControlAssociation( this ) ;
- // If we delete an item, we should initialize the parent panel,
- // because it could now be invalid.
- wxWindow *parent = GetParent() ;
- if ( parent )
- {
- if (parent->GetDefaultItem() == (wxButton*) this)
- parent->SetDefaultItem(NULL);
- }
- if ( (ControlHandle) m_macControl )
- {
- ::DisposeControl( (ControlHandle) m_macControl ) ;
- m_macControl = NULL ;
- }
-}
-
-void wxControl::SetLabel(const wxString& title)
-{
- m_label = wxStripMenuCodes(title) ;
-
- if ( (ControlHandle) m_macControl )
- {
- Str255 maclabel ;
- wxString label ;
-
- if( wxApp::s_macDefaultEncodingIsPC )
- label = wxMacMakeMacStringFromPC( m_label ) ;
- else
- label = m_label ;
-
-#if TARGET_CARBON
- c2pstrcpy( (StringPtr) maclabel , label ) ;
-#else
- strcpy( (char *) maclabel , label ) ;
- c2pstr( (char *) maclabel ) ;
-#endif
- ::SetControlTitle( (ControlHandle) m_macControl , maclabel ) ;
- }
- Refresh() ;
-}
-
-wxSize wxControl::DoGetBestSize() const
-{
- Rect bestsize = { 0 , 0 , 0 , 0 } ;
- short baselineoffset ;
- int bestWidth, bestHeight ;
- ::GetBestControlRect( (ControlHandle) m_macControl , &bestsize , &baselineoffset ) ;
-
- if ( EmptyRect( &bestsize ) )
- {
- baselineoffset = 0;
- bestsize.left = bestsize.top = 0 ;
- bestsize.right = 16 ;
- bestsize.bottom = 16 ;
- if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
- {
- bestsize.bottom = 16 ;
- }
- else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
- {
- bestsize.bottom = 24 ;
- }
- }
-
- if ( IsKindOf( CLASSINFO( wxButton ) ) )
- {
- bestWidth = m_label.Length() * 8 + 12 ;
- if ( bestWidth < 70 )
- bestWidth = 70 ;
- }
- else if ( IsKindOf( CLASSINFO( wxStaticText ) ) )
- {
- bestWidth = m_label.Length() * 8 ;
- }
- else
- bestWidth = bestsize.right - bestsize.left ;
-
- bestWidth += 2 * m_macHorizontalBorder ;
-
- bestHeight = bestsize.bottom - bestsize.top ;
- if ( bestHeight < 10 )
- bestHeight = 13 ;
-
- bestHeight += 2 * m_macVerticalBorder;
-
-
- return wxSize(bestWidth, bestHeight);
-}
-
-bool wxControl::ProcessCommand (wxCommandEvent & event)
-{
- // Tries:
- // 1) A callback function (to become obsolete)
- // 2) OnCommand, starting at this window and working up parent hierarchy
- // 3) OnCommand then calls ProcessEvent to search the event tables.
-#if WXWIN_COMPATIBILITY
- if ( m_callback )
- {
- (void)(*m_callback)(this, event);
-
- return TRUE;
- }
- else
-#endif // WXWIN_COMPATIBILITY
- {
- return GetEventHandler()->ProcessEvent(event);
- }
-}
-
-// ------------------------
-wxList *wxWinMacControlList = NULL;
-wxControl *wxFindControlFromMacControl(ControlHandle inControl )
-{
- wxNode *node = wxWinMacControlList->Find((long)inControl);
- if (!node)
- return NULL;
- return (wxControl *)node->GetData();
-}
-
-void wxAssociateControlWithMacControl(ControlHandle inControl, wxControl *control)
-{
- // adding NULL WindowRef is (first) surely a result of an error and
- // (secondly) breaks menu command processing
- wxCHECK_RET( inControl != (ControlHandle) NULL, "attempt to add a NULL WindowRef to window list" );
-
- if ( !wxWinMacControlList->Find((long)inControl) )
- wxWinMacControlList->Append((long)inControl, control);
-}
-
-void wxRemoveMacControlAssociation(wxControl *control)
-{
- wxWinMacControlList->DeleteObject(control);
-}
-
-void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString label ,
- const wxPoint& pos,
- const wxSize& size, long style,
- const wxValidator& validator,
- const wxString& name , WXRECTPTR outBounds , unsigned char* maclabel )
-{
- m_label = label ;
- SetName(name);
- if ( &validator )
- SetValidator(validator);
-
- m_windowStyle = style;
- parent->AddChild(this);
-
- m_backgroundColour = parent->GetBackgroundColour() ;
- m_foregroundColour = parent->GetForegroundColour() ;
-
- if (id == -1)
- m_windowId = NewControlId();
- else
- m_windowId = id;
-
- // These sizes will be adjusted in MacPostControlCreate
-
- m_width = size.x ;
- m_height = size.y ;
- m_x = pos.x ;
- m_y = pos.y ;
-
- ((Rect*)outBounds)->top = -10;
- ((Rect*)outBounds)->left = -10;
- ((Rect*)outBounds)->bottom = 0;
- ((Rect*)outBounds)->right = 0;
-
- wxMacStringToPascal( wxStripMenuCodes(label) , maclabel ) ;