bool nuiComboBox::SetRect(const nuiRect& rRect) { nuiRect rect(rRect); nuiWidget::SetRect(rect); SetTreeRect(mpChoicesTree, nuiRect(0.f, 0.f, rect.GetWidth() - (mHandleWidth + mHandleOffset), rect.GetHeight())); return true; }
void SetTreeRect(nuiTreeNode* pTree, const nuiRect& rRect) { if (pTree) { uint32 count = pTree->GetChildrenCount(); for (uint32 i = 0; i < count; i++) { nuiTreeNode* pChildNode = (nuiTreeNode*)pTree->GetChild(i); SetTreeRect(pChildNode, rRect); nuiWidget* pWidget; pWidget = pChildNode->GetElement(); if (pWidget) pWidget->SetLayout(rRect); } } }
void nuiPopupMenu::SetTreeRect(uint depth, nuiSize X, nuiSize Y, nuiTreeNode* pTree) { NGL_ASSERT(pTree); NGL_ASSERT(depth < mRects.size()); nuiWidgetPtr pWidget; nuiRect WidgetRect; nuiSize SbWidth = 0.f; X += mRects[depth]->mRect.GetWidth(); SbWidth = AdjustRectsPos(X, Y, depth, (pTree->GetElement())->GetRect()); depth++; nuiMenuRect* pRect= mRects[depth]; /// get the current menuRect pRect->mRect.Set(X, Y, pRect->mRect.GetWidth(), pRect->mRect.GetHeight()); nuiRect PopupRect(pRect->mRect); nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f; uint32 count = pTree->GetChildrenCount(); for (uint32 i = 0; i < count; i++) { nuiTreeNode* pNode = dynamic_cast<nuiTreeNode*>(pTree->GetChild(i)); NGL_ASSERT(pNode); pWidget = pNode->GetElement(); NGL_ASSERT(pWidget) WidgetRect = pWidget->GetIdealRect(); WidgetRect.Set(ToNearest(X), ToNearest(Y), ToNearest(PopupRect.GetWidth() - SbWidth - TreeHandleSize), ToNearest(WidgetRect.GetHeight())); pWidget->SetLayout(WidgetRect); if (pNode->IsOpened()) { SetTreeRect(depth, X, Y, pNode); } Y += WidgetRect.GetHeight(); } }
bool nuiPopupMenu::SetRect(const nuiRect& rRect) { nuiRect r = rRect; nuiWidget::SetRect(r); mXdir = 1; mYdir = 1; nuiSize X, Y; X = Y = 0; NGL_ASSERT(mpTree); NGL_ASSERT(!mRects.empty()); nuiMenuRect* pRect = mRects[0]; nuiWidgetPtr pWidget = mpTree->GetElement(); NGL_ASSERT(pWidget); nuiRect WidgetRect = pWidget->GetIdealRect(); nuiSize decal = AdjustPosToSize(pRect); nuiRect PopupRect(pRect->mRect); mInitialPos = pRect->mRect; WidgetRect.Set( ToNearest(pRect->mRect.Left()), ToNearest(pRect->mRect.Top() - (decal >= 0.f ? decal : 0.f)), ToNearest(pRect->mRect.GetWidth() - (decal >= 0.f ? SB_WIDTH : 0.f)), ToNearest(WidgetRect.GetHeight())); pWidget->SetLayout(WidgetRect); if (mShowFirstNode) { X = WidgetRect.Left(); Y = WidgetRect.Bottom(); } else { X = mInitialPos.Left(); Y = mInitialPos.Top() - (decal >= 0.f ? decal : 0.f); } uint32 count = mpTree->GetChildrenCount(); if (count <= 0) return true; nuiSize TreeHandleSize = pRect->mHasNonEmpty ? NUI_POPUP_TREE_HANDLE_SIZE : 0.f; for (uint32 i = 0; i < count; i++) { nuiTreeNode* pNode = dynamic_cast<nuiTreeNode*>(mpTree->GetChild(i)); NGL_ASSERT(pNode); pWidget = pNode->GetElement(); NGL_ASSERT(pWidget) WidgetRect = pWidget->GetIdealRect(); WidgetRect.Set(ToNearest(X), ToNearest(Y), ToNearest(PopupRect.GetWidth() - (decal >= 0.f ? SB_WIDTH : 0.f) - TreeHandleSize), ToNearest(WidgetRect.GetHeight())); pWidget->SetLayout(WidgetRect); if (pNode->IsOpened()) SetTreeRect(0, X, Y, pNode); Y += WidgetRect.GetHeight(); } return true; }