X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b2bac626c3fb981dad0d3e6d04a9b16744022d6..ba8546912daa12cea8076e08f1694a03e520dfe2:/src/common/sizer.cpp?ds=inline diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index a9bcc42f04..c88d50f4ee 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -78,10 +78,29 @@ WX_DEFINE_EXPORTED_LIST( wxSizerItemList ); growablecols minsize */ + //--------------------------------------------------------------------------- // wxSizerItem //--------------------------------------------------------------------------- +void wxSizerItem::Init() +{ + m_window = NULL; + m_sizer = NULL; + m_show = true; + m_userData = NULL; + m_zoneRect = wxRect( 0, 0, 0, 0 ); +} + +void wxSizerItem::Init(const wxSizerFlags& flags) +{ + Init(); + + m_proportion = flags.GetProportion(); + m_flag = flags.GetFlags(); + m_border = flags.GetBorderInPixels(); +} + wxSizerItem::wxSizerItem( int width, int height, int proportion, int flag, int border, wxObject* userData ) : m_window( NULL ) , m_sizer( NULL ) @@ -90,6 +109,7 @@ wxSizerItem::wxSizerItem( int width, int height, int proportion, int flag, int b , m_proportion( proportion ) , m_border( border ) , m_flag( flag ) + , m_zoneRect( 0, 0, 0, 0 ) , m_show( true ) , m_userData( userData ) { @@ -102,6 +122,7 @@ wxSizerItem::wxSizerItem( wxWindow *window, int proportion, int flag, int border , m_proportion( proportion ) , m_border( border ) , m_flag( flag ) + , m_zoneRect( 0, 0, 0, 0 ) , m_show( true ) , m_userData( userData ) { @@ -121,6 +142,7 @@ wxSizerItem::wxSizerItem( wxSizer *sizer, int proportion, int flag, int border, , m_proportion( proportion ) , m_border( border ) , m_flag( flag ) + , m_zoneRect( 0, 0, 0, 0 ) , m_show( true ) , m_ratio( 0.0 ) , m_userData( userData ) @@ -130,15 +152,12 @@ wxSizerItem::wxSizerItem( wxSizer *sizer, int proportion, int flag, int border, } wxSizerItem::wxSizerItem() - : m_window( NULL ) - , m_sizer( NULL ) - , m_proportion( 0 ) - , m_border( 0 ) - , m_flag( 0 ) - , m_show( true ) - , m_ratio( 0.0 ) - , m_userData( NULL ) { + Init(); + + m_proportion = 0; + m_border = 0; + m_flag = 0; } wxSizerItem::~wxSizerItem() @@ -272,6 +291,7 @@ void wxSizerItem::SetDimension( wxPoint pos, wxSize size ) if (IsSizer()) m_sizer->SetDimension( pos.x, pos.y, size.x, size.y ); + m_zoneRect = wxRect(pos, size); if (IsWindow()) m_window->SetSize( pos.x, pos.y, size.x, size.y, wxSIZE_ALLOW_MINUS_ONE ); @@ -342,125 +362,14 @@ wxSizer::~wxSizer() WX_CLEAR_LIST(wxSizerItemList, m_children); } -void wxSizer::Add( wxWindow *window, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Append( new wxSizerItem( window, proportion, flag, border, userData ) ); - window->SetContainingSizer( this ); -} - -void wxSizer::Add( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Append( new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -void wxSizer::Add( int width, int height, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Append( new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -void wxSizer::Add( wxSizerItem *item ) -{ - m_children.Append( item ); - - if( item->GetWindow() ) - item->GetWindow()->SetContainingSizer( this ); -} - -void wxSizer::AddSpacer(int size) -{ - Add(size, size); -} - -void wxSizer::AddStretchSpacer(int prop) -{ - Add(0, 0, prop); -} - -void wxSizer::Prepend( wxWindow *window, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Insert( new wxSizerItem( window, proportion, flag, border, userData ) ); - window->SetContainingSizer( this ); -} - -void wxSizer::Prepend( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Insert( new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -void wxSizer::Prepend( int width, int height, int proportion, int flag, int border, wxObject* userData ) -{ - m_children.Insert( new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -void wxSizer::Prepend( wxSizerItem *item ) -{ - m_children.Insert( item ); - - if( item->GetWindow() ) - item->GetWindow()->SetContainingSizer( this ); -} - -void wxSizer::PrependSpacer(int size) -{ - Prepend(size, size); -} - -void wxSizer::PrependStretchSpacer(int prop) -{ - Prepend(0, 0, prop); -} - -void wxSizer::Insert( size_t index, - wxWindow *window, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - m_children.Insert( index, - new wxSizerItem( window, proportion, flag, border, userData ) ); - window->SetContainingSizer( this ); -} - -void wxSizer::Insert( size_t index, - wxSizer *sizer, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - m_children.Insert( index, - new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -void wxSizer::Insert( size_t index, - int width, - int height, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - m_children.Insert( index, - new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -void wxSizer::Insert( size_t index, wxSizerItem *item ) +wxSizerItem* wxSizer::Insert( size_t index, wxSizerItem *item ) { m_children.Insert( index, item ); if( item->GetWindow() ) item->GetWindow()->SetContainingSizer( this ); -} -void wxSizer::InsertSpacer(size_t index, int size) -{ - Insert(index, size, size); -} - -void wxSizer::InsertStretchSpacer(size_t index, int prop) -{ - Insert(index, 0, 0, prop); + return item; } bool wxSizer::Remove( wxWindow *window ) @@ -693,9 +602,9 @@ wxSize wxSizer::FitSize( wxWindow *window ) // Limit the size if sizeMax != wxDefaultSize - if ( size.x > sizeMax.x && sizeMax.x != -1 ) + if ( size.x > sizeMax.x && sizeMax.x != wxDefaultCoord ) size.x = sizeMax.x; - if ( size.y > sizeMax.y && sizeMax.y != -1 ) + if ( size.y > sizeMax.y && sizeMax.y != wxDefaultCoord ) size.y = sizeMax.y; return size; @@ -729,9 +638,9 @@ wxSize wxSizer::VirtualFitSize( wxWindow *window ) // Limit the size if sizeMax != wxDefaultSize - if ( size.x > sizeMax.x && sizeMax.x != -1 ) + if ( size.x > sizeMax.x && sizeMax.x != wxDefaultCoord ) size.x = sizeMax.x; - if ( size.y > sizeMax.y && sizeMax.y != -1 ) + if ( size.y > sizeMax.y && sizeMax.y != wxDefaultCoord ) size.y = sizeMax.y; return size; @@ -858,9 +767,9 @@ bool wxSizer::DoSetItemMinSize( size_t index, int width, int height ) return true; } -bool wxSizer::Show( wxWindow *window, bool show, bool recursive ) +wxSizerItem* wxSizer::GetItem( wxWindow *window, bool recursive ) { - wxASSERT_MSG( window, _T("Show for NULL window") ); + wxASSERT_MSG( window, _T("GetItem for NULL window") ); wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) @@ -869,58 +778,93 @@ bool wxSizer::Show( wxWindow *window, bool show, bool recursive ) if (item->GetWindow() == window) { - item->Show( show ); - - return true; + return item; } else if (recursive && item->IsSizer()) { - if (item->GetSizer()->Show(window, show, recursive)) - return true; + wxSizerItem *subitem = item->GetSizer()->GetItem( window, true ); + if (subitem) + return subitem; } node = node->GetNext(); } - return false; + return NULL; } -bool wxSizer::Show( wxSizer *sizer, bool show, bool recursive ) +wxSizerItem* wxSizer::GetItem( wxSizer *sizer, bool recursive ) { - wxASSERT_MSG( sizer, _T("Show for NULL sizer") ); + wxASSERT_MSG( sizer, _T("GetItem for NULL sizer") ); wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { - wxSizerItem *item = node->GetData(); + wxSizerItem *item = node->GetData(); if (item->GetSizer() == sizer) { - item->Show( show ); - - return true; + return item; } else if (recursive && item->IsSizer()) { - if (item->GetSizer()->Show(sizer, show, recursive)) - return true; + 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(); +} + +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) { - wxCHECK_MSG( index < m_children.GetCount(), - false, - _T("Show index is out of range") ); + wxSizerItem *item = GetItem( index ); - m_children.Item( index )->GetData()->Show( show ); + if ( item ) + { + item->Show( show ); + return true; + } - return true; + return false; } void wxSizer::ShowItems( bool show ) @@ -1449,7 +1393,7 @@ void wxBoxSizer::RecalcSizes() } wxPoint child_pos( pt ); - wxSize child_size( wxSize( size.x, height) ); + wxSize child_size( size.x, height ); if (item->GetFlag() & (wxEXPAND | wxSHAPED)) child_size.x = m_size.x; @@ -1475,7 +1419,7 @@ void wxBoxSizer::RecalcSizes() } wxPoint child_pos( pt ); - wxSize child_size( wxSize(width, size.y) ); + wxSize child_size( width, size.y ); if (item->GetFlag() & (wxEXPAND | wxSHAPED)) child_size.y = m_size.y; @@ -1645,7 +1589,7 @@ static void GetStaticBoxBorders( wxStaticBox *box, #else #ifdef __WXGTK__ - if ( box->GetLabel().IsEmpty() ) + if ( box->GetLabel().empty() ) *borderTop = 5; else #endif // __WXGTK__