git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3382
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxASSERT( pPage != NULL );
wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE );
wxASSERT( pPage != NULL );
wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE );
- // add the tab to the control
+ // do add the tab to the control
+
+ // init all fields to 0
+ memset(&tcItem, 0, sizeof(tcItem));
{
tcItem.mask |= TCIF_IMAGE;
tcItem.iImage = imageId;
}
{
tcItem.mask |= TCIF_IMAGE;
tcItem.iImage = imageId;
}
- else
- tcItem.iImage = 0;
- if (!strText.IsEmpty())
+ if ( !strText.IsEmpty() )
- tcItem.mask |= TCIF_TEXT;
- tcItem.pszText = (wxChar *)strText.c_str();
+ tcItem.mask |= TCIF_TEXT;
+ tcItem.pszText = (wxChar *)strText.c_str(); // const_cast
- else
- tcItem.pszText = (wxChar *) NULL;
if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) {
wxLogError(_T("Can't create the notebook page '%s'."), strText.c_str());
if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) {
wxLogError(_T("Can't create the notebook page '%s'."), strText.c_str());
+ // if the inserted page is before the selected one, we must update the
+ // index of the selected page
+ if ( nPage <= m_nSelection )
+ {
+ // one extra page added
+ m_nSelection++;
+ }
+
// save the pointer to the page
m_aPages.Insert(pPage, nPage);
// save the pointer to the page
m_aPages.Insert(pPage, nPage);
- // some page must be selected: either this one or the first one if there is
- // still no selection
- if ( bSelect )
- m_nSelection = nPage;
- else if ( m_nSelection == -1 )
- m_nSelection = 0;
-
// don't show pages by default (we'll need to adjust their size first)
HWND hwnd = GetWinHwnd(pPage);
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_VISIBLE);
// don't show pages by default (we'll need to adjust their size first)
HWND hwnd = GetWinHwnd(pPage);
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_VISIBLE);
// this updates internal flag too - otherwise it will get out of sync
pPage->Show(FALSE);
// this updates internal flag too - otherwise it will get out of sync
pPage->Show(FALSE);
- // FIXME this is ugly, I'm breaking my own rules... but needed to get display
- // right (why?)
- wxSizeEvent event;
- OnSize(event);
+ // some page should be selected: either this one or the first one if there is
+ // still no selection
+ int selNew = -1;
+ if ( bSelect )
+ selNew = nPage;
+ else if ( m_nSelection == -1 )
+ selNew = 0;
+
+ if ( selNew != -1 )
+ SetSelection(selNew);
void wxNotebook::OnSize(wxSizeEvent& event)
{
void wxNotebook::OnSize(wxSizeEvent& event)
{
- // make sure the current page is shown and has focus (it's useful because all
- // pages are created invisible initially)
- if ( m_nSelection != -1 ) {
- wxNotebookPage *pPage = m_aPages[m_nSelection];
- pPage->Show(TRUE);
- pPage->SetFocus();
- }
-
// fit the notebook page to the tab control's display area
RECT rc;
rc.left = rc.top = 0;
// fit the notebook page to the tab control's display area
RECT rc;
rc.left = rc.top = 0;
// is it our tab control?
if ( event.GetEventObject() == this )
{
// is it our tab control?
if ( event.GetEventObject() == this )
{
- // don't call ChangePage() here because it will generate redundant
- // notification events
int sel = event.GetOldSelection();
if ( sel != -1 )
m_aPages[sel]->Show(FALSE);
int sel = event.GetOldSelection();
if ( sel != -1 )
m_aPages[sel]->Show(FALSE);
// wxNotebook helper functions
// ----------------------------------------------------------------------------
// wxNotebook helper functions
// ----------------------------------------------------------------------------
-// hide the currently active panel and show the new one
+// generate the page changing and changed events, hide the currently active
+// panel and show the new one
void wxNotebook::ChangePage(int nOldSel, int nSel)
{
// MT-FIXME should use a real semaphore
void wxNotebook::ChangePage(int nOldSel, int nSel)
{
// MT-FIXME should use a real semaphore
- if ( nOldSel != -1 )
- m_aPages[nOldSel]->Show(FALSE);
-
- wxNotebookPage *pPage = m_aPages[nSel];
- pPage->Show(TRUE);
- pPage->SetFocus();
-
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
ProcessEvent(event);
event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED);
ProcessEvent(event);
s_bInsideChangePage = FALSE;
}
s_bInsideChangePage = FALSE;
}