Beispiel #1
0
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;
}
Beispiel #2
0
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);
    }
  }
}
Beispiel #3
0
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();
  }
}
Beispiel #4
0
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;
}