]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
use of div_t.quot and div_t.rem were changed to / and %
[wxWidgets.git] / src / common / wincmn.cpp
index cd92991e22f1c9e037377a76640944d67302bf87..bf4921ff5aa0c4d41af227f5788eb625058aa29d 100644 (file)
@@ -191,6 +191,16 @@ wxWindowBase::~wxWindowBase()
 
     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;
@@ -304,16 +314,27 @@ void wxWindowBase::Centre(int direction)
     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
@@ -322,8 +343,9 @@ void wxWindowBase::Fit()
     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() )
@@ -340,8 +362,6 @@ void wxWindowBase::Fit()
             maxX = wx + ww;
         if ( wy + wh > maxY )
             maxY = wy + wh;
-
-        node = node->GetNext();
     }
 
     // leave a margin
@@ -549,7 +569,7 @@ void wxWindowBase::SetCaret(wxCaret *caret)
     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
@@ -1213,9 +1233,11 @@ wxPoint wxWindowBase::ConvertPixelsToDialog(const wxPoint& pt)
 {
     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;
 }
@@ -1224,9 +1246,11 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt)
 {
     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;
 }