implement GetBestSize() (patch 1386199)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45202 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-04-01 14:53:02 +00:00
parent 523b9ce4fd
commit c0ac3149bf
2 changed files with 50 additions and 2 deletions

View File

@@ -64,8 +64,9 @@ protected:
void CopyFieldsWidth(const int widths[]);
void SetFieldsWidth();
// override base class virtual
void DoMoveWindow(int x, int y, int width, int height);
// override some base class virtuals
virtual wxSize DoGetBestSize() const;
virtual void DoMoveWindow(int x, int y, int width, int height);
private:
DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBar95)

View File

@@ -296,6 +296,53 @@ bool wxStatusBar95::GetFieldRect(int i, wxRect& rect) const
return true;
}
// no idea for a default width, just choose something
#define DEFAULT_FIELD_WIDTH 25
wxSize wxStatusBar95::DoGetBestSize() const
{
int borders[3];
SendMessage(GetHwnd(), SB_GETBORDERS, 0, (LPARAM)borders);
// calculate width
int width = 0;
for ( int i = 0; i < m_nFields; ++i )
{
int widthField = m_statusWidths ? m_statusWidths[i]
: DEFAULT_FIELD_WIDTH;
if ( widthField >= 0 )
{
width += m_statusWidths[i];
}
else
{
// variable width field, its width is really a proportion
// related to the other fields
width += -widthField*DEFAULT_FIELD_WIDTH;
}
// add the space between fields
width += borders[2];
}
if ( !width )
{
// still need something even for an empty status bar
width = 2*DEFAULT_FIELD_WIDTH;
}
// calculate height
int height;
wxGetCharSize(GetHWND(), NULL, &height, GetFont());
height = EDIT_HEIGHT_FROM_CHAR_HEIGHT(height);
height += borders[1];
wxSize best(width, height);
CacheBestSize(best);
return best;
}
void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height)
{
if ( GetParent()->IsSizeDeferred() )