X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..9c9c3d7a8f6c4ee3481674e901d34714ee18915d:/src/msw/notebook.cpp?ds=inline diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index d492f461cb..41bb070524 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -142,12 +142,11 @@ bool wxNotebook::Create(wxWindow *parent, const wxString& name) { // base init - if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) ) + if ( !CreateControl(parent, id, pos, size, style | wxTAB_TRAVERSAL, + wxDefaultValidator, name) ) return FALSE; - // notebook, so explicitly specify 0 as last parameter - if ( !MSWCreateControl(WC_TABCONTROL, _T(""), pos, size, - style | wxTAB_TRAVERSAL) ) + if ( !MSWCreateControl(WC_TABCONTROL, _T(""), pos, size) ) return FALSE; SetBackgroundColour(wxColour(::GetSysColor(COLOR_BTNFACE))); @@ -402,70 +401,85 @@ bool wxNotebook::InsertPage(int nPage, bool bSelect, int imageId) { - wxASSERT( pPage != NULL ); - wxCHECK( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE ); + wxCHECK_MSG( pPage != NULL, FALSE, _T("NULL page in wxNotebook::InsertPage") ); + wxCHECK_MSG( IS_VALID_PAGE(nPage) || nPage == GetPageCount(), FALSE, + _T("invalid index in wxNotebook::InsertPage") ); - // do add the tab to the control - // init all fields to 0 - TC_ITEM tcItem; - memset(&tcItem, 0, sizeof(tcItem)); + // add a new tab to the control + // ---------------------------- - if ( imageId != -1 ) - { - tcItem.mask |= TCIF_IMAGE; - tcItem.iImage = imageId; - } + // init all fields to 0 + TC_ITEM tcItem; + wxZeroMemory(tcItem); - if ( !strText.IsEmpty() ) - { - tcItem.mask |= TCIF_TEXT; - tcItem.pszText = (wxChar *)strText.c_str(); // const_cast - } + // set the image, if any + if ( imageId != -1 ) + { + tcItem.mask |= TCIF_IMAGE; + tcItem.iImage = imageId; + } - if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) { - wxLogError(wxT("Can't create the notebook page '%s'."), strText.c_str()); + // and the text + if ( !strText.IsEmpty() ) + { + tcItem.mask |= TCIF_TEXT; + tcItem.pszText = (wxChar *)strText.c_str(); // const_cast + } - return FALSE; - } + // fit the notebook page to the tab control's display area: this should be + // done before adding it to the notebook or TabCtrl_InsertItem() will + // change the notebooks size itself! + RECT rc; + rc.left = rc.top = 0; + GetSize((int *)&rc.right, (int *)&rc.bottom); + TabCtrl_AdjustRect(m_hwnd, FALSE, &rc); + pPage->SetSize(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); - // 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_pages.Insert(pPage, nPage); + // finally do insert it + if ( TabCtrl_InsertItem(m_hwnd, nPage, &tcItem) == -1 ) { + wxLogError(wxT("Can't create the notebook page '%s'."), strText.c_str()); + + return FALSE; + } + + // succeeded: save the pointer to the page + m_pages.Insert(pPage, nPage); - // 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); + // hide the page: unless it is selected, it shouldn't be shown (and if it + // is selected it will be shown later) + 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 would get out of sync + // with the real state + pPage->Show(FALSE); - // fit the notebook page to the tab control's display area - RECT rc; - rc.left = rc.top = 0; - GetSize((int *)&rc.right, (int *)&rc.bottom); - TabCtrl_AdjustRect(m_hwnd, FALSE, &rc); - pPage->SetSize(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); - // 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; + // now deal with the selection + // --------------------------- - if ( selNew != -1 ) - SetSelection(selNew); + // 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++; + } - return TRUE; + // 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); + + return TRUE; } // ---------------------------------------------------------------------------- @@ -589,6 +603,8 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) // wxNotebook base class virtuals // ---------------------------------------------------------------------------- +#if wxUSE_CONSTRAINTS + // override these 2 functions to do nothing: everything is done in OnSize void wxNotebook::SetConstraintSizes(bool WXUNUSED(recurse)) @@ -602,6 +618,8 @@ bool wxNotebook::DoPhase(int WXUNUSED(nPhase)) return TRUE; } +#endif // wxUSE_CONSTRAINTS + // ---------------------------------------------------------------------------- // wxNotebook Windows message handlers // ----------------------------------------------------------------------------