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;
|
2019-07-25 11:51:29 +08:00
|
|
|
|
std::vector<TreeNode*> m_aTreeNodes;
|
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_
|