// fits the window around the children
void wxWindowBase::Fit()
{
- if ( !GetChildren().empty() )
- {
- SetSize(GetBestSize());
- }
- //else: do nothing if we have no children
+ SetSize(GetBestSize());
}
// fits virtual size (ie. scrolled area etc.) around children
void wxWindowBase::FitInside()
{
- if ( GetChildren().GetCount() > 0 )
- {
- SetVirtualSize( GetBestVirtualSize() );
- }
+ SetVirtualSize( GetBestVirtualSize() );
}
// On Mac, scrollbars are explicitly children.
wxWindow *win = node->GetData();
if ( !win->IsTopLevel() && win->IsShown()
#if wxUSE_SCROLLBAR
- && !win->IsKindOf(CLASSINFO(wxScrollBar))
+ && !wxDynamicCast(win, wxScrollBar)
#endif
)
realChildCount ++;
// it to be used
wxSize size = DoGetBestClientSize();
if ( size != wxDefaultSize )
- {
size += DoGetBorderSize();
+ else
+ size = DoGetBestSize();
- CacheBestSize(size);
- return size;
- }
+ // Ensure that the best size is at least as large as min size.
+ size.IncTo(GetMinSize());
+
+ // And not larger than max size.
+ size.DecToIfSpecified(GetMaxSize());
- return DoGetBestSize();
+ // Finally cache result and return.
+ CacheBestSize(size);
+ return size;
+}
+
+int wxWindowBase::GetBestHeight(int width) const
+{
+ const int height = DoGetBestClientHeight(width);
+
+ return height == wxDefaultCoord
+ ? GetBestSize().y
+ : height + DoGetBorderSize().y;
+}
+
+int wxWindowBase::GetBestWidth(int height) const
+{
+ const int width = DoGetBestClientWidth(height);
+
+ return width == wxDefaultCoord
+ ? GetBestSize().x
+ : width + DoGetBorderSize().x;
}
void wxWindowBase::SetMinSize(const wxSize& minSize)
{
m_minWidth = minSize.x;
m_minHeight = minSize.y;
+
+ InvalidateBestSize();
}
void wxWindowBase::SetMaxSize(const wxSize& maxSize)
{
m_maxWidth = maxSize.x;
m_maxHeight = maxSize.y;
+
+ InvalidateBestSize();
}
void wxWindowBase::SetInitialSize(const wxSize& size)
// Iterate until we find this window in the parent chain or exhaust it.
while ( win )
{
- wxWindow* const parent = win->GetParent();
- if ( parent == this )
+ if ( win == this )
return true;
// Stop iterating on reaching the top level window boundary.
- if ( parent->IsTopLevel() )
+ if ( win->IsTopLevel() )
break;
- win = parent;
+ win = win->GetParent();
}
return false;
"the first handler of the wxWindow stack should have non-NULL next handler" );
firstHandler->SetNextHandler(NULL);
- secondHandler->SetPreviousHandler(NULL);
+
+ // It is harmless but useless to unset the previous handler of the window
+ // itself as it's always NULL anyhow, so don't do this.
+ if ( secondHandler != this )
+ secondHandler->SetPreviousHandler(NULL);
// now firstHandler is completely unlinked; set secondHandler as the new window event handler
SetEventHandler(secondHandler);
{
const wxWindowBase * const parent = wxGetTopLevelParent((wxWindow*)this);
+ wxCHECK_MSG( parent, wxDefaultSize, wxS("Must have TLW parent") );
+
if ( !parent->m_font.IsOk() )
{
// Default GUI font is used. This is the most common case, so
if (win)
{
rect = win->GetRect();
- if (win->GetParent() && !win->IsKindOf(CLASSINFO(wxTopLevelWindow)))
+ if (win->GetParent() && !wxDynamicCast(win, wxTopLevelWindow))
rect.SetPosition(win->GetParent()->ClientToScreen(rect.GetPosition()));
return wxACC_OK;
}
// accessible classes, one for each kind of wxWidgets
// control or window.
#if wxUSE_BUTTON
- if (GetWindow()->IsKindOf(CLASSINFO(wxButton)))
+ if (wxDynamicCast(GetWindow(), wxButton))
title = ((wxButton*) GetWindow())->GetLabel();
else
#endif
if (childId > 0)
return wxACC_NOT_IMPLEMENTED;
- if (GetWindow()->IsKindOf(CLASSINFO(wxControl)))
+ if (wxDynamicCast(GetWindow(), wxControl))
return wxACC_NOT_IMPLEMENTED;
#if wxUSE_STATUSBAR
- if (GetWindow()->IsKindOf(CLASSINFO(wxStatusBar)))
+ if (wxDynamicCast(GetWindow(), wxStatusBar))
return wxACC_NOT_IMPLEMENTED;
#endif
#if wxUSE_TOOLBAR
- if (GetWindow()->IsKindOf(CLASSINFO(wxToolBar)))
+ if (wxDynamicCast(GetWindow(), wxToolBar))
return wxACC_NOT_IMPLEMENTED;
#endif
if (childId > 0)
return wxACC_NOT_IMPLEMENTED;
- if (GetWindow()->IsKindOf(CLASSINFO(wxControl)))
+ if (wxDynamicCast(GetWindow(), wxControl))
return wxACC_NOT_IMPLEMENTED;
#if wxUSE_STATUSBAR
- if (GetWindow()->IsKindOf(CLASSINFO(wxStatusBar)))
+ if (wxDynamicCast(GetWindow(), wxStatusBar))
return wxACC_NOT_IMPLEMENTED;
#endif
#if wxUSE_TOOLBAR
- if (GetWindow()->IsKindOf(CLASSINFO(wxToolBar)))
+ if (wxDynamicCast(GetWindow(), wxToolBar))
return wxACC_NOT_IMPLEMENTED;
#endif