X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a570e8f8febd7213e789647478298293df4519db..65c11337559c3b95e86d38723c37ca6b10a2bd5b:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 7bab57b959..5d41cd238b 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -228,7 +228,7 @@ const wxNotebookPageInfoList& wxNotebook::GetPageInfos() const void wxNotebook::Init() { m_imageList = NULL; - m_nSelection = -1; + m_nSelection = wxNOT_FOUND; #if wxUSE_UXTHEME m_hbrBackground = NULL; @@ -293,7 +293,11 @@ bool wxNotebook::Create(wxWindow *parent, } #endif //wxUSE_UXTHEME +#if defined(__WINE__) && wxUSE_UNICODE + LPCTSTR className = L"SysTabControl32"; +#else LPCTSTR className = WC_TABCONTROL; +#endif #if USE_NOTEBOOK_ANTIFLICKER // SysTabCtl32 class has natively CS_HREDRAW and CS_VREDRAW enabled and it @@ -457,14 +461,14 @@ int wxNotebook::SetSelection(size_t nPage) return m_nSelection; } -void wxNotebook::UpdateSelection(size_t newsel) +void wxNotebook::UpdateSelection(int selNew) { - if ( m_nSelection != -1 ) + if ( m_nSelection != wxNOT_FOUND ) m_pages[m_nSelection]->Show(false); - if ( newsel != -1 ) + if ( selNew != wxNOT_FOUND ) { - wxNotebookPage *pPage = m_pages[newsel]; + wxNotebookPage *pPage = m_pages[selNew]; pPage->Show(true); } @@ -478,14 +482,14 @@ void wxNotebook::UpdateSelection(size_t newsel) if ( ::IsWindowVisible(GetHwnd()) ) SetFocus(); - m_nSelection = newsel; + m_nSelection = selNew; } int wxNotebook::ChangeSelection(size_t nPage) { wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("notebook page out of range") ); - if ( int(nPage) != m_nSelection ) + if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection ) { TabCtrl_SetCurSel(GetHwnd(), nPage); @@ -501,7 +505,7 @@ bool wxNotebook::SetPageText(size_t nPage, const wxString& strText) TC_ITEM tcItem; tcItem.mask = TCIF_TEXT; - tcItem.pszText = (wxChar *)strText.c_str(); + tcItem.pszText = (wxChar *)strText.wx_str(); if ( !HasFlag(wxNB_MULTILINE) ) return TabCtrl_SetItem(GetHwnd(), nPage, &tcItem) != 0; @@ -545,7 +549,8 @@ int wxNotebook::GetPageImage(size_t nPage) const TC_ITEM tcItem; tcItem.mask = TCIF_IMAGE; - return TabCtrl_GetItem(GetHwnd(), nPage, &tcItem) ? tcItem.iImage : wxNOT_FOUND; + return TabCtrl_GetItem(GetHwnd(), nPage, &tcItem) ? tcItem.iImage + : wxNOT_FOUND; } bool wxNotebook::SetPageImage(size_t nPage, int nImage) @@ -565,7 +570,7 @@ void wxNotebook::SetImageList(wxImageList* imageList) if ( imageList ) { - (void) TabCtrl_SetImageList(GetHwnd(), (HIMAGELIST)imageList->GetHIMAGELIST()); + (void) TabCtrl_SetImageList(GetHwnd(), GetHimagelistOf(imageList)); } } @@ -680,12 +685,12 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage) if ( m_pages.IsEmpty() ) { // no selection any more, the notebook becamse empty - m_nSelection = -1; + m_nSelection = wxNOT_FOUND; } else // notebook still not empty { int selNew = TabCtrl_GetCurSel(GetHwnd()); - if (selNew != -1) + if ( selNew != wxNOT_FOUND ) { // No selection change, just refresh the current selection. // Because it could be that the slection index changed @@ -706,7 +711,7 @@ wxNotebookPage *wxNotebook::DoRemovePage(size_t nPage) // m_nSelection must be always valid so reset it before calling // SetSelection() - m_nSelection = -1; + m_nSelection = wxNOT_FOUND; SetSelection(selNew); } else @@ -730,7 +735,7 @@ bool wxNotebook::DeleteAllPages() TabCtrl_DeleteAllItems(GetHwnd()); - m_nSelection = -1; + m_nSelection = wxNOT_FOUND; InvalidateBestSize(); return true; @@ -768,7 +773,7 @@ bool wxNotebook::InsertPage(size_t nPage, if ( !strText.empty() ) { tcItem.mask |= TCIF_TEXT; - tcItem.pszText = (wxChar *)strText.c_str(); // const_cast + tcItem.pszText = (wxChar *)strText.wx_str(); // const_cast } // hide the page: unless it is selected, it shouldn't be shown (and if it @@ -798,7 +803,9 @@ bool wxNotebook::InsertPage(size_t nPage, // so the first panel gets the correct themed background if ( m_pages.empty() ) { +#if wxUSE_UXTHEME UpdateBgBrush(); +#endif // wxUSE_UXTHEME } // succeeded: save the pointer to the page @@ -826,13 +833,13 @@ bool wxNotebook::InsertPage(size_t nPage, // some page should be selected: either this one or the first one if there // is still no selection - int selNew = -1; + int selNew = wxNOT_FOUND; if ( bSelect ) selNew = nPage; - else if ( m_nSelection == -1 ) + else if ( m_nSelection == wxNOT_FOUND ) selNew = 0; - if ( selNew != -1 ) + if ( selNew != wxNOT_FOUND ) SetSelection(selNew); InvalidateBestSize(); @@ -908,6 +915,9 @@ void wxNotebook::OnPaint(wxPaintEvent& WXUNUSED(event)) wxBitmap bmp(rc.right, rc.bottom); memdc.SelectObject(bmp); + const wxLayoutDirection dir = dc.GetLayoutDirection(); + memdc.SetLayoutDirection(dir); + // if there is no special brush just use the solid background colour #if wxUSE_UXTHEME HBRUSH hbr = (HBRUSH)m_hbrBackground; @@ -925,7 +935,10 @@ void wxNotebook::OnPaint(wxPaintEvent& WXUNUSED(event)) MSWDefWindowProc(WM_PAINT, (WPARAM)memdc.GetHDC(), 0); - dc.Blit(0, 0, rc.right, rc.bottom, &memdc, 0, 0); + // For some reason in RTL mode, source offset has to be -1, otherwise the + // right border (physical) remains unpainted. + const wxCoord ofs = dir == wxLayout_RightToLeft ? -1 : 0; + dc.Blit(ofs, 0, rc.right, rc.bottom, &memdc, ofs, 0); } #endif // USE_NOTEBOOK_ANTIFLICKER @@ -1108,7 +1121,7 @@ void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event) { // no, it doesn't come from child, case (b) or (c): forward to a // page but only if direction is backwards (TAB) or from ourselves, - if ( m_nSelection != -1 && + if ( m_nSelection != wxNOT_FOUND && (!event.GetDirection() || isFromSelf) ) { // so that the page knows that the event comes from it's parent