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

📄 notebmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/mac/carbon/notebmac.cpp// Purpose:     implementation of wxNotebook// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: notebmac.cpp,v 1.79 2006/10/14 16:42:02 SC Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence///////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#if wxUSE_NOTEBOOK#include "wx/notebook.h"#ifndef WX_PRECOMP    #include "wx/string.h"    #include "wx/log.h"    #include "wx/app.h"    #include "wx/image.h"#endif#include "wx/string.h"#include "wx/imaglist.h"#include "wx/mac/uma.h"// check that the page index is valid#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)BEGIN_EVENT_TABLE(wxNotebook, wxControl)    EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange)    EVT_SIZE(wxNotebook::OnSize)    EVT_SET_FOCUS(wxNotebook::OnSetFocus)    EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)END_EVENT_TABLE()IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl)IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxCommandEvent)// common part of all ctorsvoid wxNotebook::Init(){    m_nSelection = -1;}// default for dynamic classwxNotebook::wxNotebook(){    Init();}// the same arguments as for wxControlwxNotebook::wxNotebook( wxWindow *parent,    wxWindowID id,    const wxPoint& pos,    const wxSize& size,    long style,    const wxString& name ){    Init();    Create( parent, id, pos, size, style, name );}bool wxNotebook::Create( wxWindow *parent,    wxWindowID id,    const wxPoint& pos,    const wxSize& size,    long style,    const wxString& name ){    m_macIsUserPane = false ;    if (! (style & wxBK_ALIGN_MASK))        style |= wxBK_TOP;    if ( !wxNotebookBase::Create( parent, id, pos, size, style, name ) )        return false;    Rect bounds = wxMacGetBoundsForControl( this, pos, size );    if ( bounds.right <= bounds.left )        bounds.right = bounds.left + 100;    if ( bounds.bottom <= bounds.top )        bounds.bottom = bounds.top + 100;    UInt16 tabstyle = kControlTabDirectionNorth;    if ( HasFlag(wxBK_LEFT) )        tabstyle = kControlTabDirectionWest;    else if ( HasFlag( wxBK_RIGHT ) )        tabstyle = kControlTabDirectionEast;    else if ( HasFlag( wxBK_BOTTOM ) )        tabstyle = kControlTabDirectionSouth;    ControlTabSize tabsize;    switch (GetWindowVariant())    {        case wxWINDOW_VARIANT_MINI:            if ( UMAGetSystemVersion() >= 0x1030 )                tabsize = 3 ;            else                tabsize = kControlSizeSmall;            break;        case wxWINDOW_VARIANT_SMALL:            tabsize = kControlTabSizeSmall;            break;        default:            tabsize = kControlTabSizeLarge;            break;    }    m_peer = new wxMacControl( this );    OSStatus err = CreateTabsControl(        MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,        tabsize, tabstyle, 0, NULL, m_peer->GetControlRefAddr() );    verify_noerr( err );    MacPostControlCreate( pos, size );    return true ;}// dtorwxNotebook::~wxNotebook(){}// ----------------------------------------------------------------------------// wxNotebook accessors// ----------------------------------------------------------------------------void wxNotebook::SetPadding(const wxSize& padding){    // unsupported by OS}void wxNotebook::SetTabSize(const wxSize& sz){    // unsupported by OS}void wxNotebook::SetPageSize(const wxSize& size){    SetSize( CalcSizeFromPage( size ) );}wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const{    return DoGetSizeFromClientSize( sizePage );}int wxNotebook::DoSetSelection(size_t nPage, int flags){    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("DoSetSelection: invalid notebook page") );    if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )    {        if ( flags & SetSelection_SendEvent )        {            if ( !SendPageChangingEvent(nPage) )            {                // vetoed by program                return m_nSelection;            }            //else: program allows the page change            SendPageChangedEvent(m_nSelection, nPage);        }        ChangePage(m_nSelection, nPage);    }    //else: no change    return m_nSelection;}bool wxNotebook::SetPageText(size_t nPage, const wxString& strText){    wxCHECK_MSG( IS_VALID_PAGE(nPage), false, wxT("SetPageText: invalid notebook page") );    wxNotebookPage *page = m_pages[nPage];    page->SetLabel(strText);    MacSetupTabs();    return true;}wxString wxNotebook::GetPageText(size_t nPage) const{    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxEmptyString, wxT("GetPageText: invalid notebook page") );    wxNotebookPage *page = m_pages[nPage];    return page->GetLabel();}int wxNotebook::GetPageImage(size_t nPage) const{    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("GetPageImage: invalid notebook page") );    return m_images[nPage];}bool wxNotebook::SetPageImage(size_t nPage, int nImage){    wxCHECK_MSG( IS_VALID_PAGE(nPage), false,        wxT("SetPageImage: invalid notebook page") );    wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), false,        wxT("SetPageImage: invalid image index") );    if ( nImage != m_images[nPage] )    {        // if the item didn't have an icon before or, on the contrary, did have        // it but has lost it now, its size will change - but if the icon just        // changes, it won't        m_images[nPage] = nImage;        MacSetupTabs() ;    }    return true;}// ----------------------------------------------------------------------------// wxNotebook operations// ----------------------------------------------------------------------------// remove one page from the notebook, without deleting the windowwxNotebookPage* wxNotebook::DoRemovePage(size_t nPage){    wxCHECK_MSG( IS_VALID_PAGE(nPage), NULL,        wxT("DoRemovePage: invalid notebook page") );    wxNotebookPage* page = m_pages[nPage] ;    m_pages.RemoveAt(nPage);    MacSetupTabs();    if (m_nSelection >= (int)GetPageCount())        m_nSelection = GetPageCount() - 1;    if (m_nSelection >= 0)        m_pages[m_nSelection]->Show(true);    InvalidateBestSize();    return page;}// remove all pagesbool wxNotebook::DeleteAllPages(){    WX_CLEAR_ARRAY(m_pages) ;    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, wxT("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        m_peer->SetValue( 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 )

⌨️ 快捷键说明

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