fix tree control best size calculation: account for the images and the buttons

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43022 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2006-11-04 11:42:41 +00:00
parent e525c4ff96
commit fbf8436cb2

View File

@ -106,16 +106,14 @@ wxTreeCtrlBase::~wxTreeCtrlBase()
delete m_imageListState;
}
static void wxGetBestTreeSize(const wxTreeCtrlBase* treeCtrl, const wxTreeItemId& id, wxSize& size)
static void
wxGetBestTreeSize(const wxTreeCtrlBase* treeCtrl, wxTreeItemId id, wxSize& size)
{
wxRect rect;
if ( treeCtrl->GetBoundingRect(id, rect, true) )
if ( treeCtrl->GetBoundingRect(id, rect, true /* just the item */) )
{
if ( size.x < rect.x + rect.width )
size.x = rect.x + rect.width;
if ( size.y < rect.y + rect.height )
size.y = rect.y + rect.height;
size.IncTo(wxSize(rect.GetRight(), rect.GetBottom()));
}
wxTreeItemIdValue cookie;
@ -155,9 +153,35 @@ wxSize wxTreeCtrlBase::DoGetBestSize() const
}
}
}
else
else // use precise, if potentially slow, size computation method
{
// iterate over all items recursively
wxGetBestTreeSize(this, GetRootItem(), size);
// but the above doesn't take into account the icon items nor the tree
// "+"/"-" buttons which have about the same size
wxCoord iconWidth, iconHeight;
if ( !m_imageListNormal ||
!m_imageListNormal->GetImageCount() ||
!m_imageListNormal->GetSize(0, iconWidth, iconHeight) )
{
// FIXME: what is the default size of the tree buttons?
iconWidth =
iconHeight = 16;
}
// account for the icons if we have them
if ( m_imageListNormal )
{
// FIXME: and how to get the margin? better be large...
size.x += iconWidth + 10;
}
// and for the buttons always
if ( !HasFlag(wxTR_NO_BUTTONS) )
size.x += iconWidth;
}
// need some minimal size even for empty tree
if ( !size.x || !size.y )
size = wxControl::DoGetBestSize();