]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/sizer.cpp
Update to zlib 1.2.3
[wxWidgets.git] / src / common / sizer.cpp
index e22859979b7aecc6e91481526896d66f7477a0c2..0ef04619c6d76757e5f98f6fea06367a81c1f58d 100644 (file)
@@ -388,7 +388,14 @@ void wxSizerItem::DeleteWindows()
             break;
 
         case Item_Window:
+            //We are deleting the window from this sizer - normally
+            //the window destroys the sizer associated with it,
+            //which might destroy this, which we don't want
+            m_window->SetContainingSizer(NULL);
             m_window->Destroy();
+            //Putting this after the switch will result in a spacer
+            //not being deleted properly on destruction
+            m_kind = Item_None;
             break;
 
         case Item_Sizer:
@@ -400,7 +407,6 @@ void wxSizerItem::DeleteWindows()
             wxFAIL_MSG( _T("unexpected wxSizerItem::m_kind") );
     }
 
-    m_kind = Item_None;
 }
 
 void wxSizerItem::Show( bool show )
@@ -434,7 +440,8 @@ bool wxSizerItem::IsShown() const
     switch ( m_kind )
     {
         case Item_None:
-            wxFAIL_MSG( _T("uninitialized sizer item") );
+            // we may be called from CalcMin(), just return false so that we're
+            // not used
             break;
 
         case Item_Window:
@@ -1047,23 +1054,19 @@ bool wxSizer::IsShown( size_t index ) const
 //---------------------------------------------------------------------------
 
 wxGridSizer::wxGridSizer( int rows, int cols, int vgap, int hgap )
-    : m_rows( rows )
+    : m_rows( ( cols == 0 && rows == 0 ) ? 1 : rows )
     , m_cols( cols )
     , m_vgap( vgap )
     , m_hgap( hgap )
 {
-    if (m_rows == 0 && m_cols == 0)
-        m_rows = 1;
 }
 
 wxGridSizer::wxGridSizer( int cols, int vgap, int hgap )
-    : m_rows( 0 )
+    : m_rows( cols == 0 ? 1 : 0 )
     , m_cols( cols )
     , m_vgap( vgap )
     , m_hgap( hgap )
 {
-    if (m_rows == 0 && m_cols == 0)
-        m_rows = 1;
 }
 
 int wxGridSizer::CalcRowsCols(int& nrows, int& ncols) const
@@ -1862,10 +1865,31 @@ void wxStdDialogButtonSizer::Realize()
 
         if (m_buttonAffirmative)
             Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT, 6);
+#elif defined(__WXMSW__)
+        // Windows
+
+        // right-justify buttons
+        Add(0, 0, 1, wxEXPAND, 0);
+
+        if (m_buttonAffirmative){
+            Add((wxWindow*)m_buttonAffirmative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonAffirmative->ConvertDialogToPixels(wxSize(2, 0)).x);
+        }
+
+        if (m_buttonNegative){
+            Add((wxWindow*)m_buttonNegative, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonNegative->ConvertDialogToPixels(wxSize(2, 0)).x);
+        }
+
+        if (m_buttonCancel){
+            Add((wxWindow*)m_buttonCancel, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonCancel->ConvertDialogToPixels(wxSize(2, 0)).x);
+        }
+        if (m_buttonApply)
+            Add((wxWindow*)m_buttonApply, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonApply->ConvertDialogToPixels(wxSize(2, 0)).x);
+
+        if (m_buttonHelp)
+            Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(2, 0)).x);
 #else
-    // do the same thing for GTK1 and Windows platforms
-    // and assume any platform not accounted for here will use
-    // Windows style
+        // GTK+1 and any other platform
+
         // Add(0, 0, 0, wxLEFT, 5); // Not sure what this was for but it unbalances the dialog
         if (m_buttonHelp)
             Add((wxWindow*)m_buttonHelp, 0, wxALIGN_CENTRE | wxLEFT | wxRIGHT, m_buttonHelp->ConvertDialogToPixels(wxSize(4, 0)).x);