const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED = wxNewEventType();
const int wxID_LISTBOOKLISTVIEW = wxNewId();
-BEGIN_EVENT_TABLE(wxListbook, wxBookCtrl)
+BEGIN_EVENT_TABLE(wxListbook, wxBookCtrlBase)
EVT_SIZE(wxListbook::OnSize)
EVT_LIST_ITEM_SELECTED(wxID_LISTBOOKLISTVIEW, wxListbook::OnListSelected)
END_EVENT_TABLE()
#ifdef __WXMSW__
// On XP with themes enabled the GetViewRect used in GetListSize to
// determine the space needed for the list view will incorrectly return
- // (0,0,0,0) the first time. So send a pending event so OnSize wiull be
+ // (0,0,0,0) the first time. So send a pending event so OnSize will be
// called again after the window is ready to go. Technically we don't
// need to do this on non-XP windows, but if things are already sized
// correctly then nothing changes and so there is no harm.
{
const wxSize sizeList = m_list->GetSize();
- wxRect rectPage(wxPoint(0, 0), GetClientSize());
+ wxPoint pt;
+ wxRect rectPage(pt, GetClientSize());
switch ( GetWindowStyle() & wxLB_ALIGN_MASK )
{
default:
break;
}
- m_list->Move(posList.x, posList.y);
+ // arrange the icons before calling SetClientSize(), otherwise it wouldn't
+ // account for the scrollbars the list control might need and, at least
+ // under MSW, we'd finish with an ugly looking list control with both
+ // vertical and horizontal scrollbar (with one of them being added because
+ // the other one is not accounted for in client size computations)
+ m_list->Arrange();
+ if ( m_list->GetPosition() != posList )
+ m_list->Move(posList.x, posList.y);
m_list->SetClientSize(sizeList.x, sizeList.y);
#if wxUSE_LINE_IN_LISTBOOK
if ( m_line )
{
- wxRect rectLine(wxPoint(0, 0), sizeClient);
+ wxRect rectLine(sizeClient);
switch ( GetWindowStyle() & wxLB_ALIGN_MASK )
{
wxWindow *page = m_pages[m_selection];
wxCHECK_RET( page, _T("NULL page in wxListbook?") );
page->SetSize(GetPageRect());
- }
+ }
}
wxSize wxListbook::CalcSizeFromPage(const wxSize& sizePage) const
{
m_list->SetImageList(imageList, wxIMAGE_LIST_NORMAL);
- wxBookCtrl::SetImageList(imageList);
+ wxBookCtrlBase::SetImageList(imageList);
}
// ----------------------------------------------------------------------------
bool bSelect,
int imageId)
{
- if ( !wxBookCtrl::InsertPage(n, page, text, bSelect, imageId) )
+ if ( !wxBookCtrlBase::InsertPage(n, page, text, bSelect, imageId) )
return false;
m_list->InsertItem(n, text, imageId);
// index of the selected page
if ( int(n) <= m_selection )
{
- // one extra page added
+ // one extra page added
m_selection++;
m_list->Select(m_selection);
m_list->Focus(m_selection);
wxWindow *wxListbook::DoRemovePage(size_t page)
{
const int page_count = GetPageCount();
- wxWindow *win = wxBookCtrl::DoRemovePage(page);
+ wxWindow *win = wxBookCtrlBase::DoRemovePage(page);
if ( win )
{
bool wxListbook::DeleteAllPages()
{
m_list->DeleteAllItems();
- return wxBookCtrl::DeleteAllPages();
+ return wxBookCtrlBase::DeleteAllPages();
}
// ----------------------------------------------------------------------------