m_foregroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
// GRG, changed Mar/2000
-#if defined(__VISAGECPP__) && __IBMCPP__ < 0x400
- // For now VisualAge 3.0 needs it this way
- m_font = *wxSWISS_FONT; // and this?
-#else
m_font = settings.GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
-#endif
// no style bits
m_exStyle =
m_windowStyle = 0;
// centre the window with respect to its parent in either (or both) directions
void wxWindowBase::Centre(int direction)
{
+ // the position/size of the parent window or of the entire screen
+ wxPoint posParent;
int widthParent, heightParent;
- wxWindow *parent = GetParent();
- if ( !parent )
+ wxWindow *parent = NULL;
+
+ if ( !(direction & wxCENTRE_ON_SCREEN) )
{
- // no other choice
- direction |= wxCENTRE_ON_SCREEN;
+ // find the parent to centre this window on: it should be the
+ // immediate parent for the controls but the top level parent for the
+ // top level windows (like dialogs)
+ parent = GetParent();
+ if ( IsTopLevel() )
+ {
+ while ( parent && !parent->IsTopLevel() )
+ {
+ parent = parent->GetParent();
+ }
+ }
+
+ // did we find the parent?
+ if ( !parent )
+ {
+ // no other choice
+ direction |= wxCENTRE_ON_SCREEN;
+ }
}
if ( direction & wxCENTRE_ON_SCREEN )
}
else
{
- // centre inside the parents rectangle
- parent->GetClientSize(&widthParent, &heightParent);
+ if ( IsTopLevel() )
+ {
+ // centre on the parent
+ parent->GetSize(&widthParent, &heightParent);
+
+ // adjust to the parents position
+ posParent = parent->GetPosition();
+ }
+ else
+ {
+ // centre inside the parents client rectangle
+ parent->GetClientSize(&widthParent, &heightParent);
+ }
}
int width, height;
if ( direction & wxVERTICAL )
yNew = (heightParent - height)/2;
- // controls are always centered on their parent because it doesn't make
- // sense to centre them on the screen
- if ( !(direction & wxCENTRE_ON_SCREEN) || !IsTopLevel() )
- {
- // the only chance to get this is to have a not top level window
- // without parent which shouldn't happen
- wxCHECK_RET( parent, wxT("this window must have a parent") );
-
- // adjust to the parents client area origin
- wxPoint posParent = parent->ClientToScreen(wxPoint(0, 0));
-
- xNew += posParent.x;
- yNew += posParent.y;
- }
+ xNew += posParent.x;
+ yNew += posParent.y;
// move the centre of this window to this position
Move(xNew, yNew);
{
wxCHECK_RET( child, wxT("can't add a NULL child") );
+ // this should never happen and it will lead to a crash later if it does
+ // because RemoveChild() will remove only one node from the children list
+ // and the other(s) one(s) will be left with dangling pointers in them
+ wxASSERT_MSG( !GetChildren().Find(child), _T("AddChild() called twice") );
+
GetChildren().Append(child);
child->SetParent(this);
}
wxMessageBox(wxString::Format(
_T(
- " wxWindows Library (%s port)\n"
- "Version %u.%u.%u, compiled at %s %s\n"
- " Copyright (c) 1995-2000 wxWindows team"
+ " wxWindows Library (%s port)\nVersion %u.%u.%u, compiled at %s %s\n Copyright (c) 1995-2000 wxWindows team"
),
port.c_str(),
wxMAJOR_VERSION,