void nuiComboBox::SetTree(nuiTreeNode* pTree) { if (mpChoicesTree == pTree) return; // if (mpSelected) // { // mpSelected->Release(); // nuiWidgetPtr pWidget = mpSelected->GetElement(); // NGL_ASSERT(pWidget); // DelChild(pWidget); // } // if (mpOldSelected) // mpOldSelected->Release(); if (mpChoicesTree) mpChoicesTree->Release(); mpSelected = NULL; mpOldSelected = NULL; mpChoicesTree = pTree; if (mpChoicesTree) mpChoicesTree->Acquire(); ReparentTree(mpChoicesTree); InvalidateLayout(); }
void nuiComboBox::ReparentTree(nuiTreeNode* pTree) { NGL_ASSERT(pTree); nuiWidgetPtr pWidget = pTree->GetElement(); NGL_ASSERT(pWidget); pWidget->SetLayout(nuiRect(0.f,0.f, GetRect().GetWidth()-mHandleWidth, GetRect().GetHeight())); if (pWidget->GetParent() != this) { AddChild(pWidget); pWidget->InvalidateLayout(); } if (GetSelectedWidget() == pWidget) { if (!pWidget->IsVisible()) pWidget->SetVisible(true); } else { if (pWidget->IsVisible()) pWidget->SetVisible(false); } uint32 count = pTree->GetChildrenCount(); for (uint32 i = 0; i < count; i++) { nuiTreeNode* pNode = dynamic_cast<nuiTreeNode*>(pTree->GetChild(i)); NGL_ASSERT(pNode); ReparentTree(pNode); } }
void nuiComboBox::SetSelected(const nuiTreeNode* pSelection) { // if (pSelection) // pSelection->Acquire(); // if (mpSelected) // mpSelected->Release(); mpSelected = const_cast<nuiTreeNode*>(pSelection); ReparentTree(mpChoicesTree); SelectionChanged(); InvalidateLayout(); }
nuiPopupMenu::nuiPopupMenu(nuiWidget* pParent, nuiTreeNodePtr pTree, const nuiRect& rRect, bool OwnTree) : nuiSimpleContainer(), mPopupTreeSink(this), mpSelectedNode(NULL), mpNewSelectedNode(NULL), mOwnTree(OwnTree), mSelectionTimer(nglTime(TIMER_PERIOD)), mScrollTimer(1.0f/15.0f), mDelayTime(DELAY_TIME), mpOldFocused(NULL) { mTrashRemoval = false; SetObjectClass(_T("nuiPopupMenu")); nuiRect r = rRect; nuiTopLevel* pTop = NULL; if (pParent) pTop = pParent->GetTopLevel(); if (pTop) pTop->AddChild(this); mpTree = pTree; mpTree->Acquire(); ReparentTree(mpTree); mSelectedNodes.push_back(mpTree); mXdir = 1; mYdir = 1; if (pParent) pParent->LocalToGlobal(r); mInitialPos = r; mScrollUp = false; mPopupTreeSink.Connect(mScrollTimer.Tick, &nuiPopupMenu::OnScrollTimer); mPopupTreeSink.Connect(mSelectionTimer.Tick, &nuiPopupMenu::OnSelectionTimer); mScrolledFromKeyboard = false; mShowFirstNode = true; mWheelMoved = false; mFirstClick = false; //nuiTopLevel* pTopLevel = GetTopLevel(); //if (pTopLevel) //mpOldFocused = pTopLevel->GetFocus(); SetWantKeyboardFocus(true); Focus(); // Grab(); }
nuiComboBox::nuiComboBox(nuiTreeNode* pChoicesTree, bool ownTree) : nuiSimpleContainer(), mpChoicesTree(pChoicesTree), mpSelected(NULL), mpOldSelected(NULL), mHandleWidth(DEFAULT_HANDLE_WIDTH), mHandleHeight(DEFAULT_HANDLE_HEIGHT), mHandleOffset(DEFAULT_HANDLE_OFFSET), mComboBoxEvents(this) { SetObjectClass(_T("nuiComboBox")); if (mpChoicesTree) mpChoicesTree->Acquire(); ReparentTree(mpChoicesTree); SetWantKeyboardFocus(true); }
void nuiPopupMenu::ReparentTree(nuiTreeNode* pTree) { NGL_ASSERT(pTree); nuiWidgetPtr pWidget = pTree->GetElement(); NGL_ASSERT(pWidget); AddChild(pWidget); if (mOwnTree) pTree->SetOwnElement(false); uint32 count = pTree->GetChildrenCount(); for (uint32 i = 0; i < count; i++) { nuiTreeNode* pNode = dynamic_cast<nuiTreeNode*>(pTree->GetChild(i)); NGL_ASSERT(pNode); ReparentTree(pNode); } NGL_ASSERT(mpTree); mPopupTreeSink.Connect(pTree->Changed, &nuiPopupMenu::OnTreeChanged); mPopupTreeSink.Connect(pTree->ChildAdded, &nuiPopupMenu::OnTreeChildAdded); mPopupTreeSink.Connect(pTree->ChildDeleted, &nuiPopupMenu::OnTreeChildDeleted); }