void Widget::SetParent( Widget::Ptr parent ) { auto cont = std::dynamic_pointer_cast<Container>( parent ); auto oldparent = m_parent.lock(); if( cont == oldparent ) { return; } if( oldparent ) { oldparent->Remove( shared_from_this() ); } m_parent = cont; auto iter = std::find( root_widgets.begin(), root_widgets.end(), this ); if( parent ) { // If this widget has a parent, it is no longer a root widget. if( iter != root_widgets.end() ) { root_widgets.erase( iter ); } SetHierarchyLevel( parent->GetHierarchyLevel() + 1 ); } else { // If this widget does not have a parent, it becomes a root widget. if( iter == root_widgets.end() ) { root_widgets.push_back( this ); } SetHierarchyLevel( 0 ); } HandleAbsolutePositionChange(); }
void Widget::SetParent( const Widget::Ptr& parent ) { Container::Ptr cont( DynamicPointerCast<Container>( parent ) ); if( !cont ) { return; } Container::Ptr oldparent = m_parent.lock(); if( oldparent ) { oldparent->Remove( shared_from_this() ); } m_parent = cont; SetHierarchyLevel( parent->GetHierarchyLevel() + 1 ); HandleAbsolutePositionChange(); }