X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc0daf84009784af053fa265d8ad8e9e446388f4..4e5a4c69c540b430fba8efe5dae1bc1ffd5caeca:/src/mac/notebmac.cpp diff --git a/src/mac/notebmac.cpp b/src/mac/notebmac.cpp index 9d0b2c4593..f9bf5dc999 100644 --- a/src/mac/notebmac.cpp +++ b/src/mac/notebmac.cpp @@ -17,14 +17,14 @@ // headers // ---------------------------------------------------------------------------- #ifdef __GNUG__ -#pragma implementation "notebook.h" + #pragma implementation "notebook.h" #endif -#include -#include -#include -#include -#include +#include "wx/string.h" +#include "wx/log.h" +#include "wx/imaglist.h" +#include "wx/notebook.h" +#include "wx/mac/uma.h" // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -32,18 +32,12 @@ // check that the page index is valid #define IS_VALID_PAGE(nPage) (((nPage) >= 0) && ((nPage) < GetPageCount())) -#ifdef __WXMAC_X__ - // I got these values for Mac OS X from the Appearance mgr docs. (Mark Newsam) -const short kwxMacTabLeftMargin = 20 ; -const short kwxMacTabTopMargin = 38 ; -const short kwxMacTabRightMargin = 20 ; -const short kwxMacTabBottomMargin = 12 ; -#else -const short kwxMacTabLeftMargin = 16 ; -const short kwxMacTabTopMargin = 30 ; -const short kwxMacTabRightMargin = 16 ; -const short kwxMacTabBottomMargin = 16 ; -#endif +static bool constantsSet = false ; + + short kwxMacTabLeftMargin = 0 ; + short kwxMacTabTopMargin = 0 ; + short kwxMacTabRightMargin = 0 ; + short kwxMacTabBottomMargin = 0 ; // ---------------------------------------------------------------------------- // event table @@ -76,10 +70,31 @@ IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxCommandEvent) // common part of all ctors void wxNotebook::Init() { -#ifdef __WXMAC_X__ - m_macHorizontalBorder = 7; - m_macVerticalBorder = 8; -#endif + if ( !constantsSet ) + { + if ( UMAHasAquaLayout() ) + { + // I got these values for Mac OS X from the Appearance mgr docs. (Mark Newsam) + kwxMacTabLeftMargin = 20 ; + kwxMacTabTopMargin = 38 ; + kwxMacTabRightMargin = 20 ; + kwxMacTabBottomMargin = 12 ; + } + else + { + kwxMacTabLeftMargin = 16 ; + kwxMacTabTopMargin = 30 ; + kwxMacTabRightMargin = 16 ; + kwxMacTabBottomMargin = 16 ; + } + constantsSet = true ; + } + if ( UMAHasAquaLayout() ) + { + m_macHorizontalBorder = 7; + m_macVerticalBorder = 8; + } + m_nSelection = -1; } @@ -115,7 +130,7 @@ bool wxNotebook::Create(wxWindow *parent, MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ; - m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, + m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1, kControlTabSmallProc , (long) this ) ; MacPostControlCreate() ; @@ -128,6 +143,41 @@ wxNotebook::~wxNotebook() m_macControl = NULL ; } +wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) +{ + wxSize sizeTotal = sizePage; + + int major,minor; + wxGetOsVersion( &major, &minor ); + + // Mac has large notebook borders. Aqua even more so. + + if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) ) + { + sizeTotal.x += 90; + + if (major >= 10) + sizeTotal.y += 28; + else + sizeTotal.y += 20; + } + else + { + if (major >= 10) + { + sizeTotal.x += 34; + sizeTotal.y += 46; + } + else + { + sizeTotal.x += 22; + sizeTotal.y += 44; + } + } + + return sizeTotal; +} + // ---------------------------------------------------------------------------- // wxNotebook accessors // ---------------------------------------------------------------------------- @@ -149,10 +199,11 @@ void wxNotebook::SetPageSize(const wxSize& size) int wxNotebook::SetSelection(int nPage) { - wxASSERT( IS_VALID_PAGE(nPage) ); + if( !IS_VALID_PAGE(nPage) ) + return m_nSelection ; ChangePage(m_nSelection, nPage); - SetControlValue( m_macControl , m_nSelection + 1 ) ; + SetControlValue( (ControlHandle) m_macControl , m_nSelection + 1 ) ; return m_nSelection; } @@ -202,7 +253,7 @@ wxNotebookPage* wxNotebook::DoRemovePage(int nPage) { wxCHECK( IS_VALID_PAGE(nPage), NULL ); wxNotebookPage* page = m_pages[nPage] ; - m_pages.Remove(nPage); + m_pages.RemoveAt(nPage); MacSetupTabs(); @@ -275,7 +326,7 @@ bool wxNotebook::InsertPage(int nPage, */ void wxNotebook::MacSetupTabs() { - SetControlMaximum( m_macControl , GetPageCount() ) ; + SetControlMaximum( (ControlHandle) m_macControl , GetPageCount() ) ; wxNotebookPage *page; ControlTabInfoRec info; @@ -291,14 +342,14 @@ void wxNotebook::MacSetupTabs() strcpy( (char *) info.name , page->GetLabel() ) ; c2pstr( (char *) info.name ) ; #endif - SetControlData( m_macControl, ii+1, kControlTabInfoTag, + SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag, sizeof( ControlTabInfoRec) , (char*) &info ) ; - SetControlData( m_macControl, ii+1, kControlTabEnabledFlagTag, + SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag, sizeof( Boolean ), (Ptr)&enabled ); } Rect bounds; - GetControlBounds(m_macControl, &bounds); - InvalWindowRect(GetMacRootWindow(), &bounds); + GetControlBounds((ControlHandle)m_macControl, &bounds); + InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds); } // ---------------------------------------------------------------------------- @@ -420,9 +471,9 @@ void wxNotebook::ChangePage(int nOldSel, int nSel) m_nSelection = nSel; } -void wxNotebook::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) +void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) { - wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControlValue(m_macControl) - 1, m_nSelection); + wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControlValue((ControlHandle)m_macControl) - 1, m_nSelection); event.SetEventObject(this); ProcessEvent(event);