nim_duilib/tool_kits/duilib/Control/TreeView.h

191 lines
3.9 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#ifndef UI_CONTROL_TREEVIEW_H_
#define UI_CONTROL_TREEVIEW_H_
#pragma once
namespace ui
{
#define ROOT_NODE_DEPTH -1
class TreeView;
class UILIB_API TreeNode : public ListContainerElement
{
public:
TreeNode();
TreeNode(const TreeNode& r) = delete;
TreeNode& operator=(const TreeNode& r) = delete;
/// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><E0B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9A9><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual bool IsVisible() const override;
virtual void SetInternVisible(bool bVisible) override;
virtual void SetWindow(Window* pManager, Box* pParent, bool bInit = true) override;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] param <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> true
*/
virtual bool OnClickItem(EventArgs* param);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pTreeView <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetTreeView(TreeView* pTreeView);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
TreeNode* GetParentNode();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD>ڵ<EFBFBD>
* @param[in] pParentTreeNode <EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetParentNode(TreeNode* pParentTreeNode);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>
* @param[in] pTreeNode <EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool AddChildNode(TreeNode* pTreeNode);
/**
* @brief <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>
* @param[in] pTreeNode <EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @param[in] iIndex Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>λ<EFBFBD><EFBFBD>֮<EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool AddChildNodeAt(TreeNode* pTreeNode, std::size_t iIndex);
/**
* @brief <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>
* @param[in] index Ҫ<EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool RemoveChildNodeAt(std::size_t index);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>
* @param[in] pTreeNode <EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool RemoveChildNode(TreeNode* pTreeNode);
/**
* @brief <EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void RemoveAllChildNode();
/**
* @brief <EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetDescendantNodeCount();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::size_t GetChildNodeCount();
/**
* @brief <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @param[in] iIndex Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
TreeNode* GetChildNode(std::size_t iIndex);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ӽڵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pTreeNode <EFBFBD>ӽڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetChildNodeIndex(TreeNode* pTreeNode);
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD>չ<EFBFBD><EFBFBD>״̬
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊչ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool IsExpand() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ӽڵ<EFBFBD>
* @param[in] bExpand Ϊ true ʱչ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false <EFBFBD>Dz<EFBFBD>չ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetExpand(bool bExpand);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD>
*/
int GetDepth();
private:
/**
* @brief ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool RemoveSelf();
private:
int m_iDepth;
bool m_bExpand;
TreeView *m_pTreeView;
TreeNode *m_pParentTreeNode;
std::vector<TreeNode*> mTreeNodes;
2019-04-19 17:19:57 +08:00
};
class UILIB_API TreeView : public ListBox
{
public:
TreeView(void);
/// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><E0B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9A9><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void SetAttribute(const std::wstring& strName, const std::wstring& strValue) override;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
TreeNode* GetRootNode() { return m_rootNode.get(); }
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
int GetIndent() { return m_iIndent; }
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @param[in] indent Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD>
*/
void SetIndent(int indent) { m_iIndent = indent; }
private:
//<2F><><EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹʹ<D6B9>ã<EFBFBD>Ӧ<EFBFBD><D3A6>ʹ<EFBFBD><CAB9>TreeNode<64>е<EFBFBD><D0B5><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
bool Add(Control* pControl) override;
bool AddAt(Control* pControl, std::size_t iIndex) override;
bool Remove(Control* pControl) override;
bool RemoveAt(std::size_t iIndex) override;
void RemoveAll() override;
virtual void SetWindow(Window* pManager, Box* pParent, bool bInit = true) override;
private:
int m_iIndent;
std::unique_ptr<TreeNode> m_rootNode;
};
}
#endif // UI_CONTROL_TREEVIEW_H_