📄 utils.cpp
字号:
void wxMacControl::SetValue( SInt32 v ){ ::SetControl32BitValue( m_controlRef , v );}void wxMacControl::SetMinimum( SInt32 v ){ ::SetControl32BitMinimum( m_controlRef , v );}void wxMacControl::SetMaximum( SInt32 v ){ ::SetControl32BitMaximum( m_controlRef , v );}void wxMacControl::SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum ){ ::SetControl32BitMinimum( m_controlRef , minimum ); ::SetControl32BitMaximum( m_controlRef , maximum ); ::SetControl32BitValue( m_controlRef , value );}OSStatus wxMacControl::SetFocus( ControlFocusPart focusPart ){ return SetKeyboardFocus( GetControlOwner( m_controlRef ), m_controlRef, focusPart );}bool wxMacControl::HasFocus() const{ ControlRef control; GetKeyboardFocus( GetUserFocusWindow() , &control ); return control == m_controlRef;}void wxMacControl::SetNeedsFocusRect( bool needs ){ m_needsFocusRect = needs;}bool wxMacControl::NeedsFocusRect() const{ return m_needsFocusRect;}void wxMacControl::VisibilityChanged(bool shown){}void wxMacControl::SuperChangedPosition(){}void wxMacControl::SetFont( const wxFont & font , const wxColour& foreground , long windowStyle ){ m_font = font; ControlFontStyleRec fontStyle; if ( font.MacGetThemeFontID() != kThemeCurrentPortFont ) { switch ( font.MacGetThemeFontID() ) { case kThemeSmallSystemFont : fontStyle.font = kControlFontSmallSystemFont; break; case 109 : // mini font fontStyle.font = -5; break; case kThemeSystemFont : fontStyle.font = kControlFontBigSystemFont; break; default : fontStyle.font = kControlFontBigSystemFont; break; } fontStyle.flags = kControlUseFontMask; } else { fontStyle.font = font.MacGetFontNum(); fontStyle.style = font.MacGetFontStyle(); fontStyle.size = font.MacGetFontSize(); fontStyle.flags = kControlUseFontMask | kControlUseFaceMask | kControlUseSizeMask; } fontStyle.just = teJustLeft; fontStyle.flags |= kControlUseJustMask; if ( ( windowStyle & wxALIGN_MASK ) & wxALIGN_CENTER_HORIZONTAL ) fontStyle.just = teJustCenter; else if ( ( windowStyle & wxALIGN_MASK ) & wxALIGN_RIGHT ) fontStyle.just = teJustRight; // we only should do this in case of a non-standard color, as otherwise 'disabled' controls // won't get grayed out by the system anymore if ( foreground != *wxBLACK ) { fontStyle.foreColor = MAC_WXCOLORREF( foreground.GetPixel() ); fontStyle.flags |= kControlUseForeColorMask; } ::SetControlFontStyle( m_controlRef , &fontStyle );}void wxMacControl::SetBackground( const wxBrush &WXUNUSED(brush) ){ // TODO // setting up a color proc is not recommended anymore}void wxMacControl::SetRange( SInt32 minimum , SInt32 maximum ){ ::SetControl32BitMinimum( m_controlRef , minimum ); ::SetControl32BitMaximum( m_controlRef , maximum );}short wxMacControl::HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers ){#ifndef __LP64__ return HandleControlKey( m_controlRef , keyCode , charCode , modifiers );#else return 0;#endif}void wxMacControl::SetActionProc( ControlActionUPP actionProc ){ SetControlAction( m_controlRef , actionProc );}void wxMacControl::SetViewSize( SInt32 viewSize ){ SetControlViewSize(m_controlRef , viewSize );}SInt32 wxMacControl::GetViewSize() const{ return GetControlViewSize( m_controlRef );}bool wxMacControl::IsVisible() const{ return IsControlVisible( m_controlRef );}void wxMacControl::SetVisibility( bool visible , bool redraw ){ SetControlVisibility( m_controlRef , visible , redraw );}bool wxMacControl::IsEnabled() const{#if TARGET_API_MAC_OSX return IsControlEnabled( m_controlRef );#else return IsControlActive( m_controlRef );#endif}bool wxMacControl::IsActive() const{ return IsControlActive( m_controlRef );}void wxMacControl::Enable( bool enable ){ if ( enable ) EnableControl( m_controlRef ); else DisableControl( m_controlRef );}void wxMacControl::SetDrawingEnabled( bool enable ){ HIViewSetDrawingEnabled( m_controlRef , enable );}bool wxMacControl::GetNeedsDisplay() const{ return HIViewGetNeedsDisplay( m_controlRef );}void wxMacControl::SetNeedsDisplay( RgnHandle where ){ if ( !IsVisible() ) return; HIViewSetNeedsDisplayInRegion( m_controlRef , where , true );}void wxMacControl::SetNeedsDisplay( Rect* where ){ if ( !IsVisible() ) return; if ( where != NULL ) { RgnHandle update = NewRgn(); RectRgn( update , where ); HIViewSetNeedsDisplayInRegion( m_controlRef , update , true ); DisposeRgn( update ); } else HIViewSetNeedsDisplay( m_controlRef , true );}void wxMacControl::Convert( wxPoint *pt , wxMacControl *from , wxMacControl *to ){ HIPoint hiPoint; hiPoint.x = pt->x; hiPoint.y = pt->y; HIViewConvertPoint( &hiPoint , from->m_controlRef , to->m_controlRef ); pt->x = (int)hiPoint.x; pt->y = (int)hiPoint.y;}void wxMacControl::SetRect( Rect *r ){ //A HIRect is actually a CGRect on OSX - which consists of two structures - //CGPoint and CGSize, which have two floats each HIRect hir = { { r->left , r->top }, { r->right - r->left , r->bottom - r->top } }; HIViewSetFrame ( m_controlRef , &hir ); // eventuall we might have to do a SetVisibility( false , true ); // before and a SetVisibility( true , true ); after}void wxMacControl::GetRect( Rect *r ){ GetControlBounds( m_controlRef , r );}void wxMacControl::GetRectInWindowCoords( Rect *r ){ UMAGetControlBoundsInWindowCoords( m_controlRef , r );}void wxMacControl::GetBestRect( Rect *r ){ short baselineoffset; GetBestControlRect( m_controlRef , r , &baselineoffset );}void wxMacControl::SetLabel( const wxString &title ){ wxFontEncoding encoding; if ( m_font.Ok() ) encoding = m_font.GetEncoding(); else encoding = wxFont::GetDefaultEncoding(); UMASetControlTitle( m_controlRef , title , encoding );}void wxMacControl::GetFeatures( UInt32 * features ){ GetControlFeatures( m_controlRef , features );}OSStatus wxMacControl::GetRegion( ControlPartCode partCode , RgnHandle region ){ OSStatus err = GetControlRegion( m_controlRef , partCode , region ); return err;}OSStatus wxMacControl::SetZOrder( bool above , wxMacControl* other ){#if TARGET_API_MAC_OSX return HIViewSetZOrder( m_controlRef,above ? kHIViewZOrderAbove : kHIViewZOrderBelow, (other != NULL) ? other->m_controlRef : NULL);#else return 0;#endif}#if TARGET_API_MAC_OSX// SetNeedsDisplay would not invalidate the childrenstatic void InvalidateControlAndChildren( HIViewRef control ){ HIViewSetNeedsDisplay( control , true ); UInt16 childrenCount = 0; OSStatus err = CountSubControls( control , &childrenCount ); if ( err == errControlIsNotEmbedder ) return; wxASSERT_MSG( err == noErr , wxT("Unexpected error when accessing subcontrols") ); for ( UInt16 i = childrenCount; i >=1; --i ) { HIViewRef child; err = GetIndexedSubControl( control , i , & child ); if ( err == errControlIsNotEmbedder ) return; InvalidateControlAndChildren( child ); }}#endifvoid wxMacControl::InvalidateWithChildren(){#if TARGET_API_MAC_OSX InvalidateControlAndChildren( m_controlRef );#endif}void wxMacControl::ScrollRect( wxRect *r , int dx , int dy ){ wxASSERT( r != NULL ); HIRect scrollarea = CGRectMake( r->x , r->y , r->width , r->height); HIViewScrollRect ( m_controlRef , &scrollarea , dx ,dy );}OSType wxMacCreator = 'WXMC';OSType wxMacControlProperty = 'MCCT';void wxMacControl::SetReferenceInNativeControl(){ void * data = this; verify_noerr( SetControlProperty ( m_controlRef , wxMacCreator,wxMacControlProperty, sizeof(data), &data ) );}wxMacControl* wxMacControl::GetReferenceFromNativeControl(ControlRef control){ wxMacControl* ctl = NULL; ByteCount actualSize; if ( GetControlProperty( control ,wxMacCreator,wxMacControlProperty, sizeof(ctl) , &actualSize , &ctl ) == noErr ) { return ctl; } return NULL;}// ============================================================================// DataBrowser Wrapper// ============================================================================//// basing on DataBrowserItemIDs//IMPLEMENT_ABSTRACT_CLASS( wxMacDataBrowserControl , wxMacControl )pascal void wxMacDataBrowserControl::DataBrowserItemNotificationProc( ControlRef browser, DataBrowserItemID itemID, DataBrowserItemNotification message, DataBrowserItemDataRef itemData ){ wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl); if ( ctl != 0 ) { ctl->ItemNotification(itemID, message, itemData); }}pascal OSStatus wxMacDataBrowserControl::DataBrowserGetSetItemDataProc( ControlRef browser, DataBrowserItemID itemID, DataBrowserPropertyID property, DataBrowserItemDataRef itemData, Boolean changeValue ){ OSStatus err = errDataBrowserPropertyNotSupported; wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl); if ( ctl != 0 ) { err = ctl->GetSetItemData(itemID, property, itemData, changeValue); } return err;}pascal Boolean wxMacDataBrowserControl::DataBrowserCompareProc( ControlRef browser, DataBrowserItemID itemOneID, DataBrowserItemID itemTwoID, DataBrowserPropertyID sortProperty){ wxMacDataBrowserControl* ctl = wxDynamicCast(wxMacControl::GetReferenceFromNativeControl( browser ), wxMacDataBrowserControl); if ( ctl != 0 ) { return ctl->CompareItems(itemOneID, itemTwoID, sortProperty); } return false;}DataBrowserItemDataUPP gDataBrowserItemDataUPP = NULL;DataBrowserItemNotificationUPP gDataBrowserItemNotificationUPP = NULL;DataBrowserItemCompareUPP gDataBrowserItemCompareUPP = NULL;wxMacDataBrowserControl::wxMacDataBrowserControl( wxWindow* peer, const wxPoint& pos, const wxSize& size, long style) : wxMacControl( peer ){ Rect bounds = wxMacGetBoundsForControl( peer, pos, size ); OSStatus err = ::CreateDataBrowserControl( MAC_WXHWND(peer->MacGetTopLevelWindowRef()), &bounds, kDataBrowserListView, &m_controlRef ); SetReferenceInNativeControl(); verify_noerr( err ); if ( gDataBrowserItemCompareUPP == NULL ) gDataBrowserItemCompareUPP = NewDataBrowserItemCompareUPP(DataBrowserCompareProc); if ( gDataBrowserItemDataUPP == NULL ) gDataBrowserItemDataUPP = NewDataBrowserItemDataUPP(DataBrowserGetSetItemDataProc); if ( gDataBrowserItemNotificationUPP == NULL ) { gDataBrowserItemNotificationUPP =#if TARGET_API_MAC_OSX (DataBrowserItemNotificationUPP) NewDataBrowserItemNotificationWithItemUPP(DataBrowserItemNotificationProc);#else NewDataBrowserItemNotificationUPP(DataBrowserItemNotificationProc);#endif } DataBrowserCallbacks callbacks; InitializeDataBrowserCallbacks( &callbacks, kDataBrowserLatestCallbacks ); callbacks.u.v1.itemDataCallback = gDataBrowserItemDataUPP; callbacks.u.v1.itemCompareCallback = gDataBrowserItemCompareUPP; callbacks.u.v1.itemNotificationCallback = gDataBrowserItemNotificationUPP; SetCallbacks( &callbacks );}OSStatus wxMacDataBrowserControl::GetItemCount( DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, ItemCount *numItems) const{ return GetDataBrowserItemCount( m_controlRef, container, recurse, state, numItems );}OSStatus wxMacDataBrowserControl::GetItems( DataBrowserItemID container, Boolean recurse, DataBrowserItemState state, Handle items) const{ return GetDataBrowserItems( m_controlRef, container, recurse, state, items );}OSStatus wxMacDataBrowserControl::SetSelectionFlags( DataBrowserSelectionFlags options ){ return SetDataBrowserSelectionFlags( m_controlRef, options );}OSStatus wxMacDataBrowserControl::AddColumn( DataBrowserListViewColumnDesc *columnDesc, DataBrowserTableViewColumnIndex position ){ return AddDataBrowserListViewColumn( m_controlRef, columnDesc, position );}OSStatus wxMacDataBrowserControl::GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id ){ return GetDataBrowserTableViewColumnProperty( m_controlRef, position, id );}OSStatus wxMacDataBrowserControl::RemoveColumn( DataBrowserTableViewColumnIndex position ){ DataBrowserTableViewColumnID id; GetColumnIDFromIndex( position, &id ); return RemoveDataBrowserTableViewColumn( m_controlRef, id );}OSStatus wxMacDataBrowserControl::AutoSizeColumns(){ return AutoSizeDataBrowserListViewColumns(m_controlRef);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -