| 404 | } |
| 405 | |
| 406 | bool Object::removeChild( Object* child ) |
| 407 | { |
| 408 | assert( child ); |
| 409 | if ( !child ) |
| 410 | return false; |
| 411 | |
| 412 | auto oldParent = child->parent(); |
| 413 | if ( oldParent != this ) |
| 414 | return false; |
| 415 | |
| 416 | child->parent_ = nullptr; |
| 417 | needRedraw_ = true; |
| 418 | |
| 419 | auto it = std::remove_if( children_.begin(), children_.end(), [child]( const std::shared_ptr<Object>& obj ) |
| 420 | { |
| 421 | return !obj || obj.get() == child; |
| 422 | } ); |
| 423 | if ( it != children_.end() ) |
| 424 | { |
| 425 | children_.erase( it, children_.end() ); |
| 426 | return true; |
| 427 | } |
| 428 | |
| 429 | auto bit = std::remove_if( bastards_.begin(), bastards_.end(), [child]( const std::weak_ptr<Object>& wobj ) |
| 430 | { |
| 431 | auto obj = wobj.lock(); |
| 432 | return !obj || obj.get() == child; |
| 433 | } ); |
| 434 | assert( bit != bastards_.end() ); |
| 435 | bastards_.erase( bit, bastards_.end() ); |
| 436 | |
| 437 | return true; |
| 438 | } |
| 439 | |
| 440 | void Object::removeAllChildren() |
| 441 | { |