duilib学习记录之节点

//CNode.h 
#ifndef CNODE_H 
#define CNODE_H 
#include <vector> 
class Node 
{ 
    struct NodeData//节点数据 
    { 
        int _level;//等级 
        bool _child_visible;//子节点是否显示 
        CStdString _text;//节点文本 
        CListLabelElementUI* _pListElement;//节点标签控件 
    }; 
    typedef std::vector Children; 
    Children    _children;//存储子类节点容器(父类存储子节点,子节点指向父类节点,双向链表) 
    Node*   _parent;//存储父类节点 
    NodeData _data; 
private: 
    void set_parent(Node* parent) { _parent = parent; } 
public: 
    Node() : _parent (NULL) {} 
    explicit Node(NodeData t) : _data (t), _parent (NULL) {} 
    Node(NodeData t, Node* parent)  : _data (t), _parent (parent) {} 
    ~Node(); 
    NodeData& data() { return _data; }  
    int num_children() const { return _children.size(); } 
    Node* child(int i)  { return _children[i]; } 
    Node* parent() { return ( _parent); } 
    bool has_children() const { return num_children() > 0; } 
    void add_child(Node* child) ; 
    void remove_child(Node* child); 
    Node* get_last_child();//递归遍历节点 
}; 
#endif

//CNode.cpp 
#include "stdafx.h" 
#include "CNode.h" 
Node::~Node() 
{ 
    for (int i = 0; i < num_children(); i++) 
        delete _children[i]; 
} 
void Node::add_child(Node* child) 
{ 
    if(!child) 
    { return; 
    } 
    child->set_parent(this); 
    _children.push_back(child); 
} 
void Node::remove_child(Node* child) 
{ 
    Children::iterator iter = _children.begin(); 
    for( ; iter < _children.end(); ++iter ) 
    { 
        if( iter == child ) 
        { 
            _children.erase(iter); 
            return; 
        }
     } 
} 
Node Node::get_last_child() 
{ 
    if( has_children() ) 
    { 
        return child(num_children() - 1)->get_last_child();
    } 
    else return this; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值