X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b656febdf03cfa90ed14151cdf3d56a685f8af74..2417bf69de4c386d0a532b9727e79f677d2869ec:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index dbaa99823a..424201d9c6 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -17,9 +17,11 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_NOTEBOOK + // wxWindows #ifndef WX_PRECOMP #include "wx/string.h" @@ -46,7 +48,7 @@ #endif #endif -#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) +#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) #include #endif @@ -81,6 +83,9 @@ // event table // ---------------------------------------------------------------------------- +DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING) + BEGIN_EVENT_TABLE(wxNotebook, wxControl) EVT_NOTEBOOK_PAGE_CHANGED(-1, wxNotebook::OnSelChange) @@ -105,8 +110,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxNotebookEvent, wxNotifyEvent) // common part of all ctors void wxNotebook::Init() { - m_pImageList = NULL; - m_bOwnsImageList = FALSE; + m_imageList = NULL; m_nSelection = -1; } @@ -141,21 +145,22 @@ bool wxNotebook::Create(wxWindow *parent, if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) ) return FALSE; - // colors and font - m_backgroundColour = wxColour(GetSysColor(COLOR_BTNFACE)); - m_foregroundColour = *wxBLACK; + parent->AddChild(this); // style m_windowStyle = style | wxTAB_TRAVERSAL; - long tabStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | TCS_TABS; + long tabStyle = WS_TABSTOP | TCS_TABS; + if ( m_windowStyle & wxBORDER ) + tabStyle |= WS_BORDER; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + tabStyle |= WS_CLIPSIBLINGS; if (m_windowStyle & wxCLIP_CHILDREN) tabStyle |= WS_CLIPCHILDREN; + if ( m_windowStyle & wxTC_MULTILINE ) tabStyle |= TCS_MULTILINE; - if ( m_windowStyle & wxBORDER ) - tabStyle &= WS_BORDER; if (m_windowStyle & wxNB_FIXEDWIDTH) tabStyle |= TCS_FIXEDWIDTH ; if (m_windowStyle & wxNB_BOTTOM) @@ -165,42 +170,28 @@ bool wxNotebook::Create(wxWindow *parent, if (m_windowStyle & wxNB_RIGHT) tabStyle |= TCS_VERTICAL|TCS_RIGHT; - - if ( !MSWCreate(GetId(), GetParent(), WC_TABCONTROL, - this, NULL, pos.x, pos.y, size.x, size.y, - tabStyle, NULL, 0) ) + // note that we don't want to have the default WS_EX_CLIENTEDGE style for the + // notebook, so explicitly specify 0 as last parameter + if ( !MSWCreateControl(WC_TABCONTROL, tabStyle, pos, size, _T(""), 0) ) { return FALSE; } - // Not all compilers recognise SetWindowFont - ::SendMessage(GetHwnd(), WM_SETFONT, - (WPARAM)::GetStockObject(DEFAULT_GUI_FONT), TRUE); - - - if ( parent != NULL ) - parent->AddChild(this); - - SubclassWin(m_hWnd); + SetBackgroundColour(wxColour(::GetSysColor(COLOR_BTNFACE))); return TRUE; } -// dtor -wxNotebook::~wxNotebook() -{ - if (m_bOwnsImageList) delete m_pImageList; -} - // ---------------------------------------------------------------------------- // wxNotebook accessors // ---------------------------------------------------------------------------- + int wxNotebook::GetPageCount() const { // consistency check - wxASSERT( (int)m_aPages.Count() == TabCtrl_GetItemCount(m_hwnd) ); + wxASSERT( (int)m_pages.Count() == TabCtrl_GetItemCount(m_hwnd) ); - return m_aPages.Count(); + return m_pages.Count(); } int wxNotebook::GetRowCount() const @@ -217,16 +208,6 @@ int wxNotebook::SetSelection(int nPage) return TabCtrl_SetCurSel(m_hwnd, nPage); } -void wxNotebook::AdvanceSelection(bool bForward) -{ - int nSel = GetSelection(); - int nMax = GetPageCount() - 1; - if ( bForward ) - SetSelection(nSel == nMax ? 0 : nSel + 1); - else - SetSelection(nSel == 0 ? nMax : nSel - 1); -} - bool wxNotebook::SetPageText(int nPage, const wxString& strText) { wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, wxT("notebook page out of range") ); @@ -278,16 +259,12 @@ bool wxNotebook::SetPageImage(int nPage, int nImage) void wxNotebook::SetImageList(wxImageList* imageList) { - if (m_bOwnsImageList) delete m_pImageList; - m_pImageList = imageList; - m_bOwnsImageList = FALSE; - TabCtrl_SetImageList(m_hwnd, (HIMAGELIST)imageList->GetHIMAGELIST()); -} + wxNotebookBase::SetImageList(imageList); -void wxNotebook::AssignImageList(wxImageList* imageList) -{ - SetImageList(imageList); - m_bOwnsImageList = TRUE; + if ( imageList ) + { + TabCtrl_SetImageList(m_hwnd, (HIMAGELIST)imageList->GetHIMAGELIST()); + } } // ---------------------------------------------------------------------------- @@ -338,10 +315,10 @@ bool wxNotebook::DeletePage(int nPage) TabCtrl_DeleteItem(m_hwnd, nPage); - delete m_aPages[nPage]; - m_aPages.Remove(nPage); + delete m_pages[nPage]; + m_pages.RemoveAt(nPage); - if ( m_aPages.IsEmpty() ) { + if ( m_pages.IsEmpty() ) { // no selection if the notebook became empty m_nSelection = -1; } @@ -353,20 +330,20 @@ bool wxNotebook::DeletePage(int nPage) } // remove one page from the notebook, without deleting -bool wxNotebook::RemovePage(int nPage) +wxNotebookPage *wxNotebook::DoRemovePage(int nPage) { - wxCHECK_MSG( IS_VALID_PAGE(nPage), FALSE, wxT("notebook page out of range") ); + wxNotebookPage *pageRemoved = wxNotebookBase::DoRemovePage(nPage); + if ( !pageRemoved ) + return NULL; TabCtrl_DeleteItem(m_hwnd, nPage); - m_aPages.Remove(nPage); - - if ( m_aPages.IsEmpty() ) - m_nSelection = -1; - else - m_nSelection = TabCtrl_GetCurSel(m_hwnd); + if ( m_pages.IsEmpty() ) + m_nSelection = -1; + else + m_nSelection = TabCtrl_GetCurSel(m_hwnd); - return TRUE; + return pageRemoved; } // remove all pages @@ -375,9 +352,9 @@ bool wxNotebook::DeleteAllPages() int nPageCount = GetPageCount(); int nPage; for ( nPage = 0; nPage < nPageCount; nPage++ ) - delete m_aPages[nPage]; + delete m_pages[nPage]; - m_aPages.Clear(); + m_pages.Clear(); TabCtrl_DeleteAllItems(m_hwnd); @@ -438,7 +415,7 @@ bool wxNotebook::InsertPage(int nPage, } // save the pointer to the page - m_aPages.Insert(pPage, nPage); + m_pages.Insert(pPage, nPage); // don't show pages by default (we'll need to adjust their size first) HWND hwnd = GetWinHwnd(pPage); @@ -483,9 +460,9 @@ void wxNotebook::OnSize(wxSizeEvent& event) int width = rc.right - rc.left, height = rc.bottom - rc.top; - size_t nCount = m_aPages.Count(); + size_t nCount = m_pages.Count(); for ( size_t nPage = 0; nPage < nCount; nPage++ ) { - wxNotebookPage *pPage = m_aPages[nPage]; + wxNotebookPage *pPage = m_pages[nPage]; pPage->SetSize(rc.left, rc.top, width, height); } @@ -499,12 +476,12 @@ void wxNotebook::OnSelChange(wxNotebookEvent& event) { int sel = event.GetOldSelection(); if ( sel != -1 ) - m_aPages[sel]->Show(FALSE); + m_pages[sel]->Show(FALSE); sel = event.GetSelection(); if ( sel != -1 ) { - wxNotebookPage *pPage = m_aPages[sel]; + wxNotebookPage *pPage = m_pages[sel]; pPage->Show(TRUE); pPage->SetFocus(); } @@ -525,7 +502,7 @@ void wxNotebook::OnSetFocus(wxFocusEvent& event) // set focus to the currently selected page if any if ( m_nSelection != -1 ) - m_aPages[m_nSelection]->SetFocus(); + m_pages[m_nSelection]->SetFocus(); event.Skip(); } @@ -561,7 +538,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) // and is being propagated downwards event.SetEventObject(this); - wxWindow *page = m_aPages[m_nSelection]; + wxWindow *page = m_pages[m_nSelection]; if ( !page->GetEventHandler()->ProcessEvent(event) ) { page->SetFocus(); @@ -657,7 +634,7 @@ void wxNotebook::ChangePage(int nOldSel, int nSel) event.SetSelection(nSel); event.SetOldSelection(nOldSel); event.SetEventObject(this); - if ( ProcessEvent(event) && !event.IsAllowed() ) + if ( GetEventHandler()->ProcessEvent(event) && !event.IsAllowed() ) { // program doesn't allow the page change s_bInsideChangePage = FALSE; @@ -665,7 +642,9 @@ void wxNotebook::ChangePage(int nOldSel, int nSel) } event.SetEventType(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED); - ProcessEvent(event); + GetEventHandler()->ProcessEvent(event); s_bInsideChangePage = FALSE; } + +#endif // wxUSE_NOTEBOOK