]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/notebook_osx.cpp
Fix wxHtmlHelpData::SetTempDir() to behave correctly without trailing slash.
[wxWidgets.git] / src / osx / notebook_osx.cpp
index 7c65da46567d322965a3207efe21dc1987630644..59a329d5e7f56a0eeb25c35c10f4c4f2c489be49 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
-// RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
@@ -44,16 +43,16 @@ bool wxNotebook::Create( wxWindow *parent,
     const wxSize& size,
     long style,
     const wxString& name )
-{
-    m_macIsUserPane = false ;
-
+{    
+    DontCreatePeer();
+    
     if (! (style & wxBK_ALIGN_MASK))
         style |= wxBK_TOP;
 
     if ( !wxNotebookBase::Create( parent, id, pos, size, style, name ) )
         return false;
 
-    m_peer = wxWidgetImpl::CreateTabView(this,parent, id, pos, size, style, GetExtraStyle() );
+    SetPeer(wxWidgetImpl::CreateTabView(this,parent, id, pos, size, style, GetExtraStyle() ));
 
     MacPostControlCreate( pos, size );
 
@@ -145,7 +144,7 @@ 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,
+    wxCHECK_MSG( HasImageList() && nImage < GetImageList()->GetImageCount(), false,
         wxT("SetPageImage: invalid image index") );
 
     if ( nImage != m_images[nPage] )
@@ -173,11 +172,19 @@ wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage)
 
     wxNotebookPage* page = m_pages[nPage] ;
     m_pages.RemoveAt(nPage);
+    m_images.RemoveAt(nPage);
 
     MacSetupTabs();
 
-    if (m_selection >= (int)GetPageCount())
-        m_selection = GetPageCount() - 1;
+    if ( m_selection >= (int)nPage )
+    {
+        if ( GetPageCount() == 0 )
+            m_selection = wxNOT_FOUND;
+        else
+            m_selection = m_selection ? m_selection - 1 : 0;
+
+        GetPeer()->SetValue( m_selection + 1 ) ;
+    }
 
     if (m_selection >= 0)
         m_pages[m_selection]->Show(true);
@@ -190,7 +197,8 @@ wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage)
 // remove all pages
 bool wxNotebook::DeleteAllPages()
 {
-    WX_CLEAR_ARRAY(m_pages) ;
+    WX_CLEAR_ARRAY(m_pages);
+    m_images.clear();
     MacSetupTabs();
     m_selection = wxNOT_FOUND ;
     InvalidateBestSize();
@@ -235,7 +243,7 @@ bool wxNotebook::InsertPage(size_t nPage,
         m_selection++;
 
         // while this still is the same page showing, we need to update the tabs
-        m_peer->SetValue( m_selection + 1 ) ;
+        GetPeer()->SetValue( m_selection + 1 ) ;
     }
 
     DoSetSelectionAfterInsertion(nPage, bSelect);
@@ -245,63 +253,9 @@ bool wxNotebook::InsertPage(size_t nPage,
     return true;
 }
 
-int wxNotebook::HitTest(const wxPoint& WXUNUSED(pt), long * WXUNUSED(flags)) const
+int wxNotebook::HitTest(const wxPoint& pt, long *flags) const
 {
-    int resultV = wxNOT_FOUND;
-#if 0
-    const int countPages = GetPageCount();
-
-    // we have to convert from Client to Window relative coordinates
-    wxPoint adjustedPt = pt + GetClientAreaOrigin();
-    // and now to HIView native ones
-    adjustedPt.x -= MacGetLeftBorderSize() ;
-    adjustedPt.y -= MacGetTopBorderSize() ;
-
-    HIPoint hipoint= { adjustedPt.x , adjustedPt.y } ;
-    HIViewPartCode outPart = 0 ;
-    OSStatus err = HIViewGetPartHit( m_peer->GetControlRef(), &hipoint, &outPart );
-
-    int max = m_peer->GetMaximum() ;
-    if ( outPart == 0 && max > 0 )
-    {
-        // this is a hack, as unfortunately a hit on an already selected tab returns 0,
-        // so we have to go some extra miles to make sure we select something different
-        // and try again ..
-        int val = m_peer->GetValue() ;
-        int maxval = max ;
-        if ( max == 1 )
-        {
-            m_peer->SetMaximum( 2 ) ;
-            maxval = 2 ;
-        }
-
-        if ( val == 1 )
-            m_peer->SetValue( maxval ) ;
-        else
-             m_peer->SetValue( 1 ) ;
-
-        err = HIViewGetPartHit( m_peer->GetControlRef(), &hipoint, &outPart );
-
-        m_peer->SetValue( val ) ;
-        if ( max == 1 )
-            m_peer->SetMaximum( 1 ) ;
-    }
-
-    if ( outPart >= 1 && outPart <= countPages )
-        resultV = outPart - 1 ;
-
-    if (flags != NULL)
-    {
-        *flags = 0;
-
-        // we cannot differentiate better
-        if (resultV >= 0)
-            *flags |= wxBK_HITTEST_ONLABEL;
-        else
-            *flags |= wxBK_HITTEST_NOWHERE;
-    }
-#endif
-    return resultV;
+    return GetPeer()->TabHitTest(pt,flags);
 }
 
 // Added by Mark Newsam
@@ -311,7 +265,7 @@ int wxNotebook::HitTest(const wxPoint& WXUNUSED(pt), long * WXUNUSED(flags)) con
 //
 void wxNotebook::MacSetupTabs()
 {
-    m_peer->SetupTabs(*this);
+    GetPeer()->SetupTabs(*this);
     Refresh();
 }
 
@@ -339,6 +293,7 @@ void wxNotebook::OnSize(wxSizeEvent& event)
         pPage->SetSize(rect, wxSIZE_FORCE_EVENT);
     }
 
