⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toolbar.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            GetControl()->Move( position );        }    }    else    {        // separator#ifdef __WXMAC_OSX__        Rect contrlRect;        GetControlBounds( m_controlHandle, &contrlRect );        int former_mac_x = contrlRect.left;        int former_mac_y = contrlRect.top;        if ( mac_x != former_mac_x || mac_y != former_mac_y )            UMAMoveControl( m_controlHandle, mac_x, mac_y );#endif    }}void wxToolBarTool::UpdateToggleImage( bool toggle ){#ifdef __WXMAC_OSX__    if ( toggle )    {        int w = m_bmpNormal.GetWidth();        int h = m_bmpNormal.GetHeight();        wxBitmap bmp( w, h );        wxMemoryDC dc;        dc.SelectObject( bmp );        dc.SetPen( wxPen(*wxBLACK) );        dc.SetBrush( wxBrush( *wxLIGHT_GREY ));        dc.DrawRectangle( 0, 0, w, h );        dc.DrawBitmap( m_bmpNormal, 0, 0, true );        dc.SelectObject( wxNullBitmap );        ControlButtonContentInfo info;        wxMacCreateBitmapButton( &info, bmp );        SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info );#if wxMAC_USE_NATIVE_TOOLBAR        if (m_toolbarItemRef != NULL)        {            HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef );        }#endif        wxMacReleaseBitmapButton( &info );    }    else    {        ControlButtonContentInfo info;        wxMacCreateBitmapButton( &info, m_bmpNormal );        SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info );#if wxMAC_USE_NATIVE_TOOLBAR        if (m_toolbarItemRef != NULL)        {            HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef );        }#endif        wxMacReleaseBitmapButton( &info );    }    IconTransformType transform = toggle ? kTransformSelected : kTransformNone;    SetControlData(        m_controlHandle, 0, kControlIconTransformTag,        sizeof(transform), (Ptr)&transform );    HIViewSetNeedsDisplay( m_controlHandle, true );#else    ::SetControl32BitValue( m_controlHandle, toggle );#endif}wxToolBarTool::wxToolBarTool(    wxToolBar *tbar,    int id,    const wxString& label,    const wxBitmap& bmpNormal,    const wxBitmap& bmpDisabled,    wxItemKind kind,    wxObject *clientData,    const wxString& shortHelp,    const wxString& longHelp )    :    wxToolBarToolBase(        tbar, id, label, bmpNormal, bmpDisabled, kind,        clientData, shortHelp, longHelp ){    Init();}#pragma mark -#pragma mark Toolbar ImplementationwxToolBarToolBase *wxToolBar::CreateTool(    int id,    const wxString& label,    const wxBitmap& bmpNormal,    const wxBitmap& bmpDisabled,    wxItemKind kind,    wxObject *clientData,    const wxString& shortHelp,    const wxString& longHelp ){    return new wxToolBarTool(        this, id, label, bmpNormal, bmpDisabled, kind,        clientData, shortHelp, longHelp );}wxToolBarToolBase * wxToolBar::CreateTool( wxControl *control ){    return new wxToolBarTool( this, control );}void wxToolBar::Init(){    m_maxWidth = -1;    m_maxHeight = -1;    m_defaultWidth = kwxMacToolBarToolDefaultWidth;    m_defaultHeight = kwxMacToolBarToolDefaultHeight;#if wxMAC_USE_NATIVE_TOOLBAR    m_macHIToolbarRef = NULL;    m_macUsesNativeToolbar = false;#endif}#define kControlToolbarItemClassID      CFSTR( "org.wxwidgets.controltoolbaritem" )const EventTypeSpec kEvents[] = {    { kEventClassHIObject, kEventHIObjectConstruct },    { kEventClassHIObject, kEventHIObjectInitialize },    { kEventClassHIObject, kEventHIObjectDestruct },        { kEventClassToolbarItem, kEventToolbarItemCreateCustomView }};const EventTypeSpec kViewEvents[] = {     { kEventClassControl, kEventControlGetSizeConstraints } };struct ControlToolbarItem {     HIToolbarItemRef    toolbarItem;     HIViewRef           viewRef;    wxSize              lastValidSize ;}; static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ){    OSStatus            result = eventNotHandledErr;    ControlToolbarItem* object = (ControlToolbarItem*)inUserData;    switch ( GetEventClass( inEvent ) )    {        case kEventClassHIObject:            switch ( GetEventKind( inEvent ) )            {                case kEventHIObjectConstruct:                    {                        HIObjectRef         toolbarItem;                        ControlToolbarItem* item;                                                GetEventParameter( inEvent, kEventParamHIObjectInstance, typeHIObjectRef, NULL,                            sizeof( HIObjectRef ), NULL, &toolbarItem );                                                item = (ControlToolbarItem*) malloc(sizeof(ControlToolbarItem)) ;                        item->toolbarItem = toolbarItem ;                        item->viewRef = NULL ;                                                SetEventParameter( inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof( void * ), &item );                                                result = noErr ;                    }                    break;                 case kEventHIObjectInitialize:                    result = CallNextEventHandler( inCallRef, inEvent );                    if ( result == noErr )                    {                        CFDataRef           data;                        GetEventParameter( inEvent, kEventParamToolbarItemConfigData, typeCFTypeRef, NULL,                            sizeof( CFTypeRef ), NULL, &data );                                            HIViewRef viewRef ;                                                wxASSERT_MSG( CFDataGetLength( data ) == sizeof( viewRef ) , wxT("Illegal Data passed") ) ;                        memcpy( &viewRef , CFDataGetBytePtr( data ) , sizeof( viewRef ) ) ;                                            object->viewRef = (HIViewRef) viewRef ;                        result = noErr ;                    }                    break;                case kEventHIObjectDestruct:                    {                        // we've increased the ref count when creating this, so we decrease manually again in case                        // it was never really installed and deinstalled                        HIViewRef viewRef = object->viewRef ;                        if( viewRef && IsValidControlHandle( viewRef)  )                        {                            CFIndex count =  CFGetRetainCount( viewRef ) ;                             if ( count >= 1 )                                CFRelease( viewRef ) ;                        }	                    free( object ) ;    	                result = noErr;                    }                    break;            }            break;                case kEventClassToolbarItem:            switch ( GetEventKind( inEvent ) )            {                               case kEventToolbarItemCreateCustomView:                {                    HIViewRef viewRef = object->viewRef ;                    HIViewRemoveFromSuperview( viewRef ) ;                    HIViewSetVisible(viewRef, true) ;                    InstallEventHandler( GetControlEventTarget( viewRef ), ControlToolbarItemHandler,                                            GetEventTypeCount( kViewEvents ), kViewEvents, object, NULL );                                        result = SetEventParameter( inEvent, kEventParamControlRef, typeControlRef, sizeof( HIViewRef ), &viewRef );                }                break;            }            break;                case kEventClassControl:            switch ( GetEventKind( inEvent ) )            {                case kEventControlGetSizeConstraints:                {                    wxWindow* wxwindow = wxFindControlFromMacControl(object->viewRef ) ;                    if ( wxwindow )                    {                        wxSize sz = wxwindow->GetSize() ;                        sz.x -= wxwindow->MacGetLeftBorderSize() + wxwindow->MacGetRightBorderSize();                        sz.y -= wxwindow->MacGetTopBorderSize() + wxwindow->MacGetBottomBorderSize();                        // during toolbar layout the native window sometimes gets negative sizes                        // so we always keep the last valid size here, to make sure we survive the                        // shuffle ...                        if ( sz.x > 0 && sz.y > 0 )                            object->lastValidSize = sz ;                        else                            sz = object->lastValidSize ;                                                    HISize min, max;                        min.width = max.width = sz.x ;                        min.height = max.height = sz.y ;                                                result = SetEventParameter( inEvent, kEventParamMinimumSize, typeHISize,                                                        sizeof( HISize ), &min );                                                result = SetEventParameter( inEvent, kEventParamMaximumSize, typeHISize,                                                        sizeof( HISize ), &max );                        result = noErr ;                    }                }                break;            }            break;    }        return result;}void RegisterControlToolbarItemClass(){    static bool sRegistered;        if ( !sRegistered )    {        HIObjectRegisterSubclass( kControlToolbarItemClassID, kHIToolbarItemClassID, 0,                ControlToolbarItemHandler, GetEventTypeCount( kEvents ), kEvents, 0, NULL );                sRegistered = true;    }}HIToolbarItemRef CreateControlToolbarItem(CFStringRef inIdentifier, CFTypeRef inConfigData){    RegisterControlToolbarItemClass();        OSStatus            err;    EventRef            event;    UInt32              options = kHIToolbarItemAllowDuplicates;    HIToolbarItemRef    result = NULL;        err = CreateEvent( NULL, kEventClassHIObject, kEventHIObjectInitialize, GetCurrentEventTime(), 0, &event );    require_noerr( err, CantCreateEvent );        SetEventParameter( event, kEventParamAttributes, typeUInt32, sizeof( UInt32 ), &options );    SetEventParameter( event, kEventParamToolbarItemIdentifier, typeCFStringRef, sizeof( CFStringRef ), &inIdentifier );        if ( inConfigData )        SetEventParameter( event, kEventParamToolbarItemConfigData, typeCFTypeRef, sizeof( CFTypeRef ), &inConfigData );        err = HIObjectCreate( kControlToolbarItemClassID, event, (HIObjectRef*)&result );    check_noerr( err );        ReleaseEvent( event );CantCreateEvent :       return result ;}#if wxMAC_USE_NATIVE_TOOLBARstatic const EventTypeSpec kToolbarEvents[] ={    { kEventClassToolbar, kEventToolbarGetDefaultIdentifiers },    { kEventClassToolbar, kEventToolbarGetAllowedIdentifiers },    { kEventClassToolbar, kEventToolbarCreateItemWithIdentifier },};static OSStatus ToolbarDelegateHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ){    OSStatus result = eventNotHandledErr;    // Not yet needed    // wxToolBar* toolbar = (wxToolBar*) inUserData ;    CFMutableArrayRef   array;    switch ( GetEventKind( inEvent ) )    {        case kEventToolbarGetDefaultIdentifiers:            {                GetEventParameter( inEvent, kEventParamMutableArray, typeCFMutableArrayRef, NULL,                    sizeof( CFMutableArrayRef ), NULL, &array );                // not implemented yet                // GetToolbarDefaultItems( array );                result = noErr;            }            break;                    case kEventToolbarGetAllowedIdentifiers:            {                GetEventParameter( inEvent, kEventParamMutableArray, typeCFMutableArrayRef, NULL,                    sizeof( CFMutableArrayRef ), NULL, &array );                // not implemented yet                // GetToolbarAllowedItems( array );                result = noErr;            }            break;        case kEventToolbarCreateItemWithIdentifier:            {                HIToolbarItemRef        item = NULL;                CFTypeRef               data = NULL;                CFStringRef             identifier = NULL ;                                GetEventParameter( inEvent, kEventParamToolbarItemIdentifier, typeCFStringRef, NULL,                        sizeof( CFStringRef ), NULL, &identifier );                                GetEventParameter( inEvent, kEventParamToolbarItemConfigData, typeCFTypeRef, NULL,                        sizeof( CFTypeRef ), NULL, &data );                                    if ( CFStringCompare( kControlToolbarItemClassID, identifier, kCFCompareBackwards ) == kCFCompareEqualTo )                {                    item = CreateControlToolbarItem( kControlToolbarItemClassID, data );                    if ( item )                    {                        SetEventParameter( inEvent, kEventParamToolbarItem, typeHIToolbarItemRef,                            sizeof( HIToolbarItemRef ), &item );                        result = noErr;                    }                }                            }            break;    }    return result ;}#endif // wxMAC_USE_NATIVE_TOOLBAR// also for the toolbar we have the dual implementation:// only when MacInstallNativeToolbar is called is the native toolbar set as the window toolbarbool wxToolBar::Create(    wxWindow *parent,    wxWindowID id,    const wxPoint& pos,    const wxSize& size,    long style,    const wxString& name ){    if ( !wxToolBarBase::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )        return false;    FixupStyle();    OSStatus err = noErr;#if wxMAC_USE_NATIVE_TOOLBAR    wxString labelStr = wxString::Format( wxT("%xd"), (int)this );    err = HIToolbarCreate(        wxMacCFStringHolder( labelStr, wxFont::GetDefaultEncoding() ), 0,        (HIToolbarRef*) &m_macHIToolbarRef );    if (m_macHIToolbarRef != NULL)    {        InstallEventHandler( HIObjectGetEventTarget((HIToolbarRef)m_macHIToolbarRef ), ToolbarDelegateHandler,                GetEventTypeCount( kToolbarEvents ), kToolbarEvents, this, NULL );        HIToolbarDisplayMode mode = kHIToolbarDisplayModeDefault;        HIToolbarDisplaySize displaySize = kHIToolbarDisplaySizeSmall;        if ( style & wxTB_NOICONS )            mode = kHIToolbarDisplayModeLabelOnly;        else if ( style & wxTB_TEXT )            mode = kHIToolbarDisplayModeIconAndLabel;        else            mode = kHIToolbarDisplayModeIconOnly;        HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode );        HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize );    }#endif    return (err == noErr);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -