!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / Sandbox / Plugins / EditorSchematyc2 / Editor / TreeCtrl.h
blob26e81aae2e900006e5a3ed5ef9c24efd8890e790
1 // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include <CryCore/BoostHelpers.h>
6 #include <CrySchematyc2/TemplateUtils/TemplateUtils_ArrayView.h>
8 namespace Schematyc2
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;
22 public:
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);
41 private:
43 void SetText(const char* text);
45 string m_text;
46 size_t m_icon;
47 CCustomTreeCtrlItemPtr m_pParent; // #SchematycTODO : Shouldn't this be a weak pointer?
48 SGUID m_guid;
49 TCustomTreeCtrlItemPtrVector m_children;
50 HTREEITEM m_hTreeItem;
53 typedef std::function<bool(const CCustomTreeCtrlItemPtr&, const CCustomTreeCtrlItemPtr&)> TCustomTreeCtrlItemCompFunc;
55 class CCustomTreeCtrl : public CXTTreeCtrl
57 public:
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);
63 protected:
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);
80 void Reset();
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);
86 private:
88 class CDropTarget : public COleDropTarget
90 public:
92 CDropTarget(CCustomTreeCtrl& customTreeCtrl);
94 // COleDropTarget
95 virtual DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
96 virtual BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
97 // ~COleDropTarget
99 private:
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;