wxASSERT_MSG( GetChildren().GetCount() == 0, _T("children not destroyed") );
+ // make sure that there are no dangling pointers left pointing to us
+ wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
+ if ( panel )
+ {
+ if ( panel->GetLastFocus() == this )
+ {
+ panel->SetLastFocus((wxWindow *)NULL);
+ }
+ }
+
#if wxUSE_CARET
if ( m_caret )
delete m_caret;
int width, height;
GetSize(&width, &height);
- int new_x = -1,
- new_y = -1;
+ int xNew = -1,
+ yNew = -1;
if ( direction & wxHORIZONTAL )
- new_x = (widthParent - width)/2;
+ xNew = (widthParent - width)/2;
if ( direction & wxVERTICAL )
- new_y = (heightParent - height)/2;
+ 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 & wxCENTER_FRAME) || wxDynamicCast(this, wxControl) )
+ {
+ // adjust to the parents client area origin
+ wxPoint posParent = parent->ClientToScreen(wxPoint(0, 0));
- Move(new_x, new_y);
+ xNew += posParent.x;
+ yNew += posParent.y;
+ }
+
+ Move(xNew, yNew);
}
// fits the window around the children
int maxX = 0,
maxY = 0;
- wxWindowList::Node *node = GetChildren().GetFirst();
- while ( node )
+ for ( wxWindowList::Node *node = GetChildren().GetFirst();
+ node;
+ node = node->GetNext() )
{
wxWindow *win = node->GetData();
if ( win->IsTopLevel() )
maxX = wx + ww;
if ( wy + wh > maxY )
maxY = wy + wh;
-
- node = node->GetNext();
}
// leave a margin
if ( m_caret )
{
wxASSERT_MSG( m_caret->GetWindow() == this,
- "caret should be created associated to this window" );
+ _T("caret should be created associated to this window") );
}
}
#endif // wxUSE_CARET
{
int charWidth = GetCharWidth();
int charHeight = GetCharHeight();
- wxPoint pt2;
- pt2.x = (int) ((pt.x * 4) / charWidth) ;
- pt2.y = (int) ((pt.y * 8) / charHeight) ;
+ wxPoint pt2(-1, -1);
+ if (pt.x != -1)
+ pt2.x = (int) ((pt.x * 4) / charWidth) ;
+ if (pt.y != -1)
+ pt2.y = (int) ((pt.y * 8) / charHeight) ;
return pt2;
}
{
int charWidth = GetCharWidth();
int charHeight = GetCharHeight();
- wxPoint pt2;
- pt2.x = (int) ((pt.x * charWidth) / 4) ;
- pt2.y = (int) ((pt.y * charHeight) / 8) ;
+ wxPoint pt2(-1, -1);
+ if (pt.x != -1)
+ pt2.x = (int) ((pt.x * charWidth) / 4) ;
+ if (pt.y != -1)
+ pt2.y = (int) ((pt.y * charHeight) / 8) ;
return pt2;
}