void UIWidget::addChild(const UIWidgetPtr& child) { if(!child) { g_logger.traceWarning("attempt to add a null child into a UIWidget"); return; } if(child->isDestroyed()) { g_logger.traceWarning("attemp to add a destroyed child into a UIWidget"); return; } if(hasChild(child)) { g_logger.traceWarning("attempt to add a child again into a UIWidget"); return; } UIWidgetPtr oldLastChild = getLastChild(); m_children.push_back(child); child->setParent(static_self_cast<UIWidget>()); // create default layout if(!m_layout) m_layout = UIAnchorLayoutPtr(new UIAnchorLayout(static_self_cast<UIWidget>())); // add to layout and updates it m_layout->addWidget(child); // update new child states child->updateStates(); // update old child index states if(oldLastChild) { oldLastChild->updateState(Fw::MiddleState); oldLastChild->updateState(Fw::LastState); } g_ui.onWidgetAppear(child); }