CTreeNode* CTreeBuilder::TraverseTree(CTreeNode* parent, string nodePath, CTreeNode* pTempNode)
{
	CTreeNode* n = NULL; 

	if (parent != NULL) 
	{
		if ( parent->GetParent() == NULL && parent->GetNodePath() == nodePath)
		{
			pTempNode = parent; 
		}
		else if(!parent->IsLeaf()) 
		{
			for (n = parent->GetChild(); n != NULL; n = n->GetSibling()) 
			{
				if(nodePath==n->GetNodePath())
				{
					pTempNode=n;
					return n;
				}
				if (pTempNode==NULL && ! n->IsLeaf()) 
				{
					pTempNode=TraverseTree(n, nodePath,pTempNode);
				}
			} 
		} 
	}
	return pTempNode; //parent;
}
Exemple #2
0
CTreeNode* CTreeWnd::AddNode(LPCTSTR name,CTreeNode* pParent,short it /* = itDefault */)
{
	if (!m_pTree)
		return NULL;

	mtNode* mtParent = pParent ? pParent->getmtNode() : NULL;

	mtNode* pNode = m_pTree->newItem(name,mtParent);
	if (pNode)
	{
		CTreeNode* pTreeNode = new CTreeNode();
		pTreeNode->setTree(this);
		pNode->setData((unsigned long)pTreeNode);
		pTreeNode->setmtNode(pNode);

		pTreeNode->setIconType(	it );

        //ForceLayout();
        //Invalidate();

		return pTreeNode;
	}
	else
		return NULL;
}
Exemple #3
0
bool CTree::MouseDoubleClicked(int code, int mx, int my)
{
	if (CPanel::MouseDoubleClicked(code, mx, my))
		return true;

	m_iSelected = ~0;
	for (size_t i = 0; i < m_ahAllNodes.size(); i++)
	{
		CBaseControl* pNode = m_ahAllNodes[i];

		if (!pNode->IsVisible())
			continue;

		float x, y, w, h;
		pNode->GetAbsDimensions(x, y, w, h);

		if (mx >= x && my >= y && mx < x+w && my < y+h)
		{
			m_iSelected = i;
			CTreeNode* pTreeNode = dynamic_cast<CTreeNode*>(pNode);
			pTreeNode->Selected();

			if (m_pfnConfirmedCallback)
				m_pfnConfirmedCallback(m_pConfirmedListener, sprintf("%d", GetSelectedNodeId()));

			return true;
		}
	}

	return false;
}
Exemple #4
0
bool CTree::MousePressed(int code, int mx, int my)
{
	m_bMouseDown = true;
	m_iMouseDownX = mx;
	m_iMouseDownY = my;

	if (CPanel::MousePressed(code, mx, my))
		return true;

	m_iSelected = ~0;
	for (size_t i = 0; i < m_ahAllNodes.size(); i++)
	{
		CBaseControl* pNode = m_ahAllNodes[i];

		if (!pNode->IsVisible())
			continue;

		float x, y, w, h;
		pNode->GetAbsDimensions(x, y, w, h);

		if (mx >= x && my >= y && mx < x+w && my < y+h)
		{
			m_iSelected = i;
			CTreeNode* pTreeNode = dynamic_cast<CTreeNode*>(pNode);
			pTreeNode->Selected();
			return true;
		}
	}

	if (m_pSelectedListener)
		m_pfnSelectedCallback(m_pSelectedListener, "-1");

	return false;
}
Exemple #5
0
    ETreeTraverseCode
    operator()(CTreeNode<CBDB_QueryNode>& tr, int delta)
    {
        CBDB_QueryNode& qnode = tr.GetValue();
        if (delta == 0 || delta == 1) {
            // If node has children, we skip it and process on the way back
            if (!tr.IsLeaf())
                return eTreeTraverse;
        }
        if (qnode.GetType() == CBDB_QueryNode::eDBField)
                return eTreeTraverse;

        if (qnode.HasValue()) {
            string& fvalue = qnode.GetValue();
            int len = fvalue.length();
            // if string value is in apostrophe marks: remove it
            if (fvalue[0] == '\'' && fvalue[len-1] == '\'') {
                len -= 2;
                if (len) {
                    qnode.SetValue(fvalue.substr(1, len));
                } else {
                    qnode.SetValue(kEmptyStr);
                }
            } else {
                CBDB_File::TUnifiedFieldIndex fidx = m_File.GetFieldIdx(fvalue);
                if (fidx) {
                    qnode.SetField(fidx);
                }
            }
        }
        return eTreeTraverse;
    }
