+wxSizerItem* wxSizer::GetItem( wxSizer *sizer, bool recursive )
+{
+ wxASSERT_MSG( sizer, _T("GetItem for NULL sizer") );
+
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = node->GetData();
+
+ if (item->GetSizer() == sizer)
+ {
+ return item;
+ }
+ else if (recursive && item->IsSizer())
+ {
+ wxSizerItem *subitem = item->GetSizer()->GetItem( sizer, true );
+ if (subitem)
+ return subitem;
+ }
+
+ node = node->GetNext();
+ }
+
+ return NULL;
+}
+
+wxSizerItem* wxSizer::GetItem( size_t index )
+{
+ wxCHECK_MSG( index < m_children.GetCount(),
+ NULL,
+ _T("GetItem index is out of range") );
+
+ return m_children.Item( index )->GetData();
+}
+
+wxSizerItem* wxSizer::GetItemById( int id, bool recursive )
+{
+ // This gets a sizer item by the id of the sizer item
+ // and NOT the id of a window if the item is a window.
+
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = node->GetData();
+
+ if (item->GetId() == id)
+ {
+ return item;
+ }
+ else if (recursive && item->IsSizer())
+ {
+ wxSizerItem *subitem = item->GetSizer()->GetItemById( id, true );
+ if (subitem)
+ return subitem;
+ }
+
+ node = node->GetNext();
+ }
+
+ return NULL;
+}
+
+bool wxSizer::Show( wxWindow *window, bool show, bool recursive )
+{
+ wxSizerItem *item = GetItem( window, recursive );
+
+ if ( item )
+ {
+ item->Show( show );
+ return true;
+ }
+
+ return false;
+}
+
+bool wxSizer::Show( wxSizer *sizer, bool show, bool recursive )
+{
+ wxSizerItem *item = GetItem( sizer, recursive );
+
+ if ( item )
+ {
+ item->Show( show );
+ return true;
+ }
+
+ return false;
+}
+
+bool wxSizer::Show( size_t index, bool show)
+{
+ wxSizerItem *item = GetItem( index );
+
+ if ( item )
+ {
+ item->Show( show );
+ return true;
+ }
+
+ return false;
+}
+
+void wxSizer::ShowItems( bool show )
+{
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ node->GetData()->Show( show );
+ node = node->GetNext();
+ }
+}
+
+bool wxSizer::IsShown( wxWindow *window ) const
+{
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = node->GetData();
+
+ if (item->GetWindow() == window)
+ {
+ return item->IsShown();
+ }
+ node = node->GetNext();
+ }
+
+ wxFAIL_MSG( _T("IsShown failed to find sizer item") );
+
+ return false;
+}
+
+bool wxSizer::IsShown( wxSizer *sizer ) const
+{
+ wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
+ while (node)
+ {
+ wxSizerItem *item = node->GetData();
+
+ if (item->GetSizer() == sizer)
+ {
+ return item->IsShown();
+ }
+ node = node->GetNext();
+ }
+
+ wxFAIL_MSG( _T("IsShown failed to find sizer item") );
+
+ return false;
+}
+
+bool wxSizer::IsShown( size_t index ) const
+{
+ wxCHECK_MSG( index < m_children.GetCount(),
+ false,
+ _T("IsShown index is out of range") );
+
+ return m_children.Item( index )->GetData()->IsShown();
+}
+
+