]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/notebook.cpp
Checked for stream validity in wxImage::GetImageCount.
[wxWidgets.git] / src / os2 / notebook.cpp
index 7cfd92ab124e2a409467f826e0a85a58047d7777..fe64de12818c4a3d5e815710cb4d2fb16d0ad229 100644 (file)
@@ -16,7 +16,9 @@
 
 // wxWindows
 #ifndef WX_PRECOMP
-  #include  "wx/string.h"
+  #include "wx/app.h"
+  #include "wx/string.h"
+  #include "wx/settings.h"
 #endif  // WX_PRECOMP
 
 #include  "wx/log.h"
@@ -210,19 +212,34 @@ int wxNotebook::SetSelection(
 )
 {
     wxCHECK_MSG( IS_VALID_PAGE(nPage), -1, wxT("notebook page out of range") );
-    int                             nOldPage = GetSelection();
 
-    ChangePage( m_nSelection
-               ,nPage
-              );
+    if (nPage != m_nSelection)
+    {
+        wxNotebookEvent             vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
+                                           ,m_windowId
+                                          );
 
-    ULONG                           ulPageId = (ULONG)m_alPageId[nPage];
+        vEvent.SetSelection(nPage);
+        vEvent.SetOldSelection(m_nSelection);
+        vEvent.SetEventObject(this);
+        if (!GetEventHandler()->ProcessEvent(vEvent) || vEvent.IsAllowed())
+        {
 
-    ::WinSendMsg( GetHWND()
-                 ,BKM_TURNTOPAGE
-                 ,MPFROMLONG((ULONG)m_alPageId[nPage])
-                 ,(MPARAM)0
-                );
+            //
+            // Program allows the page change
+            //
+            vEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
+            GetEventHandler()->ProcessEvent(vEvent);
+
+            ULONG                   ulPageId = (ULONG)m_alPageId[nPage];
+
+            ::WinSendMsg( GetHWND()
+                         ,BKM_TURNTOPAGE
+                         ,MPFROMLONG((ULONG)m_alPageId[nPage])
+                         ,(MPARAM)0
+                        );
+        }
+    }
     m_nSelection = nPage;
     return nPage;
 } // end of wxNotebook::SetSelection
@@ -679,8 +696,20 @@ void wxNotebook::OnSize(
   wxSizeEvent&                      rEvent
 )
 {
-    if (m_nSelection < m_pages.Count() && m_nSelection >= 0)
-        m_pages[m_nSelection]->Refresh();
+    int                             nPage;
+    int                             nCount = (int)m_pages.Count();
+
+    for (nPage = 0; nPage < nCount; nPage++)
+    {
+        if (m_nSelection == nPage)
+            m_pages[nPage]->Refresh();
+        else
+            ::WinSetWindowPos(m_pages[nPage]->GetHWND()
+                              ,NULLHANDLE
+                              ,0,0,0,0
+                              ,SWP_HIDE
+                             );
+    }
     rEvent.Skip();
 } // end of wxNotebook::OnSize
 
@@ -693,22 +722,44 @@ void wxNotebook::OnSelChange (
     //
     if (rEvent.GetEventObject() == this)
     {
-        int                         nSel = rEvent.GetOldSelection();
+        int                         nPageCount = GetPageCount();
+        int                         nSel;
+        ULONG                       ulOS2Sel = (ULONG)rEvent.GetOldSelection();
+        bool                        bFound = FALSE;
 
-        if (nSel != -1)
+        for (nSel = 0; nSel < nPageCount; nSel++)
         {
-            m_pages[nSel]->Show(FALSE);
-            m_pages[nSel]->SetActivePage(FALSE);
+            if (ulOS2Sel == m_alPageId[nSel])
+            {
+                bFound = TRUE;
+                break;
+            }
         }
-        nSel = rEvent.GetSelection();
-        if (nSel != -1)
-        {
-            wxNotebookPage*         pPage = m_pages[nSel];
 
-            pPage->Show(TRUE);
-            pPage->SetFocus();
-            m_pages[nSel]->SetActivePage(TRUE);
+        if (!bFound)
+            return;
+
+        m_pages[nSel]->Show(FALSE);
+
+        ulOS2Sel = (ULONG)rEvent.GetSelection();
+
+        bFound = FALSE;
+
+        for (nSel = 0; nSel < nPageCount; nSel++)
+        {
+            if (ulOS2Sel == m_alPageId[nSel])
+            {
+                bFound = TRUE;
+                break;
+            }
         }
+
+        if (!bFound)
+            return;
+
+        wxNotebookPage*         pPage = m_pages[nSel];
+
+        pPage->Show(TRUE);
         m_nSelection = nSel;
     }
 
@@ -855,56 +906,5 @@ bool wxNotebook::OS2OnScroll (
                                       );
 } // end of wxNotebook::OS2OnScroll
 
-// ----------------------------------------------------------------------------
-// wxNotebook helper functions
-// ----------------------------------------------------------------------------
-
-//
-// Generate the page changing and changed events, hide the currently active
-// panel and show the new one
-//
-void wxNotebook::ChangePage (
-  int                               nOldSel
-, int                               nSel
-)
-{
-    static bool                     sbInsideChangePage = FALSE;
-
-    //
-    // When we call ProcessEvent(), our own OnSelChange() is called which calls
-    // this function - break the infinite loop
-    //
-    if (sbInsideChangePage)
-        return;
-
-    //
-    // It's not an error (the message may be generated by the tab control itself)
-    // and it may happen - just do nothing
-    //
-    if (nSel == nOldSel)
-        return;
-
-    sbInsideChangePage = TRUE;
-
-    wxNotebookEvent                 rEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
-                                           ,m_windowId
-                                          );
-
-    rEvent.SetSelection(nSel);
-    rEvent.SetOldSelection(nOldSel);
-    rEvent.SetEventObject(this);
-    if (GetEventHandler()->ProcessEvent(rEvent) && !rEvent.IsAllowed())
-    {
-        //
-        // Program doesn't allow the page change
-        //
-        sbInsideChangePage = FALSE;
-        return;
-    }
-    rEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
-    GetEventHandler()->ProcessEvent(rEvent);
-    sbInsideChangePage = FALSE;
-} // end of wxNotebook::ChangePage
-
 #endif // wxUSE_NOTEBOOK