+ Layout();
+}
+
+wxSize wxSizer::GetMinSize()
+{
+ wxSize ret( CalcMin() );
+ if (ret.x < m_minSize.x) ret.x = m_minSize.x;
+ if (ret.y < m_minSize.y) ret.y = m_minSize.y;
+ return ret;
+}
+
+void wxSizer::DoSetMinSize( int width, int height )
+{
+ m_minSize.x = width;
+ m_minSize.y = height;
+}
+
+bool wxSizer::DoSetItemMinSize( wxWindow *window, int width, int height )
+{
+ wxASSERT( window );
+
+ wxNode *node = m_children.First();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*)node->Data();
+ if (item->GetWindow() == window)
+ {
+ item->SetInitSize( width, height );
+ return TRUE;
+ }
+ node = node->Next();
+ }
+
+ node = m_children.First();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*)node->Data();
+ if (item->GetSizer())
+ {
+ // It's a sizer, so lets search recursively.
+ if (item->GetSizer()->DoSetItemMinSize( window, width, height ))
+ {
+ // A child sizer found the requested windw, exit.
+ return TRUE;
+ }
+ }
+ node = node->Next();
+ }
+
+ return FALSE;
+}
+
+bool wxSizer::DoSetItemMinSize( wxSizer *sizer, int width, int height )
+{
+ wxASSERT( sizer );
+
+ wxNode *node = m_children.First();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*)node->Data();
+ if (item->GetSizer() == sizer)
+ {
+ item->GetSizer()->DoSetMinSize( width, height );
+ return TRUE;
+ }
+ node = node->Next();
+ }
+
+ node = m_children.First();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*)node->Data();
+ if (item->GetSizer())
+ {
+ // It's a sizer, so lets search recursively.
+ if (item->GetSizer()->DoSetItemMinSize( sizer, width, height ))
+ {
+ // A child sizer found the requested windw, exit.
+ return TRUE;
+ }
+ }
+ node = node->Next();
+ }
+
+ return FALSE;
+}
+
+bool wxSizer::DoSetItemMinSize( int pos, int width, int height )
+{
+ wxNode *node = m_children.Nth( pos );
+ if (!node) return FALSE;
+
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+ if (item->GetSizer())
+ {
+ // Sizers contains the minimal size in them, if not calculated ...
+ item->GetSizer()->DoSetMinSize( width, height );
+ }
+ else
+ {
+ // ... but the minimal size of spacers and windows in stored in them
+ item->SetInitSize( width, height );
+ }
+
+ return TRUE;
+}
+
+void wxSizer::Show(wxWindow *window, bool show)
+{
+ wxNode *node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+
+ if (item->IsWindow() && item->GetWindow() == window)
+ {
+ item->Show(show);
+ window->Show(show);
+ return;
+ }
+ node = node->Next();
+ }
+}
+
+void wxSizer::Show(wxSizer *sizer, bool show)
+{
+ wxNode *node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+
+ if (item->IsSizer() && item->GetSizer() == sizer)
+ {
+ item->Show(show);
+ sizer->ShowItems(show);
+ return;
+ }
+ node = node->Next();
+ }
+}
+
+void wxSizer::ShowItems (bool show)
+{
+ wxNode *node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+
+ if (item->IsWindow())
+ item->GetWindow()->Show (show);
+ else if (item->IsSizer())
+ item->GetSizer()->ShowItems (show);
+
+ node = node->Next();
+ }
+}
+
+bool wxSizer::IsShown (wxWindow *window)
+{
+ wxNode *node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+
+ if (item->IsWindow() && item->GetWindow() == window)
+ {
+ return item->IsShown();
+ }
+ node = node->Next();
+ }
+
+ return FALSE;
+}
+
+bool wxSizer::IsShown (wxSizer *sizer)
+{
+ wxNode *node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = (wxSizerItem*) node->Data();
+
+ if (item->IsSizer() && item->GetSizer() == sizer)
+ {
+ return item->IsShown();
+ }
+ node = node->Next();
+ }
+
+ return FALSE;