use newly added GetViewRect() instead of trying to guess the list ctrl size ourselves

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23575 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-09-14 16:00:29 +00:00
parent 11ebea162a
commit 4a06b34847

View File

@@ -103,7 +103,8 @@ wxListbook::Create(wxWindow *parent,
wxID_LISTBOOKLISTVIEW, wxID_LISTBOOKLISTVIEW,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
wxLC_ICON | wxLC_SINGLE_SEL wxBORDER_NONE | wxLC_ICON | wxLC_SINGLE_SEL |
(IsVertical() ? wxLC_ALIGN_LEFT : wxLC_ALIGN_TOP)
); );
m_line = new wxStaticLine m_line = new wxStaticLine
@@ -124,53 +125,19 @@ wxListbook::Create(wxWindow *parent,
wxSize wxListbook::GetListSize() const wxSize wxListbook::GetListSize() const
{ {
const wxSize sizeClient = GetClientSize(); const wxSize sizeClient = GetClientSize(),
sizeList = m_list->GetViewRect().GetSize();
// we need to find the longest/tallest label
wxCoord widthMax = 0,
heightMax = 0;
const int count = m_list->GetItemCount();
if ( count )
{
for ( int i = 0; i < count; i++ )
{
wxRect r;
m_list->GetItemRect(i, r);
wxCoord w = r.width,
h = r.height;
if ( w > widthMax )
widthMax = w;
if ( h > heightMax )
heightMax = h;
}
}
wxSize size; wxSize size;
if ( IsVertical() ) if ( IsVertical() )
{ {
size.x = sizeClient.x; size.x = sizeClient.x;
size.y = heightMax; size.y = sizeList.y;
if ( widthMax >= sizeClient.x )
{
// account for the scrollbar
size.y += wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y);
}
} }
else // left/right aligned else // left/right aligned
{ {
// +20 is due to an apparent bug in wxListCtrl::GetItemRect() but I size.x = sizeList.x;
// can't fix it there right now so just add a fudge here...
size.x = widthMax + 20;
size.y = sizeClient.y; size.y = sizeClient.y;
if ( heightMax >= sizeClient.y )
{
// account for the scrollbar
size.x += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
}
} }
return size; return size;