1 // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
5 #include <CryCore/BoostHelpers.h>
6 #include <CrySchematyc2/TemplateUtils/TemplateUtils_ArrayView.h>
10 typedef TemplateUtils::CArrayView
<const size_t> TSizeTConstArray
;
12 class CCustomTreeCtrlItem
;
14 DECLARE_SHARED_POINTERS(CCustomTreeCtrlItem
)
16 typedef std::vector
<CCustomTreeCtrlItemPtr
> TCustomTreeCtrlItemPtrVector
;
18 class CCustomTreeCtrlItem
20 friend class CCustomTreeCtrl
;
24 CCustomTreeCtrlItem(const char* text
, size_t icon
, const CCustomTreeCtrlItemPtr
& pParent
, const SGUID
& guid
);
25 virtual ~CCustomTreeCtrlItem();
27 const char* GetText() const;
28 size_t GetIcon() const;
29 CCustomTreeCtrlItemPtr
GetParent() const;
30 CCustomTreeCtrlItemPtr
FindAncestor(const char* text
) const;
31 CCustomTreeCtrlItemPtr
FindAncestor(size_t icon
) const;
32 CCustomTreeCtrlItemPtr
FindAncestor(const TSizeTConstArray
& icons
) const;
33 void SetHTreeItem(HTREEITEM hTreeItem
);
34 HTREEITEM
GetHTreeItem() const;
35 const SGUID
& GetGUID() const;
37 void AddChild(CCustomTreeCtrlItemPtr pItem
);
38 const TCustomTreeCtrlItemPtrVector
& GetChildren();
39 void RemoveChild(CCustomTreeCtrlItemPtr pItem
);
43 void SetText(const char* text
);
47 CCustomTreeCtrlItemPtr m_pParent
; // #SchematycTODO : Shouldn't this be a weak pointer?
49 TCustomTreeCtrlItemPtrVector m_children
;
50 HTREEITEM m_hTreeItem
;
53 typedef std::function
<bool(const CCustomTreeCtrlItemPtr
&, const CCustomTreeCtrlItemPtr
&)> TCustomTreeCtrlItemCompFunc
;
55 class CCustomTreeCtrl
: public CXTTreeCtrl
59 virtual BOOL
Create(DWORD dwStyle
, const RECT
& rect
, CWnd
* pParentWnd
, UINT nID
);
60 void ExpandItem(const CCustomTreeCtrlItemPtr
& pItem
);
61 void EnsureVisible(const CCustomTreeCtrlItemPtr
& pItem
);
64 CCustomTreeCtrl(TCustomTreeCtrlItemCompFunc itemCompare
= NULL
);
65 virtual ~CCustomTreeCtrl();
67 void AddItem(const CCustomTreeCtrlItemPtr
& pItem
);
68 void SetItemText(const CCustomTreeCtrlItemPtr
& pItem
, const char* text
);
69 void SetItemColor(const CCustomTreeCtrlItemPtr
& pItem
, COLORREF color
);
70 void SetItemBold(const CCustomTreeCtrlItemPtr
& pItem
, bool bBold
);
71 void RemoveItem(const CCustomTreeCtrlItemPtr
& pItem
);
72 void RemoveItemChildren(const CCustomTreeCtrlItemPtr
& pItem
);
73 CCustomTreeCtrlItemPtr
FindItem(const char* text
, const CCustomTreeCtrlItemPtr
& pParentItem
= CCustomTreeCtrlItemPtr());
74 CCustomTreeCtrlItemPtr
FindItem(CPoint pos
);
75 CCustomTreeCtrlItemPtr
FindItem(HTREEITEM hTreeItem
);
76 CCustomTreeCtrlItemPtr
FindItem(SGUID guid
);
77 TCustomTreeCtrlItemPtrVector
& GetItems();
78 const TCustomTreeCtrlItemPtrVector
& GetItems() const;
79 void GetChildItems(CCustomTreeCtrlItem
& item
, TCustomTreeCtrlItemPtrVector
&childItems
);
82 virtual void LoadImageList(CImageList
& imageList
);
83 virtual DROPEFFECT
OnDragOver(CWnd
* pWnd
, COleDataObject
* pDataObject
, DWORD dwKeyState
, CPoint point
);
84 virtual BOOL
OnDrop(CWnd
* pWnd
, COleDataObject
* pDataObject
, DROPEFFECT dropEffect
, CPoint point
);
88 class CDropTarget
: public COleDropTarget
92 CDropTarget(CCustomTreeCtrl
& customTreeCtrl
);
95 virtual DROPEFFECT
OnDragOver(CWnd
* pWnd
, COleDataObject
* pDataObject
, DWORD dwKeyState
, CPoint point
);
96 virtual BOOL
OnDrop(CWnd
* pWnd
, COleDataObject
* pDataObject
, DROPEFFECT dropEffect
, CPoint point
);
101 CCustomTreeCtrl
& m_customTreeCtrl
;
104 TCustomTreeCtrlItemCompFunc m_itemCompare
;
105 CImageList m_imageList
;
106 TCustomTreeCtrlItemPtrVector m_items
;
107 std::map
<HTREEITEM
, CCustomTreeCtrlItemPtr
> m_htreeitem_map
;
108 std::map
<SGUID
, CCustomTreeCtrlItemPtr
> m_guid_map
;
109 CDropTarget m_dropTarget
;
110 CCustomTreeCtrlItemPtr m_root
;