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

📄 notebmac.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////////////////////////////////////////////////////////////////////// Name:        src/mac/classic/notebmac.cpp// Purpose:     implementation of wxNotebook// Author:      Stefan Csomor// Modified by:// Created:     1998-01-01// RCS-ID:      $Id: notebmac.cpp,v 1.13 2006/07/03 19:02:32 ABX Exp $// Copyright:   (c) Stefan Csomor// Licence:     wxWindows licence///////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"// ============================================================================// declarations// ============================================================================// ----------------------------------------------------------------------------// headers// ----------------------------------------------------------------------------#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/imaglist.h"#include "wx/mac/uma.h"// ----------------------------------------------------------------------------// macros// ----------------------------------------------------------------------------// check that the page index is valid#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())// ----------------------------------------------------------------------------// event table// ----------------------------------------------------------------------------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_MOUSE_EVENTS(wxNotebook::OnMouse)    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)// ============================================================================// implementation// ============================================================================// The Appearance Manager docs show using tab controls in either edge to edge// mode, or inset.  I think edge to edge conforms better to the other ports,// and inset mode is better accomplished with space around the wxNotebook rather// than within it.    --Robin// CS : had to switch off tight spacing due to 10.3 problems#define wxMAC_EDGE_TO_EDGE 0static inline int wxMacTabMargin(long nbStyle, long side){    static int tabMargin = -1;    static int otherMargin = -1;    if ( tabMargin == -1)    {        if ( UMAHasAquaLayout() )        {            tabMargin = 26;    // From Appearance Manager docs for small tab control dimensions#if wxMAC_EDGE_TO_EDGE            otherMargin = 0;#else//            otherMargin = 20;            // JACS - this seems fine on 10.3; 20 is way too much            otherMargin = 8;#endif        }        else        {            tabMargin = 30;#if wxMAC_EDGE_TO_EDGE            otherMargin = 0;#else            otherMargin = 16;#endif        }    }    // If the style matches the side asked for then return the tab margin,    // but we have to special case wxBK_TOP since it is zero...    if ( side == wxBK_TOP)    {        if ( nbStyle != 0 && nbStyle & (wxBK_LEFT|wxBK_RIGHT|wxBK_BOTTOM))        {            return otherMargin;        }        else        {            return tabMargin;        }    }    else if ( nbStyle & side)        return tabMargin;    else        return otherMargin;}static inline int wxMacTabLeftMargin(long style){    return wxMacTabMargin(style, wxBK_LEFT);}static inline int wxMacTabTopMargin(long style){    return wxMacTabMargin(style, wxBK_TOP);}static inline int wxMacTabRightMargin(long style){    return wxMacTabMargin(style, wxBK_RIGHT);}static inline int wxMacTabBottomMargin(long style){    return wxMacTabMargin(style, wxBK_BOTTOM);}// ----------------------------------------------------------------------------// wxNotebook construction// ----------------------------------------------------------------------------// common part of all ctorsvoid wxNotebook::Init(){    if ( UMAHasAquaLayout() )    {        // Should these depend on wxMAC_EDGE_TO_EDGE too?        m_macHorizontalBorder = 7;        m_macVerticalBorder = 8;    }    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);}// Create() functionbool wxNotebook::Create(wxWindow *parent,                        wxWindowID id,                        const wxPoint& pos,                        const wxSize& size,                        long style,                        const wxString& name){    if ( !wxNotebookBase::Create(parent, id, pos, size, style, name) )        return false;    Rect bounds ;    Str255 title ;    if ( (style & wxBK_ALIGN_MASK) == wxBK_DEFAULT )        style |= wxBK_TOP;    MacPreControlCreate( parent , id ,  wxEmptyString , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;    int tabstyle = kControlTabSmallNorthProc ;    if ( HasFlag(wxBK_LEFT) )        tabstyle = kControlTabSmallWestProc ;    else if ( HasFlag( wxBK_RIGHT ) )        tabstyle = kControlTabSmallEastProc ;    else if ( HasFlag( wxBK_BOTTOM ) )        tabstyle = kControlTabSmallSouthProc ;    m_macControl = (WXWidget) ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,        tabstyle , (long) this ) ;    MacPostControlCreate() ;    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{    wxSize sizeTotal = sizePage;    sizeTotal.x += 2 * m_macHorizontalBorder + wxMacTabLeftMargin(GetWindowStyle()) +        wxMacTabRightMargin(GetWindowStyle()) ;    sizeTotal.y += 2 * m_macVerticalBorder + wxMacTabTopMargin(GetWindowStyle()) +        wxMacTabBottomMargin(GetWindowStyle()) ;    return sizeTotal;}wxSize wxNotebook::DoGetBestSize() const{    // calculate the max page size    wxSize size(0, 0);    size_t count = GetPageCount();    if ( count )    {        for ( size_t n = 0; n < count; n++ )        {            wxSize sizePage = m_pages[n]->GetSize();            if ( size.x < sizePage.x )                size.x = sizePage.x;            if ( size.y < sizePage.y )                size.y = sizePage.y;        }    }    else // no pages    {        // use some arbitrary default size        size.x =        size.y = 100;    }    return CalcSizeFromPage(size);}int wxNotebook::SetSelection(size_t nPage){    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );    if ( int(nPage) != m_nSelection )    {        wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId);        event.SetSelection(nPage);        event.SetOldSelection(m_nSelection);        event.SetEventObject(this);        if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() )        {            // program allows the page change            event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);            (void)GetEventHandler()->ProcessEvent(event);            ChangePage(m_nSelection, nPage);        }    }    return m_nSelection;}bool wxNotebook::SetPageText(size_t nPage, const wxString& strText){    wxASSERT( IS_VALID_PAGE(nPage) );    wxNotebookPage *page = m_pages[nPage];    page->SetLabel(strText);    MacSetupTabs();    return true;}wxString wxNotebook::GetPageText(size_t nPage) const{    wxASSERT( IS_VALID_PAGE(nPage) );    wxNotebookPage *page = m_pages[nPage];    return page->GetLabel();}int wxNotebook::GetPageImage(size_t nPage) const{    wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, _T("invalid notebook page") );    return m_images[nPage];}bool wxNotebook::SetPageImage(size_t nPage, int nImage){    wxCHECK_MSG( IS_VALID_PAGE(nPage), false, _T("invalid notebook page") );    wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), false,        _T("invalid image index in SetPageImage()") );    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( IS_VALID_PAGE(nPage), NULL );    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) ;

⌨️ 快捷键说明

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