void wxNotebook::Init()
{
m_imageList = NULL;
- m_nSelection = -1;
+ m_nSelection = wxNOT_FOUND;
#if wxUSE_UXTHEME
m_hbrBackground = NULL;
}
#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
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);
}
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);
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;
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)
if ( imageList )
{
- (void) TabCtrl_SetImageList(GetHwnd(), (HIMAGELIST)imageList->GetHIMAGELIST());
+ (void) TabCtrl_SetImageList(GetHwnd(), GetHimagelistOf(imageList));
}
}
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
// m_nSelection must be always valid so reset it before calling
// SetSelection()
- m_nSelection = -1;
+ m_nSelection = wxNOT_FOUND;
SetSelection(selNew);
}
else
TabCtrl_DeleteAllItems(GetHwnd());
- m_nSelection = -1;
+ m_nSelection = wxNOT_FOUND;
InvalidateBestSize();
return true;
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
// 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
// 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();
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;
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
{
// 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