]> git.saurik.com Git - wxWidgets.git/blobdiff - src/ribbon/panel.cpp
Avoid id clashes
[wxWidgets.git] / src / ribbon / panel.cpp
index 68a8d216e8acd3aac6b1a28909799dc68685460f..ca0af0601e737c6e437024c19c44aac180676275 100644 (file)
@@ -8,22 +8,24 @@
 // Copyright:   (C) Peter Cawley
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
+
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
+#if wxUSE_RIBBON
+
+#include "wx/ribbon/panel.h"
 #include "wx/ribbon/art.h"
 #include "wx/ribbon/bar.h"
-#include "wx/ribbon/panel.h"
 #include "wx/dcbuffer.h"
 #include "wx/display.h"
-#include "wx/frame.h"
-
-#if wxUSE_RIBBON
+#include "wx/sizer.h"
 
 #ifndef WX_PRECOMP
+#include "wx/frame.h"
 #endif
 
 #ifdef __WXMSW__
@@ -42,7 +44,7 @@ BEGIN_EVENT_TABLE(wxRibbonPanel, wxRibbonControl)
     EVT_SIZE(wxRibbonPanel::OnSize)
 END_EVENT_TABLE()
 
-wxRibbonPanel::wxRibbonPanel()
+wxRibbonPanel::wxRibbonPanel() : m_expanded_dummy(NULL), m_expanded_panel(NULL)
 {
 }
 
@@ -246,7 +248,7 @@ void wxRibbonPanel::DoSetSize(int x, int y, int width, int height, int sizeFlags
 
         Refresh();
     }
-    
+
     wxRibbonControl::DoSetSize(x, y, width, height, sizeFlags);
 }
 
@@ -256,7 +258,7 @@ bool wxRibbonPanel::IsMinimised(wxSize at_size) const
         return false;
 
     return (at_size.GetX() <= m_minimised_size.GetX() &&
-        at_size.GetY() <= m_minimised_size.GetY()) || 
+        at_size.GetY() <= m_minimised_size.GetY()) ||
         at_size.GetX() < m_smallest_unminimised_size.GetX() ||
         at_size.GetY() < m_smallest_unminimised_size.GetY();
 }
@@ -576,15 +578,20 @@ bool wxRibbonPanel::Layout()
         return true;
     }
 
-    // TODO: Delegate to a sizer
+    // Get wxRibbonPanel client size
+    wxPoint position;
+    wxClientDC dc(this);
+    wxSize size = m_art->GetPanelClientSize(dc, this, GetSize(), &position);
 
-    // Common case of no sizer and single child taking up the entire panel
-    if(GetChildren().GetCount() == 1)
+    // If there is a sizer, use it instead
+    if ( GetSizer() )
+    {
+        GetSizer()->SetDimension(position.x, position.y, size.GetWidth(), size.GetHeight());
+    }
+    else if(GetChildren().GetCount() == 1)
     {
+        // Common case of no sizer and single child taking up the entire panel
         wxWindow* child = GetChildren().Item(0)->GetData();
-        wxPoint position;
-        wxClientDC dc(this);
-        wxSize size = m_art->GetPanelClientSize(dc, this, GetSize(), &position);
         child->SetSize(position.x, position.y, size.GetWidth(), size.GetHeight());
     }
     return true;