]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/notebmac.cpp
Allow wxSTC to have scrollbars
[wxWidgets.git] / src / mac / notebmac.cpp
index 6e94d2804988ed1136ee5d3d74c32aaa967703f4..f9bf5dc99949e4db3b4750f9917789d196542b7b 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 #ifdef __GNUG__
-#pragma implementation "notebook.h"
+  #pragma implementation "notebook.h"
 #endif
 
-#include  <wx/string.h>
-#include  <wx/log.h>
-#include  <wx/imaglist.h>
-#include  <wx/notebook.h>
-#include <wx/mac/uma.h>
+#include "wx/string.h"
+#include "wx/log.h"
+#include "wx/imaglist.h"
+#include "wx/notebook.h"
+#include "wx/mac/uma.h"
 // ----------------------------------------------------------------------------
 // macros
 // ----------------------------------------------------------------------------
 // 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);