int widthParent, heightParent;
wxWindow *parent = NULL;
+ wxTopLevelWindow *winTop = NULL;
if ( !(direction & wxCENTRE_ON_SCREEN) )
{
// Windows, for example, this places it completely off the screen
if ( parent )
{
- wxTopLevelWindow *winTop = wxDynamicCast(parent, wxTopLevelWindow);
+ winTop = wxDynamicCast(parent, wxTopLevelWindow);
if ( winTop && winTop->IsIconized() )
{
+ winTop = NULL;
parent = NULL;
}
}
{
if ( IsTopLevel() )
{
- // centre on the parent
- parent->GetSize(&widthParent, &heightParent);
+ if(winTop)
+ winTop->GetRectForTopLevelChildren(&posParent.x, &posParent.y, &widthParent, &heightParent);
+ else
+ {
+ // centre on the parent
+ parent->GetSize(&widthParent, &heightParent);
- // adjust to the parents position
- posParent = parent->GetPosition();
+ // adjust to the parents position
+ posParent = parent->GetPosition();
+ }
}
else
{
return (realChildCount > 0);
}
#endif
+
+void wxWindowBase::InvalidateBestSize()
+{
+ m_bestSizeCache = wxDefaultSize;
+
+ // parent's best size calculation may depend on its children's
+ // best sizes, so let's invalidate it as well to be safe:
+ if (m_parent)
+ m_parent->InvalidateBestSize();
+}
// return the size best suited for the current window
wxSize wxWindowBase::DoGetBestSize() const
}
// set the min/max size of the window
-void wxWindowBase::SetSizeHints(int minW, int minH,
- int maxW, int maxH,
- int WXUNUSED(incW), int WXUNUSED(incH))
+void wxWindowBase::DoSetSizeHints(int minW, int minH,
+ int maxW, int maxH,
+ int WXUNUSED(incW), int WXUNUSED(incH))
{
// setting min width greater than max width leads to infinite loops under
// X11 and generally doesn't make any sense, so don't allow it
if ( parent->m_inheritFgCol && !m_hasFgCol )
SetForegroundColour(parent->GetForegroundColour());
+ // inheriting (solid) background colour is wrong as it totally breaks
+ // any kind of themed backgrounds
+ //
+ // instead, the controls should use the same background as their parent
+ // (ideally by not drawing it at all)
+#if 0
if ( parent->m_inheritBgCol && !m_hasBgCol )
SetBackgroundColour(parent->GetBackgroundColour());
+#endif // 0
}
}
return false;
m_hasBgCol = colour.Ok();
+ if ( m_backgroundStyle != wxBG_STYLE_CUSTOM )
+ m_backgroundStyle = m_hasBgCol ? wxBG_STYLE_COLOUR : wxBG_STYLE_SYSTEM;
+
m_inheritBgCol = m_hasBgCol;
m_backgroundColour = colour;
SetThemeEnabled( !m_hasBgCol && !m_foregroundColour.Ok() );
// find child window by id or name
// ----------------------------------------------------------------------------
-wxWindow *wxWindowBase::FindWindow( long id )
+wxWindow *wxWindowBase::FindWindow(long id) const
{
if ( id == m_windowId )
return (wxWindow *)this;
return (wxWindow *)res;
}
-wxWindow *wxWindowBase::FindWindow( const wxString& name )
+wxWindow *wxWindowBase::FindWindow(const wxString& name) const
{
if ( name == m_windowName )
return (wxWindow *)this;
if ( event.GetText() != control->GetLabel() )
control->SetLabel(event.GetText());
}
+ }
+#endif // wxUSE_CONTROLS
+
+ if ( event.GetSetChecked() )
+ {
#if wxUSE_CHECKBOX
wxCheckBox *checkbox = wxDynamicCastThis(wxCheckBox);
if ( checkbox )
{
- if ( event.GetSetChecked() )
- checkbox->SetValue(event.GetChecked());
+ checkbox->SetValue(event.GetChecked());
}
#endif // wxUSE_CHECKBOX
wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
if ( radiobtn )
{
- if ( event.GetSetChecked() )
- radiobtn->SetValue(event.GetChecked());
+ radiobtn->SetValue(event.GetChecked());
}
#endif // wxUSE_RADIOBTN
}
-#endif
}
#if 0
wxMessageBox(wxString::Format(
_T(
- " wxWidgets Library (%s port)\nVersion %u.%u.%u%s, compiled at %s %s\n Copyright (c) 1995-2002 wxWidgets team"
+ " wxWidgets Library (%s port)\nVersion %u.%u.%u%s%s, compiled at %s %s\n Copyright (c) 1995-2004 wxWidgets team"
),
port.c_str(),
wxMAJOR_VERSION,
L" (Unicode)",
#else
"",
+#endif
+#ifdef __WXDEBUG__
+ _T(" Debug build"),
+#else
+ _T(""),
#endif
__TDATE__,
__TTIME__
wxCHECK_RET( GetParent(),
_T("MoveBefore/AfterInTabOrder() don't work for TLWs!") );
+ // detect the special case when we have nothing to do anyhow and when the
+ // code below wouldn't work
+ if ( win == this )
+ return;
+
// find the target window in the siblings list
wxWindowList& siblings = GetParent()->GetChildren();
wxWindowList::compatibility_iterator i = siblings.Find(win);
/*static*/ wxWindow* wxWindowBase::FindFocus()
{
- wxWindow *win = DoFindFocus();
+ wxWindowBase *win = DoFindFocus();
return win ? win->GetMainWindowOfCompositeControl() : NULL;
}