コード例 #1
0
void UIHierarchy::AddBefore(UIHierarchyNode *forParent)
{
    UIHierarchyNode *checkNode = NULL;
    if (!iheritanceQueue.empty()) 
    {
        checkNode = *(iheritanceQueue.begin());
        iheritanceQueue.pop_front();
    }
    for (List<UIHierarchyNode *>::reverse_iterator it = forParent->children.rbegin(); it != forParent->children.rend(); it++) 
    {
        if (checkNode) 
        {
            if ((*it) == checkNode)
            {
                checkNode = NULL;
                if ((*it)->isOpen && !iheritanceQueue.empty())
                {
                    AddBefore((*it));
                    if(addPos + (int32)scrollContainer->relativePosition.y + cellHeight <= -size.y)
                    {
                        return;
                    }
                    if(addPos + (int32)scrollContainer->relativePosition.y <= size.y * 2)
                    {
                        AddCellAtPos(delegate->CellForNode(this, (*it)->userNode), addPos, cellHeight, (*it));
                    }
                    addPos -= cellHeight;
                }
            }
        }
        else 
        {
            if(addPos + (int32)scrollContainer->relativePosition.y + cellHeight <= -size.y)
            {
                return;
            }
            if ((*it)->isOpen) 
            {
                AddBefore((*it));
                if(addPos + (int32)scrollContainer->relativePosition.y + cellHeight <= -size.y)
                {
                    return;
                }
            }
            if(addPos + (int32)scrollContainer->relativePosition.y <= size.y * 2)
            {
                AddCellAtPos(delegate->CellForNode(this, (*it)->userNode), addPos, cellHeight, (*it));
            }
            addPos -= cellHeight;
        }
    }
}
コード例 #2
0
ファイル: Tree.cpp プロジェクト: dblock/baseclasses
CTreeElement<T> * CTree<T>::Add(CTreeElement<T> * Node, const T& Element, bool * Added) {
	if (Added) (* Added) = true;
	if (!Node) Node = m_Head;
	if (!Node) {
          m_Head = new CTreeElement<T>(Element);          
          return m_Head;
        }
	/* hack: try to add to parent's last element */
	if (Node->m_Parent) {
		if (m_Sorted) {
			if (Greater(Element, Node->m_Parent->m_LastChild->m_Element)) {
				return AddAfter(Node->m_Parent->m_LastChild, Element);
			} else if (m_Unique && (Equal(Node->m_Parent->m_LastChild->m_Element, Element))) {
				if (Added) (* Added) = false;
				return Node->m_Parent->m_LastChild;
			}
		}
		Node = Node->m_Parent->m_Child;
	} else Node = m_Head;
	/* classic insertion */
	while(1) {
		if (m_Unique && Equal(Node->m_Element, Element)) {
			if (Added) (* Added) = false;
			return Node;
		} else if (m_Sorted && (Greater(Node->m_Element, Element))) return AddBefore(Node, Element);
		if (Node->m_Next) Node = Node->m_Next;
		else break;
	}
	return AddAfter(Node, Element);
}
コード例 #3
0
ファイル: Tree.cpp プロジェクト: dblock/baseclasses
CTreeElement<T> * CTree<T>::AddChild(CTreeElement<T> * Node, const T& Element, bool * Added) {
	if (Added) (* Added) = true;
	if (!Node) Node = m_Head;
	if (!Node) {
          m_Head = new CTreeElement<T>(Element);          
          return m_Head;
        }
	/* hack: check the last element first */
	if (m_Sorted && Node->m_LastChild) {          
		if (Greater(Element, Node->m_LastChild->m_Element)) {
			return AddAfter(Node->m_LastChild, Element);
		} else if (m_Unique && (Equal(Node->m_LastChild->m_Element, Element))) {
			if (Added) (* Added) = false;
			return Node->m_LastChild;
		}
	}
	/* classic add to the tree */
	CTreeElement<T> * Current = Node->m_Child;
	if (!Current) return AddChildFirst(Node, Element);
	while(1) {
		if (m_Unique && Equal(Current->m_Element, Element)) {
			if (Added) (* Added) = false;
			return Current;
		} else if (m_Sorted && (Greater(Current->m_Element, Element))) {
			return AddBefore(Current, Element);
		}
		if (Current->m_Next) Current = Current->m_Next;
		else break;
	}
	return AddAfter(Current, Element);
}
コード例 #4
0
void UIHierarchy::AddCellsBefore(UIHierarchyNode *beforeNode)
{
    iheritanceQueue.clear();
    UIHierarchyNode *nd = beforeNode;
    while (nd != baseNode)
    {
        iheritanceQueue.push_front(nd);
        nd = nd->parent;
    }
    
    AddBefore(baseNode);
}