Exemple #6
0
void CSoliDire::insert_file(CString filename)
{
	CFile f(filename, CFile::modeRead);

	if (f)
	{
		CInode tmp(f.GetFilePath(), 0, f.GetLength());

		if (!m_DirTree->m_pRoot)
		{
			m_DirTree->m_pRoot = new CTreeNode;
			m_DirTree->m_pRoot->set_inode(tmp);
		}
		else
		{
			CTreeNode * p = m_DirTree->m_pRoot;
			while (p->has_rchild())
				p = p->get_rchild();
			p->new_rchild(tmp);
		}
	
		SetModifiedFlag(TRUE);
		f.Close();
	}
}
Exemple #7
0
long CTreeWnd::GetScrollExtent(int nBar)
{
    int extent = 0;
    if (nBar == SB_HORZ)
    {
        for (int i = 0; i < m_pHeader->GetNumPanes(); i++)
        {
            extent	+= m_pHeader->GetPaneWidth(i);
        }
    }
    else if (nBar == SB_VERT)
    {
        // vertical scroll size is total height of all expanded nodes...
		CTreeNode* pNode = GetRootNode();
        if (pNode && (!(m_style & MTS_SHOWROOT)))
            pNode = pNode->FirstChild();
        
		bool done = false;
		while (pNode && !done)
        {
			//extent += DEF_NODE_HEIGHT;
			extent++;

			CTreeNode* pNext = pNode->NextNode();
			if (pNext == pNode)
				done = true;
			else
				pNode = pNext;
        }
    }

	return extent;
}
Exemple #8
0
void CTreeWnd::SetFirstVisibleNode()
{
	m_firstVisibleIdx = 0;

	int index = GetScrollPos32(SB_VERT);

    CTreeNode* pNode = GetRootNode();
	if (!pNode)
		return;

	if (!(m_style & MTS_SHOWROOT))
		pNode = pNode->FirstChild();

	m_firstVisible = pNode;

	int pos = 0;
	while (pNode && pos < index)
	{
		pos ++;//= DEF_NODE_HEIGHT;
		pNode = pNode->NextNode();
		if (pNode)
		{
			m_firstVisible = pNode;
			m_firstVisibleIdx++;
		}
	}
}
Exemple #9
0
unsigned int CTreeNode::GetDepth() const
{
	CTreeNode * parent = GetParentNode();
	if (parent)
		return parent->GetDepth() + 1;
	return 0;
}
CTreeNode* CTreeBuilder::BuildNode(NodeDetails nodeDetails)
{
	CTreeNode* tempNode = new CTreeNode(); 
	tempNode->SetNodeName(nodeDetails.name); 
	tempNode->SetNodeValue(nodeDetails.value); 
	tempNode->SetType(nodeDetails.type); 
	return tempNode;
}
string CTreeBuilder::GetAsString(string sSectionPath, string sDefaultValue)
{
	string sNodeValue = sDefaultValue; 
	CTreeNode* pCurrentNode = NodeFind(sSectionPath); 
	if ( pCurrentNode!= NULL)
	{
		sNodeValue = pCurrentNode->GetNodeValue(); 
	}
	return sNodeValue;
}
Exemple #12
0
bool RefreshChildren(const std::_tstring & qualifiedLabel, CTreeNode * startingNode)
{
	CTreeNode * found = Locate(qualifiedLabel, startingNode, 0);
	if (found)
	{
		found->Expand(TVE_COLLAPSE | TVE_COLLAPSERESET);
		found->Expand();
		return true;
	}
	return false;
}
float CTreeBuilder::GetAsFloat(string sSectionPath, float fDefaultValue)
{
	string sNodeValue;
	float fNodeValue = fDefaultValue; 
	CTreeNode* pCurrentNode = NodeFind(sSectionPath); 
	if ( pCurrentNode!= NULL)
	{
		sNodeValue = pCurrentNode->GetNodeValue(); 
	}
	from_string<float>(fNodeValue , sNodeValue, fixed);
	return fNodeValue ;
}
Exemple #14
0
CControlHandle CTree::AddControl(CBaseControl* pControl, bool bToTail)
{
	CControlHandle hControl = BaseClass::AddControl(pControl, bToTail);

	if (pControl != m_hVerticalScrollBar && pControl != m_hHorizontalScrollBar)
	{
		CTreeNode* pTreeNode = dynamic_cast<CTreeNode*>(pControl);
		if (pTreeNode)
			m_ahAllNodes.push_back(CControl<CTreeNode>(pTreeNode->GetHandle()));
	}

	return hControl;
}
Exemple #15
0
bool Select(const std::_tstring & qualifiedLabel, CTreeNode * startingNode, bool bExpand)
{
	CTreeNode * found = Locate(qualifiedLabel, startingNode, 0);
	if (found)
	{
		found->Select();
		if (bExpand)
			found->Expand();
		found->EnsureVisible();
		return true;
	}
	return false;
}
int CTreeBuilder::GetAsInt(string sSectionPath, int iDefaultValue)
{
	string sNodeValue;
	int iNodeValue = iDefaultValue; 
	CTreeNode* pCurrentNode = NodeFind(sSectionPath); 
	if ( pCurrentNode!= NULL)
	{
		sNodeValue = pCurrentNode->GetNodeValue(); 
	}

	from_string<int>(iNodeValue, sNodeValue, dec);
	return iNodeValue;
}
Exemple #17
0
CTreeNode* CTreeWnd::HitTestExpandBox(CPoint pt)
{
	vector<CShape*>::iterator pos;
	for (pos = m_shapes.begin(); pos != m_shapes.end(); ++pos)
	{
		CShape *pShape = *pos;
        CTreeNode* pNode = NodeFromShape(pShape);

        if (pNode && pNode->HitExpandBox(pt))
        {
            return pNode;
        }
	}
    return NULL;
}
Exemple #18
0
int GetNodeIndex(CTreeNode *node)
{
	int index = 0;
	CTreeNode *parent = node->GetParentNode();
	if ( parent )
	{
		for (WTL::CTreeItem ti = parent->GetChild(); ti != NULL; ti = ti.GetNextSibling())
		{
			if ( ti == *node )
				return index;
			index++;
		}
	}
	return -1;
}
Exemple #19
0
    void Eval(CTreeNode<CBDB_QueryNode>& tr)
    {
        int cmpres = CmpEval(tr);

        bool res = cmpres <= 0;
        SetResult(tr.GetValue(), res);
    }
