#if wxUSE_NOTEBOOK
+#include "wx/notebook.h"
+
// wxWidgets
#ifndef WX_PRECOMP
- #include "wx/app.h"
- #include "wx/dcclient.h"
- #include "wx/string.h"
- #include "wx/settings.h"
+ #include "wx/app.h"
+ #include "wx/dcclient.h"
+ #include "wx/string.h"
+ #include "wx/settings.h"
+ #include "wx/log.h"
+ #include "wx/event.h"
+ #include "wx/control.h"
#endif // WX_PRECOMP
-#include "wx/log.h"
#include "wx/imaglist.h"
-#include "wx/event.h"
-#include "wx/control.h"
-#include "wx/notebook.h"
#include "wx/os2/private.h"
// event table
// ----------------------------------------------------------------------------
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING)
-
-BEGIN_EVENT_TABLE(wxNotebook, wxControl)
+BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase)
EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange)
EVT_SIZE(wxNotebook::OnSize)
EVT_SET_FOCUS(wxNotebook::OnSetFocus)
EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
END_EVENT_TABLE()
-IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxControl)
-IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxNotifyEvent)
+IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxBookCtrlBase)
// ============================================================================
// implementation
void wxNotebook::Init()
{
m_imageList = NULL;
- m_nSelection = -1;
m_nTabSize = 0;
} // end of wxNotebook::Init
long lStyle,
const wxString& rsName )
{
+ if ( (lStyle & wxBK_ALIGN_MASK) == wxBK_DEFAULT )
+ lStyle |= wxBK_TOP;
//
// Base init
//
{
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
- if (nPage != (size_t)m_nSelection)
+ if (nPage != (size_t)m_selection)
{
- wxNotebookEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
+ wxBookCtrlEvent vEvent( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
,m_windowId
);
vEvent.SetSelection(nPage);
- vEvent.SetOldSelection(m_nSelection);
+ vEvent.SetOldSelection(m_selection);
vEvent.SetEventObject(this);
- if (!GetEventHandler()->ProcessEvent(vEvent) || vEvent.IsAllowed())
+ if (!HandleWindowEvent(vEvent) || vEvent.IsAllowed())
{
//
// Program allows the page change
//
vEvent.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
- GetEventHandler()->ProcessEvent(vEvent);
+ HandleWindowEvent(vEvent);
::WinSendMsg( GetHWND()
,BKM_TURNTOPAGE
);
}
}
- m_nSelection = nPage;
+ m_selection = nPage;
return nPage;
} // end of wxNotebook::SetSelection
+int wxNotebook::ChangeSelection( size_t nPage )
+{
+ wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") );
+
+ if (nPage != (size_t)m_selection)
+ {
+ ::WinSendMsg( GetHWND()
+ ,BKM_TURNTOPAGE
+ ,MPFROMLONG((ULONG)m_alPageId[nPage])
+ ,(MPARAM)0
+ );
+ }
+ m_selection = nPage;
+ return nPage;
+}
+
bool wxNotebook::SetPageText( size_t nPage,
const wxString& rsStrText )
{
return (bool)::WinSendMsg( m_hWnd
,BKM_SETTABTEXT
,MPFROMLONG((ULONG)m_alPageId[nPage])
- ,MPFROMP((PSZ)rsStrText.c_str())
+ ,MPFROMP((const char*)rsStrText.c_str())
);
} // end of wxNotebook::SetPageText
return (bool)::WinSendMsg( GetHWND()
,BKM_SETTABBITMAP
,MPFROMLONG((ULONG)m_alPageId[nPage])
- ,(MPARAM)vBitmap.GetHBITMAP()
+ ,(MPARAM)wxCopyBmp(vBitmap.GetHBITMAP(), true)
);
} // end of wxNotebook::SetPageImage
//
// No selection any more, the notebook becamse empty
//
- m_nSelection = -1;
+ m_selection = wxNOT_FOUND;
}
else // notebook still not empty
{
//
int nSelNew;
- if (m_nSelection == (int)GetPageCount())
+ if (m_selection == (int)GetPageCount())
{
//
// Last page deleted, make the new last page the new selection
//
- nSelNew = m_nSelection - 1;
+ nSelNew = m_selection - 1;
}
- else if (nPage <= (size_t)m_nSelection)
+ else if (nPage <= (size_t)m_selection)
{
//
// We must show another page, even if it has the same index
//
- nSelNew = m_nSelection;
+ nSelNew = m_selection;
}
else // nothing changes for the currently selected page
{
- nSelNew = -1;
+ nSelNew = wxNOT_FOUND;
//
// We still must refresh the current page: this needs to be done
// control (i.e. when there are too many pages) -- otherwise after
// deleting a page nothing at all is shown
//
- m_pages[m_nSelection]->Refresh();
+ m_pages[m_selection]->Refresh();
}
- if (nSelNew != -1)
+ if (nSelNew != wxNOT_FOUND)
{
//
- // m_nSelection must be always valid so reset it before calling
+ // m_selection must be always valid so reset it before calling
// SetSelection()
//
- m_nSelection = -1;
+ m_selection = wxNOT_FOUND;
SetSelection(nSelNew);
}
}
,(MPARAM)0
,(MPARAM)BKA_ALL
);
- m_nSelection = -1;
+ m_selection = wxNOT_FOUND;
return true;
} // end of wxNotebook::DeleteAllPages
// If the inserted page is before the selected one, we must update the
// index of the selected page
//
- if (nPage <= (size_t)m_nSelection)
+ if (nPage <= (size_t)m_selection)
{
//
// One extra page added
//
- m_nSelection++;
+ m_selection++;
}
if (pPage)
pPage->Show(false);
}
- //
- // Some page should be selected: either this one or the first one if there is
- // still no selection
- //
- int nSelNew = -1;
-
- if (bSelect)
- nSelNew = nPage;
- else if ( m_nSelection == -1 )
- nSelNew = 0;
-
- if (nSelNew != -1)
- SetSelection(nSelNew);
+ DoSetSelectionAfterInsertion(nPage, bSelect);
InvalidateBestSize();
} // end of wxNotebook::OnSize
void wxNotebook::OnSelChange (
- wxNotebookEvent& rEvent
+ wxBookCtrlEvent& rEvent
)
{
//
wxNotebookPage* pPage = m_pages[nSel];
pPage->Show(true);
- m_nSelection = nSel;
+ m_selection = nSel;
}
//
//
// set focus to the currently selected page if any
//
- if (m_nSelection != -1)
- m_pages[m_nSelection]->SetFocus();
+ if (m_selection != wxNOT_FOUND)
+ m_pages[m_selection]->SetFocus();
rEvent.Skip();
} // end of wxNotebook::OnSetFocus
//
// No, it doesn't come from child, case (b): forward to a page
//
- if (m_nSelection != -1)
+ if (m_selection != wxNOT_FOUND)
{
//
// So that the page knows that the event comes from it's parent
//
rEvent.SetEventObject(this);
- wxWindow* pPage = m_pages[m_nSelection];
+ wxWindow* pPage = m_pages[m_selection];
- if (!pPage->GetEventHandler()->ProcessEvent(rEvent))
+ if (!pPage->HandleWindowEvent(rEvent))
{
pPage->SetFocus();
}
if (pParent)
{
rEvent.SetCurrentFocus(this);
- pParent->GetEventHandler()->ProcessEvent(rEvent);
+ pParent->HandleWindowEvent(rEvent);
}
}
}