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

📄 notebmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    MacSetupTabs();    m_nSelection = -1 ;    InvalidateBestSize();    return true;}// same as AddPage() but does it at given positionbool wxNotebook::InsertPage(size_t nPage,                            wxNotebookPage *pPage,                            const wxString& strText,                            bool bSelect,                            int imageId){    if ( !wxNotebookBase::InsertPage(nPage, pPage, strText, bSelect, imageId) )        return false;    wxASSERT_MSG( pPage->GetParent() == this,                    _T("notebook pages must have notebook as parent") );    // don't show pages by default (we'll need to adjust their size first)    pPage->Show( false ) ;    pPage->SetLabel(strText);    m_images.Insert(imageId, nPage);    MacSetupTabs();    wxRect rect = GetPageRect() ;    pPage->SetSize(rect);    if ( pPage->GetAutoLayout() ) {        pPage->Layout();    }    // now deal with the selection    // ---------------------------    // if the inserted page is before the selected one, we must update the    // index of the selected page    if ( int(nPage) <= m_nSelection )    {        m_nSelection++;        // while this still is the same page showing, we need to update the tabs        SetControl32BitValue( (ControlHandle) m_macControl , m_nSelection + 1 ) ;    }    // some page should be selected: either this one or the first one if there    // is still no selection    int selNew = -1;    if ( bSelect )        selNew = nPage;    else if ( m_nSelection == -1 )        selNew = 0;    if ( selNew != -1 )        SetSelection(selNew);    InvalidateBestSize();    return true;}/* Added by Mark Newsam* When a page is added or deleted to the notebook this function updates* information held in the m_macControl so that it matches the order* the user would expect.*/void wxNotebook::MacSetupTabs(){    SetControl32BitMaximum( (ControlHandle) m_macControl , GetPageCount() ) ;    wxNotebookPage *page;    ControlTabInfoRec info;    const size_t countPages = GetPageCount();    for(size_t ii = 0; ii < countPages; ii++)    {        page = m_pages[ii];        info.version = 0;        info.iconSuiteID = 0;        wxMacStringToPascal( page->GetLabel() , info.name ) ;        SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,            sizeof( ControlTabInfoRec) , (char*) &info ) ;        SetTabEnabled( (ControlHandle) m_macControl , ii+1 , true ) ;#if TARGET_CARBON        if ( GetImageList() && GetPageImage(ii) >= 0 && UMAGetSystemVersion() >= 0x1020 )        {            // tab controls only support very specific types of images, therefore we are doing an odyssee            // accross the icon worlds (even Apple DTS did not find a shorter path)            // in order not to pollute the icon registry we put every icon into (OSType) 1 and immediately            // afterwards Unregister it (IconRef is ref counted, so it will stay on the tab even if we            // unregister it) in case this will ever lead to having the same icon everywhere add some kind            // of static counter            const wxBitmap* bmap = GetImageList()->GetBitmapPtr( GetPageImage(ii ) ) ;            if ( bmap )            {                wxBitmap scaledBitmap ;                if ( bmap->GetWidth() != 16 || bmap->GetHeight() != 16 )                {                    scaledBitmap = wxBitmap( bmap->ConvertToImage().Scale(16,16) ) ;                    bmap = &scaledBitmap ;                }                ControlButtonContentInfo info ;                wxMacCreateBitmapButton( &info , *bmap , kControlContentPictHandle) ;                IconFamilyHandle iconFamily = (IconFamilyHandle) NewHandle(0) ;                OSErr err = SetIconFamilyData( iconFamily, 'PICT' , (Handle) info.u.picture ) ;                wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ;                IconRef iconRef ;                err = RegisterIconRefFromIconFamily( 'WXNG' , (OSType) 1, iconFamily, &iconRef ) ;                wxASSERT_MSG( err == noErr , wxT("Error when adding bitmap") ) ;                info.contentType = kControlContentIconRef ;                info.u.iconRef = iconRef ;                SetControlData( (ControlHandle) m_macControl, ii+1,kControlTabImageContentTag,                    sizeof( info ), (Ptr)&info );                wxASSERT_MSG( err == noErr , wxT("Error when setting icon on tab") ) ;                if ( UMAGetSystemVersion() < 0x1030 )                {                    UnregisterIconRef( 'WXNG' , (OSType) 1 ) ;                }                ReleaseIconRef( iconRef ) ;                DisposeHandle( (Handle) iconFamily ) ;            }        }#endif    }    Rect bounds;    GetControlBounds((ControlHandle)m_macControl, &bounds);    InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);}wxRect wxNotebook::GetPageRect() const{    // fit the notebook page to the tab control's display area    int w, h;    GetSize(&w, &h);    return wxRect(        wxMacTabLeftMargin(GetWindowStyle()) + m_macHorizontalBorder,        wxMacTabTopMargin(GetWindowStyle()) + m_macVerticalBorder,        w - wxMacTabLeftMargin(GetWindowStyle()) - wxMacTabRightMargin(GetWindowStyle()) - 2*m_macHorizontalBorder,        h - wxMacTabTopMargin(GetWindowStyle()) - wxMacTabBottomMargin(GetWindowStyle()) - 2*m_macVerticalBorder);}// ----------------------------------------------------------------------------// wxNotebook callbacks// ----------------------------------------------------------------------------// @@@ OnSize() is used for setting the font when it's called for the first//     time because doing it in ::Create() doesn't work (for unknown reasons)void wxNotebook::OnSize(wxSizeEvent& event){    unsigned int nCount = m_pages.Count();    wxRect rect = GetPageRect() ;    for ( unsigned int nPage = 0; nPage < nCount; nPage++ ) {        wxNotebookPage *pPage = m_pages[nPage];        pPage->SetSize(rect);        if ( pPage->GetAutoLayout() ) {            pPage->Layout();        }    }    // Processing continues to next OnSize    event.Skip();}void wxNotebook::OnSelChange(wxNotebookEvent& event){    // is it our tab control?    if ( event.GetEventObject() == this )        ChangePage(event.GetOldSelection(), event.GetSelection());    // we want to give others a chance to process this message as well    event.Skip();}void wxNotebook::OnSetFocus(wxFocusEvent& event){    // set focus to the currently selected page if any    if ( m_nSelection != -1 )        m_pages[m_nSelection]->SetFocus();    event.Skip();}void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event){    if ( event.IsWindowChange() ) {        // change pages        AdvanceSelection(event.GetDirection());    }    else {        // we get this event in 2 cases        //        // a) one of our pages might have generated it because the user TABbed        // out from it in which case we should propagate the event upwards and        // our parent will take care of setting the focus to prev/next sibling        //        // or        //        // b) the parent panel wants to give the focus to us so that we        // forward it to our selected page. We can't deal with this in        // OnSetFocus() because we don't know which direction the focus came        // from in this case and so can't choose between setting the focus to        // first or last panel child        wxWindow *parent = GetParent();        // the cast is here to fic a GCC ICE        if ( ((wxWindow*)event.GetEventObject()) == parent )        {            // no, it doesn't come from child, case (b): forward to a page            if ( m_nSelection != -1 )            {                // so that the page knows that the event comes from it's parent                // and is being propagated downwards                event.SetEventObject(this);                wxWindow *page = m_pages[m_nSelection];                if ( !page->GetEventHandler()->ProcessEvent(event) )                {                    page->SetFocus();                }                //else: page manages focus inside it itself            }            else            {                // we have no pages - still have to give focus to _something_                SetFocus();            }        }        else        {            // it comes from our child, case (a), pass to the parent            if ( parent ) {                event.SetCurrentFocus(this);                parent->GetEventHandler()->ProcessEvent(event);            }        }    }}// ----------------------------------------------------------------------------// wxNotebook base class virtuals// ----------------------------------------------------------------------------#if wxUSE_CONSTRAINTS// override these 2 functions to do nothing: everything is done in OnSizevoid wxNotebook::SetConstraintSizes(bool WXUNUSED(recurse)){    // don't set the sizes of the pages - their correct size is not yet known    wxControl::SetConstraintSizes(false);}bool wxNotebook::DoPhase(int WXUNUSED(nPhase)){    return true;}#endif // wxUSE_CONSTRAINTSvoid wxNotebook::Command(wxCommandEvent& event){    wxFAIL_MSG(wxT("wxNotebook::Command not implemented"));}// ----------------------------------------------------------------------------// wxNotebook helper functions// ----------------------------------------------------------------------------// hide the currently active panel and show the new onevoid wxNotebook::ChangePage(int nOldSel, int nSel){    if ( nOldSel != -1 )    {        m_pages[nOldSel]->Show(false);    }    if ( nSel != -1 )    {        wxNotebookPage *pPage = m_pages[nSel];        pPage->Show(true);        pPage->SetFocus();    }    m_nSelection = nSel;    SetControl32BitValue( (ControlHandle) m_macControl , m_nSelection + 1 ) ;}void  wxNotebook::OnMouse( wxMouseEvent &event ){    if ( (ControlHandle) m_macControl == NULL )    {        event.Skip() ;        return ;    }    if (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK )    {        int x = event.m_x ;        int y = event.m_y ;        MacClientToRootWindow( &x , &y ) ;        ControlHandle   control ;        Point       localwhere ;        SInt16      controlpart ;        localwhere.h = x ;        localwhere.v = y ;        short modifiers = 0;        if ( !event.m_leftDown && !event.m_rightDown )            modifiers  |= btnState ;        if ( event.m_shiftDown )            modifiers |= shiftKey ;        if ( event.m_controlDown )            modifiers |= controlKey ;        if ( event.m_altDown )            modifiers |= optionKey ;        if ( event.m_metaDown )            modifiers |= cmdKey ;        control = (ControlHandle) m_macControl ;        if ( control && ::IsControlActive( control ) )        {            {                wxNotebookEvent changing(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId,                    ::GetControl32BitValue(control) - 1, m_nSelection);                changing.SetEventObject(this);                GetEventHandler()->ProcessEvent(changing);                if(changing.IsAllowed())                {                    controlpart = ::HandleControlClick(control, localwhere, modifiers,                        (ControlActionUPP) -1);                    wxTheApp->s_lastMouseDown = 0 ;                    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId,                        ::GetControl32BitValue(control) - 1, m_nSelection);                    event.SetEventObject(this);                    GetEventHandler()->ProcessEvent(event);                }            }        }    }}void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) ){#if 0    wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControl32BitValue((ControlHandle)m_macControl) - 1, m_nSelection);    event.SetEventObject(this);    ProcessEvent(event);#endif}

⌨️ 快捷键说明

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