X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90b959aee428b26304ee0056864af48775051496..b12e1d2fcd5ee2771a4ed1904d462fb516adb05f:/src/mac/notebmac.cpp diff --git a/src/mac/notebmac.cpp b/src/mac/notebmac.cpp index 6e94d28049..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,28 +143,67 @@ 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 // ---------------------------------------------------------------------------- void wxNotebook::SetPadding(const wxSize& padding) { + wxFAIL_MSG( wxT("wxNotebook::SetPadding not implemented") ); } void wxNotebook::SetTabSize(const wxSize& sz) { + wxFAIL_MSG( wxT("wxNotebook::SetTabSize not implemented") ); } void wxNotebook::SetPageSize(const wxSize& size) { + wxFAIL_MSG( wxT("wxNotebook::SetPageSize not implemented") ); } 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; } @@ -175,17 +229,18 @@ wxString wxNotebook::GetPageText(int nPage) const int wxNotebook::GetPageImage(int nPage) const { - wxASSERT( IS_VALID_PAGE(nPage) ); + wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, _T("invalid notebook page") ); - // TODO - return 0; + return 0 ; } bool wxNotebook::SetPageImage(int nPage, int nImage) { - wxASSERT( IS_VALID_PAGE(nPage) ); + 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()") ); - // TODO return FALSE; } @@ -198,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(); @@ -271,7 +326,7 @@ bool wxNotebook::InsertPage(int nPage, */ void wxNotebook::MacSetupTabs() { - SetControlMaximum( m_macControl , GetPageCount() ) ; + SetControlMaximum( (ControlHandle) m_macControl , GetPageCount() ) ; wxNotebookPage *page; ControlTabInfoRec info; @@ -287,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); } // ---------------------------------------------------------------------------- @@ -305,14 +360,6 @@ void wxNotebook::MacSetupTabs() // time because doing it in ::Create() doesn't work (for unknown reasons) void wxNotebook::OnSize(wxSizeEvent& event) { - static bool s_bFirstTime = TRUE; - if ( s_bFirstTime ) { - // TODO: any first-time-size processing. - s_bFirstTime = FALSE; - } - - // TODO: all this may or may not be necessary for your platform - // emulate page change (it's esp. important to do it first time because // otherwise our page would stay invisible) int nSel = m_nSelection; @@ -424,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);