FLImaging 6.5.8.1
GUITreeCtrl.h
1#pragma once
2
3#include <set>
4#include "GUIDefinitions.h"
5#include "GUITreeCtrlBase.h"
6
7namespace FLImaging
8{
9 namespace GUI
10 {
11 class CGUIMenuItemBase;
12 class CGUIDialogAddSNAPNodeDisplay;
13 class CGUIPaneExampleSNAP;
14 class CGUIPaneMenu;
15 class CGUIPaneBase;
16
17 typedef struct sMatchResult
18 {
19 public:
20 sMatchResult(int32_t _i32Start, int32_t _i32End, int32_t _i32AliasIndex)
21 : i32Start(_i32Start), i32End(_i32End), i32AliasIndex(_i32AliasIndex){}
22
23 int32_t i32Start;
24 int32_t i32End;
25 int32_t i32AliasIndex;
26 }SMatchResult;
27
28 class FL_EXPORT CGUITreeCtrl : public CGUITreeCtrlBase
29 {
30 public:
31 CGUITreeCtrl() noexcept;
32 CGUITreeCtrl(const CGUITreeCtrl& rh);
33 virtual ~CGUITreeCtrl();
34
35 public:
36
44 virtual bool RecursiveExpand(HTREEITEM hItem, UINT nCode, bool bWriteFileSystem = true) override;
45
53 virtual void GetVerticalRange(HTREEITEM hItemRangeStart, HTREEITEM hItemRangeEnd, std::set<HTREEITEM>& setOut);
54
59 virtual void ClearMultiselectItems();
60
68 virtual HTREEITEM FindHandle(void* pData, HTREEITEM hParent = 0);
69
77 virtual HTREEITEM FindHandle(const Base::CFLString<wchar_t>& strPath, HTREEITEM hParent = 0);
78
85 virtual HTREEITEM FindHandleByFullPath(const Base::CFLString<wchar_t>& strFullPath);
86
96 virtual const CResult SortTreeItem(HTREEITEM hItem = NULL, ESortOrder eSortOrder = ESortOrder_Ascending);
97
106 virtual const CResult SetRootItemName(const Base::CFLString<wchar_t>& strRootItemName);
107
114 virtual const Base::CFLString<wchar_t>& GetRootItemName();
115
123 virtual const CResult EnableDragAndDropItem(bool bEnable);
124
130 virtual bool IsDragAndDropItemEnabled();
131
138 virtual const CResult SetDefaultImageList();
139
140 virtual bool SearchNext();
141 virtual bool SearchPrev();
142 virtual bool SearchFirst();
143 virtual bool SearchLast();
144
145 virtual void SetParentPane(CGUIPaneBase* pParentPane);
146 virtual CGUIPaneBase* GetParentPane();
147
148 virtual void SetParentPaneType(EPaneType eParentPaneType);
149 virtual EPaneType GetParentPaneType();
150
151 virtual void SetFoundIndex(int32_t i32Idx);
152 virtual int32_t GetFoundIndex();
153 virtual int32_t GetFoundIndex(HTREEITEM hItem);
154 virtual int32_t GetFoundCount();
155 virtual HTREEITEM GetFoundItem(int32_t i32Index);
156
157 virtual void EnableItem(CGUIMenuItemBase* pMenuItem, bool bEnable);
158
159 virtual HTREEITEM MoveTreeItem(HTREEITEM hItem, HTREEITEM hItemTo, HTREEITEM hItemPos = TVI_LAST);
160
161 public:
162 DECLARE_MESSAGE_MAP()
163 virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
164 afx_msg void OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
165 afx_msg void OnNMClick(NMHDR* pNMHDR, LRESULT* pResult);
166 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
167 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
168 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
169 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
170 afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
171 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
172 afx_msg void OnTvnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult);
173 afx_msg void OnTvnSelchanging(NMHDR* pNMHDR, LRESULT* pResult);
174 afx_msg void OnTvnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
175 afx_msg void OnTvnItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
176 afx_msg void OnTvnItemChanging(NMHDR* pNMHDR, LRESULT* pResult);
177 afx_msg void OnTvnBegindrag(NMHDR* pNMHDR, LRESULT* pResult);
178 afx_msg void OnTvnBeginrdrag(NMHDR* pNMHDR, LRESULT* pResult);
179 afx_msg void OnTvnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult);
180 afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
181
182 afx_msg LRESULT OnCancelAddNode(WPARAM wParam, LPARAM lParam);
183 afx_msg LRESULT OnUnselectItem(WPARAM wParam, LPARAM lParam);
184
185 virtual BOOL PreTranslateMessage(MSG* pMsg);
186
187 protected:
188 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
189
190 protected:
191 CGUIMenuItemBase* GetSNAPNodePropertyMenu(HTREEITEM hItem);
192 virtual void InternalSortTreeItem(HTREEITEM hItem, ESortOrder eSortOrder, bool bAllowRoot = false);
193 static int CALLBACK CompareDesendingProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
194 static int CALLBACK CompareAscendingProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
195
196 protected:
197 Base::CFLString<wchar_t> m_strRootItemName;
198 int32_t m_i32FoundIdx;
199 std::vector<std::pair<HTREEITEM, std::vector<SMatchResult>>>& m_vctFound;
200 std::set<CGUIMenuItemBase*>& m_setMenuItemOnFavorite;
201 std::set<CGUIMenuItemBase*>& m_setMenuItemHided;
202 HTREEITEM m_hItemVertStart;
203 std::set<HTREEITEM>& m_setMultiSelect;
204 CImageList m_imgListDefault;
205
206 bool m_bDragState;
207 bool m_bUnselectItem;
208 bool m_bEnableDragAndDropItem;
209
210 HTREEITEM m_hItemUnselect;
211 HTREEITEM m_hItemLButtonDown;
212 EPaneType m_eParentPaneType;
213 TVITEMW m_itemDrag;
214
215 CGUIDialogAddSNAPNodeDisplay* m_pDlgAddNode;
216 CGUIPaneBase* m_pParentPane;
217
218 friend class CGUIManager;
219 friend class CGUIPaneMenu;
220 friend class CGUIPaneExampleSNAP;
221 friend class CGUITreeCtrlSearchUtils;
222 };
223 }
224}