Exemple #20
0
CTreeNode* CTreeWnd::NodeFromMTNode(mtNode* pNode)
{
	if (!pNode)
		return NULL;

	long data2 = pNode->getData2();
	if (data2 == 0)
	{
		CTreeNode* pTreeNode = new CTreeNode();
		pTreeNode->setTree(this);
		pTreeNode->setmtNode(pNode);
		pNode->setData2((DWORD)pTreeNode);
		return pTreeNode;
	}
	else
		return (CTreeNode*)data2;
}
void CTreeBuilder::ConfigToStr(CTreeNode* parent)
{
	CTreeNode* n = NULL; 

	if (parent != NULL) 
	{
		if(!parent->IsLeaf()) 
		{
			string temp = ""; 
			for ( int i = 1; i< parent->GetDepth(); i++)
				temp+="\t"; 

			m_sXmlBuf += temp+"<"+parent->GetNodeName()+">\n";
			for (n = parent->GetChild(); n != NULL; n = n->GetSibling()) 
			{

				if (!n->IsLeaf()) 
				{
					ConfigToStr(n);
				}
				else
				{
					string temp1 = ""; 
					for ( int i = 1; i< n->GetDepth(); i++)
						temp1+="\t"; 

					m_sXmlBuf+=temp1+"<"+n->GetNodeName()+">"+n->GetNodeValue()+"</"+n->GetNodeName()+">\n";
				}
			} 
			m_sXmlBuf+=temp+"</"+parent->GetNodeName()+">\n";
		} 
	}
}
Exemple #22
0
bool CTreeNode::IsVisible()
{
	if (!CPanel::IsVisible())
		return false;

	if (!m_hParent)
		return true;

	CTreeNode* pNode = m_hParent;
	do
	{
		if (!pNode->IsExpanded())
			return false;
	}
	while (pNode = pNode->m_hParent);

	return true;
}
Exemple #23
0
void CTreeWnd::NotifyLButtonDblClick(UINT nFlags,CPoint point)
{
    CShape* pShape = HitTestShape(point);
    if (pShape)
    {
        CTreeNode* pNode = NodeFromShape(pShape);
		if (pNode)
		{
            if (OnNodeDoubleClicked(pNode))
            {
			    pNode->ToggleExpanded();
			    ForceLayout();
			    Invalidate();
            }
		}
    }
	
}
void CTagQualifiers::operator()( const CNode& node, CTreeNode& tree_node )
{
    (*this)(node);
    auto arg = node.first_child();
    CTag& argTag = CTagContainer::getTag( arg.name() );
    int argType = argTag.getType();
    argTag(arg, tree_node.Step(node.name()));
    arg = argTag.checkSignature(arg);
}
Exemple #25
0
void CFileTree::build_tree(CInodeList & files)
{
	CTreeNode * p;
	if (!m_pRoot)
	{
		m_pRoot = new CTreeNode;
		p = m_pRoot;
	}
	else
	{
		p = m_pRoot;
		while (p->has_rchild())
			p = p->get_rchild();
		p->new_rchild();
		p = p->get_rchild();
	}
	build_tree(p, files);
}	
Exemple #26
0
//Saves the tree into the binary file. 
//Nodes packed into the file in preorder. 
void CTree::save(const char* fileName)
{
	fstream fsave(fileName, ios_base::binary | ios_base::out | ios_base::app);	//file
	stack<CTreeNode*> nodes;	//stack for keeping roots of subtrees in the packing order
	nodes.push(&root);
	while(!nodes.empty())
	{
		CTreeNode* pNode = nodes.top(); //current node to be packed
		nodes.pop();
		pNode->save(fsave);
		if(!pNode->isLeaf())
		{
			nodes.push(pNode->right);
			nodes.push(pNode->left);
		}
	}

	fsave.close();
}
Exemple #27
0
void CSoliDire::build_dir_tree(CString basedir)
{
	CTreeNode * p = NULL;
	if (!m_DirTree->m_pRoot)
	{
		m_DirTree->m_pRoot = new CTreeNode;
		p = m_DirTree->m_pRoot;
	}
	else
	{
		p = m_DirTree->m_pRoot;
		while (p->has_rchild())
			p = p->get_rchild();
		p->new_rchild(); 
		p = p->get_rchild();
	}
	
	build_dir_tree(p, basedir);
	SetModifiedFlag(TRUE);
}
bool CTreeBuilder::WriteConfigString(string sNodePath, string value)
{
	bool bRetCode = false; 
	//check if the base root is available
	int iSecSlash = sNodePath.find('/', 1); 

	string sRootSection = sNodePath.substr(0, iSecSlash);

	if ( IfSectionExists(sRootSection) == true && IfSectionExists(sNodePath) == false)
	{
		bRetCode = RecursiveAdd(sNodePath); 
	}

	CTreeNode* pNode = NodeFind(sNodePath); 

	if ( pNode!= NULL)
	{
		pNode->SetNodeValue(value); 
		m_bModified = true; 
	}
	return bRetCode; 
}
Exemple #29
0
    void Eval(CTreeNode<CBDB_QueryNode>& tr)
    {
        GetArguments(tr, eCheckAll);

        CBDB_QueryNode& qnode = tr.GetValue();
        const string* arg = GetArg(0);
        if (*arg == "0") {
            qnode.SetValue("1");
        } else {
            qnode.SetValue("0");
        }

    }
void CTagCn::operator ()(const CNode& node, CTreeNode& tree_node)
{
	(*this)(node);
	checkAttributes(node, { "type" });
	string attr = node.attribute("type").as_string();
	CNode child = node.first_child();
	if (attr == "real" || attr == "")
	{
		hasNChilds(node, 1);
		nodeIsReal(child, tree_node.Step("cn"));
		return;
	}
}