+#if 0 // deactivate r65078 for the moment
     // If the selected page is hidden at this point, the notebook
     // has become visible for the first time after creation, and
     // we postponed showing the page in ChangePage().
@@ -352,6 +307,7 @@ void wxNotebook::OnSize(wxSizeEvent& event)
             pPage->SetFocus();
         }
     }
+#endif
 
     // Processing continues to next OnSize
     event.Skip();
@@ -477,6 +433,7 @@ void wxNotebook::ChangePage(int nOldSel, int nSel)
     if ( nSel != wxNOT_FOUND )
     {
         wxNotebookPage *pPage = m_pages[nSel];
+#if 0 // deactivate r65078 for the moment
         if ( IsShownOnScreen() )
         {
             pPage->Show( true );
@@ -491,21 +448,25 @@ void wxNotebook::ChangePage(int nOldSel, int nSel)
             // We Show() the selected page in our OnSize handler,
             // unless it already is shown.
         }
+#else
+        pPage->Show( true );
+        pPage->SetFocus();
+#endif
     }
 
     m_selection = nSel;
-    m_peer->SetValue( m_selection + 1 ) ;
+    GetPeer()->SetValue( m_selection + 1 ) ;
 }
 
 bool wxNotebook::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
     bool status = false ;
 
-    SInt32 newSel = m_peer->GetValue() - 1 ;
+    SInt32 newSel = GetPeer()->GetValue() - 1 ;
     if ( newSel != m_selection )
     {
         wxBookCtrlEvent changing(
-            wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId,
+            wxEVT_NOTEBOOK_PAGE_CHANGING, m_windowId,
             newSel , m_selection );
         changing.SetEventObject( this );
         HandleWindowEvent( changing );
@@ -513,14 +474,16 @@ bool wxNotebook::OSXHandleClicked( double WXUNUSED(timestampsec) )
         if ( changing.IsAllowed() )
         {
             wxBookCtrlEvent event(
-                wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId,
+                wxEVT_NOTEBOOK_PAGE_CHANGED, m_windowId,
                 newSel, m_selection );
             event.SetEventObject( this );
             HandleWindowEvent( event );
+
+            m_selection = newSel;
         }
         else
         {
-            m_peer->SetValue( m_selection + 1 ) ;
+            GetPeer()->SetValue( m_selection + 1 ) ;
         }
 
         status = true ;