c6dd4dbac0863fc7ad90060ea5fe717008f75ad7
[reactos.git] / base / setup / reactos / treelist.h
1 /*
2 * PROJECT: ReactOS GUI first stage setup application
3 * LICENSE: GPL-3.0-or-later (https://spdx.org/licenses/GPL-3.0-or-later)
4 * PURPOSE: Implements a TreeList control: a tree window with columns.
5 * COPYRIGHT: Copyright (C) Anton Zechner (az_software@inode.at) 2007
6 * Copyright (C) Sébastien Kirche (sebastien.kirche@free.fr) 2014
7 *
8 * NOTE: Taken from the TreeList code found at https://github.com/sebkirche/treelist
9 */
10
11 //*****************************************************************************
12 //*
13 //*
14 //* TreeListWnd.h
15 //*
16 //*
17 //*****************************************************************************
18 #ifndef __TREELISTWND_H__
19 #define __TREELISTWND_H__
20 #if _MSC_VER > 1000
21 #pragma once
22 #endif
23
24 #include <commctrl.h>
25
26 /* Window Messaging */
27 #ifndef SNDMSG
28 #ifdef __cplusplus
29 #define SNDMSG ::SendMessage
30 #else
31 #define SNDMSG SendMessage
32 #endif
33 #endif // ifndef SNDMSG
34
35
36 typedef int (CALLBACK *PFNTVCOMPAREEX)(HWND hWnd,HTREEITEM hItem1,HTREEITEM hItem2,LPARAM lParam1,LPARAM lParam2,LPARAM lParam);
37 typedef int (CALLBACK *PFNTVSORTEX )(HWND hWnd,HTREEITEM hItem ,LPCTSTR pTextItem,LPCTSTR pTextInsert,LPARAM lParamItem,LPARAM lParamInsert);
38
39 typedef struct _TVSORTEX {
40 HTREEITEM hParent;
41 PFNTVCOMPAREEX lpfnCompare;
42 LPARAM lParam;
43 } TVSORTEX, *LPTVSORTEX;
44
45 typedef struct _TVFIND {
46 UINT uFlags;
47 UINT uColumn;
48 UINT uState;
49 UINT uStateMask;
50 LPARAM lParam;
51 LPCTSTR pText;
52 } TVFIND, *LPTVFIND;
53
54 typedef struct _TV_KEYDOWN_EX {
55 NMHDR hdr;
56 WORD wVKey;
57 WORD wScan;
58 UINT flags;
59 } TV_KEYDOWN_EX, *LPTV_KEYDOWN_EX;
60
61 typedef struct _TV_STARTEDIT {
62 NMHDR hdr;
63 TVITEM item;
64 UINT uAction;
65 UINT uHeight;
66 UINT uMaxEntries;
67 LPCTSTR pTextEntries;
68 LPCTSTR *pTextList;
69 POINT ptAction;
70 } TV_STARTEDIT, *LPTV_STARTEDIT;
71
72 typedef struct _TV_COLSIZE {
73 NMHDR hdr;
74 UINT uColumn;
75 UINT uIndex;
76 UINT uPosX;
77 INT iSize;
78 } TV_COLSIZE, *LPTV_COLSIZE;
79
80 typedef TVSORTEX *LPTVSORTEX;
81 typedef TVSORTEX *LPTV_SORTEX;
82 typedef TVSORTEX TV_SORTEX;
83
84
85 #define TVCOLUMN LV_COLUMN
86 #define TV_COLUMN LV_COLUMN
87 #define TV_FIND TVFIND
88 #define TV_NOIMAGE (-2)
89 #define TV_NOCOLOR 0xFFFFFFFF
90 #define TV_NOAUTOEXPAND 0x20000000
91 #define TV_SECONDICON 0x40000000
92 #define TVLE_DONOTIFY 0xF5A5A500
93 #define TVIF_TEXTPTR 0x80000000
94 #define TVIF_TOOLTIPTIME 0x40000000
95 #define TVIF_TEXTCHANGED 0x20000000
96 #define TVIF_RETURNEXIT 0x10000000
97 #define TVIF_CASE 0x08000000
98 #define TVIF_NEXT 0x04000000
99 #define TVIF_CHILD 0x02000000
100 #define TVIF_CANCELED 0x01000000
101 #define TVIF_ONLYFOCUS 0x00800000
102 #define TVIF_SUBITEM 0x8000
103 #define TVIF_SUBNUMBER 0x4000
104 #define TVIS_UNDERLINE 0x0001
105 #define TVSIL_CHECK 0x0003
106 #define TVSIL_SUBIMAGES 0x0004
107 #define TVSIL_HEADER 0x0005
108 #define TVN_COLUMNCLICK HDN_ITEMCLICK
109 #define TVN_COLUMNDBLCLICK HDN_ITEMDBLCLICK
110 #define TVE_EXPANDRECURSIVE (0x80000000)
111 #define TVE_EXPANDFORCE (0x40000000)
112 #define TVE_EXPANDNEXT (0x20000000)
113 #define TVE_ALLCHILDS (0x10000000)
114 #define TVE_ONLYCHILDS (0x00000008)
115 #define TVI_SORTEX ((HTREEITEM) 0xFFFF0007)
116 #define TVI_BEFORE ((HTREEITEM) 0xFFFF0006)
117 #define TVI_AFTER ((HTREEITEM) 0xFFFF0005)
118 #define TVI_ROW(n) ((HTREEITEM)(0xFFE00000+(n)))
119 #ifndef VK_DBLCLK
120 #define VK_DBLCLK 0x10000 // Edit with doubleclick
121 #endif
122 #ifndef VK_ICONCLK
123 #define VK_ICONCLK 0x10001 // Edit with click on icon
124 #endif
125 #ifndef VK_EDITCLK
126 #define VK_EDITCLK 0x10002 // Edit with click on augewähltes Element //visble element ?
127 #endif
128 #ifdef UNICODE
129 #define TV_UINICODE 1
130 #else
131 #define TV_UINICODE 0
132 #endif
133
134 #define TVC_CLASSNAME "SysTreeList32"
135
136 // Color Constants (TVM_SETBKCOLOR)
137 #define TVC_BK 0 // Background
138 #define TVC_ODD 1 // alternate colors / odd (see TVS_EX_ALTERNATECOLOR)
139 #define TVC_EVEN 2 // alternate colors / even (see TVS_EX_ALTERNATECOLOR)
140 #define TVC_FRAME 3 // separator lines (see TVS_EX_ITEMLINES)
141 #define TVC_TEXT 4 // text
142 #define TVC_LINE 5 // interior of the buttons
143 #define TVC_BOX 6 // exterior of the buttons
144 #define TVC_TRACK 7 // tracked item text
145 #define TVC_MARK 8 // selected line
146 #define TVC_MARKODD 8 // selected line (odd)
147 #define TVC_MARKEVEN 9 // selected line (even)
148 #define TVC_INSERT 10 // insertion point
149 #define TVC_BOXBG 11 // background of buttons
150 #define TVC_COLBK 12 // background of marked column
151 #define TVC_COLODD 13 // alternate odd color of marked column
152 #define TVC_COLEVEN 14 // alternate even color of marked column
153 #define TVC_GRAYED 15 // background when disabled
154
155
156 // constants for GetNextItem (TVM_GETNEXTITEM)
157 #define TVGN_DROPHILITESUB 0x000C // get selected column
158 #define TVGN_CARETSUB 0x000D // Drophighilite Spalte holen
159 #ifndef TVGN_NEXTSELECTED
160 #define TVGN_NEXTSELECTED 0x000E // next selected entry
161 #endif
162 #define TVGN_FOCUS 0x000F // entry that has focus
163 #define TVGN_FOCUSSUB 0x0010 // column that has focus
164 #define TVGN_NEXTSELCHILD 0x0011 // next selected child entry
165 #define TVGN_LASTCHILD 0x0012 // last child entry
166 #define TVGN_NEXTITEM 0x0013 // to enumerate the entries
167
168
169 // constants for InsertColumn (mask)
170 #define TVCF_FMT LVCF_FMT // set the text alignment
171 #define TVCF_IMAGE LVCF_IMAGE // set column image
172 #define TVCF_TEXT LVCF_TEXT // set column text
173 #define TVCF_WIDTH LVCF_WIDTH // set fixed width
174 #define TVCF_VWIDTH LVCF_SUBITEM // set variable width
175 #define TVCF_MIN LVCF_ORDER // set minimum width
176 #define TVCF_MARK 0x80000000 // to mark a column
177 #define TVCF_FIXED 0x40000000 // can the column width can be changed
178 #define TVCF_LASTSIZE 0x44332211 // Breite vor dem Fixieren wieder herstellen
179
180
181 // constants for InsertColumn (format mask)
182 #define TVCFMT_BITMAP_ON_RIGHT LVCFMT_BITMAP_ON_RIGHT
183 #define TVCFMT_COL_HAS_IMAGES LVCFMT_COL_HAS_IMAGES
184 #define TVCFMT_CENTER LVCFMT_CENTER
185 #define TVCFMT_IMAGE LVCFMT_IMAGE
186 #define TVCFMT_LEFT LVCFMT_LEFT
187 #define TVCFMT_RIGHT LVCFMT_RIGHT
188 #define TVCFMT_FIXED 0x20000000 // flag for fixing the column
189 #define TVCFMT_MARK 0x10000000 // flag for marking the column
190
191
192 // constants for Column AutoEdit
193 #define TVAE_NONE (0<<TVAE_MODEPOS) // no automatic edit
194 #define TVAE_EDIT (1<<TVAE_MODEPOS) // automatic edit with edit box
195 #define TVAE_COMBO (2<<TVAE_MODEPOS) // automatic edit with ComboBox
196 #define TVAE_CBLIST (3<<TVAE_MODEPOS) // automatic edit with ComboListBox
197 #define TVAE_STEP (4<<TVAE_MODEPOS) // advance with enter
198 #define TVAE_STEPED (5<<TVAE_MODEPOS) // advance with enter
199 #define TVAE_CHECK (6<<TVAE_MODEPOS) // automatic edit with CheckBox
200 #define TVAE_CHECKED (7<<TVAE_MODEPOS) // automatic edit with CheckBox and Edit
201 #define TVAE_NEXTLINE 0x0001 // go to next line after edit
202 #define TVAE_DBLCLICK 0x0002 // edit with doubleclick
203 #define TVAE_FULLWIDTH 0x0004 // show combobox over the full width
204 #define TVAE_PTRLIST 0x0008 // data list is passed as a pointer list
205 #define TVAE_ONLYRETURN 0x0010 // edition can only be started with Return
206 #define TVAE_STATEENABLE 0x0020 // edition can be (un)locked with the TVIS_DISABLEBIT flag
207 #define TVAE_ICONCLICK 0x0040 // edition starts by clicking on the icon
208 #define TVAE_DROPDOWN 0x0080 // open the DropDownList when edition starts
209 #define TVAE_COL(c) (((c)&0x3F)<<11) // column for automatic edit
210 #define TVAE_CHAR(c) (((c)&0xFF)<<17) // delimiter for the data list
211 #define TVAE_COUNT(c) (((c)&0x7F)<<25) // number of entries in the data list (0=auto)
212 #define TVAE_MODEMASK (7<<TVAE_MODEPOS) // Mask for mode bits
213 #define TVAE_MODEPOS 0x0008 // Mask for mode bits
214 #define TVIS_DISABLEBIT 0x8000 // flag for locking auto edit
215
216
217 // constants for HitTest (flags)
218 #define TVHT_SUBTOCOL(u) (((unsigned)u)>>24) // Convert column to column numbers mask
219 #define TVHT_SUBMASK 0xFF000000 // Maske in der die Spalte gespeichert wird
220 #define TVHT_ONRIGHTSPACE 0x00800000 // Auf rechtem Rand nach den Exträgen
221 #define TVHT_ONSUBLABEL 0x00400000 // Koordinate ist auf dem Text eines Extraeintrages
222 #define TVHT_ONSUBICON 0x00200000 // Koordinate ist auf einem Extraeintrag
223 #define TVHT_ONSUBRIGHT 0x00100000 // Koordinate ist auf einem Extraeintrag rechts vom Text
224 #define TVHT_ONSUBITEM (TVHT_ONSUBICON|TVHT_ONSUBLABEL)
225
226
227 // constants for GetItemRect (TVM_GETITEMRECT)
228 #define TVIR_COLTOSUB(u) ((u)<<24) // specify column
229 #define TVIR_GETCOLUMN 0x00000080 // get only column
230 #define TVIR_TEXT 0x00000001 // get only text area
231
232
233 // constants for SelectChilds (TVM_SELECTCHILDS)
234 #define TVIS_WITHCHILDS 0x00000001 // get also childs
235 #define TVIS_DESELECT 0x00000002 // deselect all items
236
237 // constants for Options (TVM_GETSETOPTION)
238 #define TVOP_AUTOEXPANDOFF 0x00000001 // Icon Offset for TVS_EX_AUTOEXPANDICON
239 #define TVOP_WRITEOPTION 0x80000000 // write too
240
241
242 // constants for EditLabel (LVM_EDITLABEL)
243 #define TVIR_EDITCOMBOCHAR(n) (((n)&0xFF)<<8) // Separator of the combobox entries (only for Notify message)
244 #define TVIR_EDITCOMBODEL 0x00000080 // Clears the buffer for the entries (only for Notify message)
245 #define TVIR_EDITCOMBODOWN 0x10000000 // open the combobox (only for Notify message)
246 #define TVIR_EDITCOMBOBOX 0x20000000 // instead of an edit, display a combobox
247 #define TVIR_EDITCOMBOLIST 0x40000000 // instead of an edit, display a combobox with list selection
248 #define TVIR_EDITFULL 0x80000000 // the edit window takes the full width
249 #define TVIR_EDITTEXT 0x00000001 // show the edit window over the text (only for Notify message)
250 #define TVIR_EDITCOL(u) ((u)&0xFF) // auto edit column
251 #define TVIR_SELALL 0x00000000 // select all
252 #ifndef __REACTOS__
253 #define TVIR_SELAREA(a,b) ((0x0C0000|(a&0x1FF)|((b&0x1FF)<<9))<<8) // select text area
254 #define TVIR_SETCURSOR(a) ((0x080000|(a&0x3FFFF))<<8) // Cursor auf Textstelle
255 #define TVIR_SETAT(a) ((0x040000|(a&0x3FFFF))<<8) // Cursor auf Pixel-Offset
256 #else // __REACTOS__
257 #define TVIR_SELAREA(a,b) ((0x0C0000|((a)&0x1FF)|(((b)&0x1FF)<<9))<<8) // select text area
258 #define TVIR_SETCURSOR(a) ((0x080000|((a)&0x3FFFF))<<8) // Cursor auf Textstelle
259 #define TVIR_SETAT(a) ((0x040000|((a)&0x3FFFF))<<8) // Cursor auf Pixel-Offset
260 #endif // __REACTOS__
261
262 // constants for uStyleEx
263 #define TVS_EX_HEADEROWNIMGLIST 0x00000400 // the header has its own TVSIL_HEADER image list (else it is shared with TVSIL_NORMAL)
264 #define TVS_EX_HEADERCHGNOTIFY 0x00000800 // notify when a column has been resized
265 #define TVS_EX_HEADERDRAGDROP 0x00001000 // columns over 1 can be sorted using drag and drop
266 #define TVS_EX_SINGLECHECKBOX 0x00002000 // checkboxes with single selection
267 #define TVS_EX_STEPOUT 0x00004000 // can leave an edit control with the cursor buttons
268 #define TVS_EX_BITCHECKBOX 0x00008000 // change only the first bit of the state
269 #define TVS_EX_ITEMLINES 0x00010000 // draw the item separating lines
270 #define TVS_EX_ALTERNATECOLOR 0x00020000 // use alternate lines background color
271 #define TVS_EX_SUBSELECT 0x00040000 // allow to select columns
272 #define TVS_EX_FULLROWMARK 0x00080000 // the row mark fill the entire row
273 #define TVS_EX_TOOLTIPNOTIFY 0x00100000 // send a TVN_ITEMTOOLTIP notify to query for tooltip
274 #define TVS_EX_AUTOEXPANDICON 0x00200000 // use automaticaly the next icon for expanded items
275 #define TVS_EX_NOCHARSELCET 0x00400000 // disable looping selection of items via keyboard
276 #define TVS_EX_NOCOLUMNRESIZE 0x00800000 // user cannot change the columns width
277 #define TVS_EX_HIDEHEADERS 0x01000000 // hide the header
278 #define TVS_EX_GRAYEDDISABLE 0x02000000 // gray out the control when disabled
279 #define TVS_EX_FULLROWITEMS 0x04000000 // backgrounds and lines takes the whole line (use with TVS_EX_ALTERNATECOLOR and TVS_EX_ITEMLINES)
280 #define TVS_EX_FIXEDCOLSIZE 0x08000000 // the width of the whole columns stays constant when resizing columns (the right margin of last column do not change)
281 #define TVS_EX_HOMEENDSELECT 0x10000000 // move to first / last item with Home / End keys
282 #define TVS_EX_SHAREIMAGELISTS 0x20000000 // image list is not deleted when the control is destroyed
283 #define TVS_EX_EDITCLICK 0x40000000 // enter edit mode with a single click
284 #define TVS_EX_NOCURSORSET 0x80000000 // VK_EDITCLK always select the entire text. Don't set the cursor to the click point, if TVS_EX_EDITCLICK is used
285 #ifndef TVS_EX_MULTISELECT
286 #define TVS_EX_MULTISELECT 0x00000002 // allow multiple selections
287 #endif
288 #ifndef TVS_EX_AUTOHSCROLL
289 #define TVS_EX_AUTOHSCROLL 0x00000020 // auto scroll to selected item (horizontal scrollbar stays hidden)
290 #endif
291
292
293 // constants for notify messages
294 #define TVN_ITEMTOOLTIP (TVN_FIRST-32) // tooltip query
295 #define TVN_CBSTATECHANGED (TVN_FIRST-33) // checkbox change
296 #define TVN_STEPSTATECHANGED (TVN_FIRST-34) // autoedit state changed
297 #define TVN_STARTEDIT (TVN_FIRST-35) // field edit
298 #define TVN_LBUTTONUP (TVN_FIRST-36) // left button released
299 #define TVN_RBUTTONUP (TVN_FIRST-37) // right button released
300 #define TVN_COLUMNCHANGED (TVN_FIRST-38) // a column modified
301
302
303 // constants for new messages
304 #define TVM_GETHEADER (TV_FIRST+128-1)
305 #define TVM_GETCOLUMNCOUNT (TV_FIRST+128-2)
306 #define TVM_DELETECOLUMN (TV_FIRST+128-3)
307 #define TVM_INSERTCOLUMN (TV_FIRST+128-4-TV_UINICODE)
308 #define TVM_SELECTSUBITEM (TV_FIRST+128-6)
309 #define TVM_SELECTDROP (TV_FIRST+128-7)
310 #define TVM_SETITEMBKCOLOR (TV_FIRST+128-8)
311 #define TVM_GETITEMBKCOLOR (TV_FIRST+128-9)
312 #define TVM_SETITEMTEXTCOLOR (TV_FIRST+128-10)
313 #define TVM_GETITEMTEXTCOLOR (TV_FIRST+128-11)
314 #define TVM_GETITEMOFROW (TV_FIRST+128-12)
315 #define TVM_GETROWCOUNT (TV_FIRST+128-13)
316 #define TVM_GETROWOFITEM (TV_FIRST+128-14)
317 #define TVM_SETCOLUMN (TV_FIRST+128-15-TV_UINICODE)
318 #define TVM_GETCOLUMN (TV_FIRST+128-17-TV_UINICODE)
319 #define TVM_SETCOLUMNWIDTH (TV_FIRST+128-19)
320 #define TVM_GETCOLUMNWIDTH (TV_FIRST+128-20)
321 #define TVM_SETUSERDATASIZE (TV_FIRST+128-21)
322 #define TVM_GETUSERDATASIZE (TV_FIRST+128-22)
323 #define TVM_GETUSERDATA (TV_FIRST+128-23)
324 #define TVM_SORTCHILDRENEX (TV_FIRST+128-24)
325 #define TVM_COLUMNAUTOEDIT (TV_FIRST+128-25-TV_UINICODE)
326 #define TVM_COLUMNAUTOICON (TV_FIRST+128-27)
327 #define TVM_GETCOUNTPERPAGE (TV_FIRST+128-28)
328 #define TVM_FINDITEM (TV_FIRST+128-29-TV_UINICODE)
329 #define TVM_SELECTCHILDS (TV_FIRST+128-31)
330 #define TVM_GETSETOPTION (TV_FIRST+128-32)
331 #define TVM_ISITEMVISIBLE (TV_FIRST+128-33)
332 #define TVM_SETFOCUSITEM (TV_FIRST+128-34)
333 #define TVM_GETCOLUMNORDERARRAY (TV_FIRST+128-35)
334 #define TVM_SETCOLUMNORDERARRAY (TV_FIRST+128-36)
335 #ifndef TVM_GETITEMSTATE
336 #define TVM_GETITEMSTATE (TV_FIRST+39)
337 #endif
338 #ifndef TVM_GETEXTENDEDSTYLE
339 #define TVM_GETEXTENDEDSTYLE (TV_FIRST+45)
340 #endif
341 #ifndef TVM_SETEXTENDEDSTYLE
342 #define TVM_SETEXTENDEDSTYLE (TV_FIRST+44)
343 #endif
344 #ifndef TVM_GETLINECOLOR
345 #define TVM_GETLINECOLOR (TV_FIRST+41)
346 #endif
347 #ifndef TVM_SETLINECOLOR
348 #define TVM_SETLINECOLOR (TV_FIRST+40)
349 #endif
350
351
352 #ifndef TVNRET_DEFAULT
353 #define TVNRET_DEFAULT 0
354 #endif
355 #ifndef TVNRET_SKIPOLD
356 #define TVNRET_SKIPOLD 1
357 #endif
358 #ifndef TVNRET_SKIPNEW
359 #define TVNRET_SKIPNEW 2
360 #endif
361
362 #define TreeList_DeleteChildItems(h,i) ((BOOL )SNDMSG(h,TVM_DELETEITEM,0x88,(LPARAM)i))
363 #define TreeList_DeleteAllItems(h) ((BOOL )SNDMSG(h,TVM_DELETEITEM,0,(LPARAM)TVI_ROOT))
364 #define TreeList_DeleteItem(h,i) ((BOOL )SNDMSG(h,TVM_DELETEITEM,0,(LPARAM)(HTREEITEM)(i)))
365 #define TreeList_Expand(h,i,c) ((BOOL )SNDMSG(h,TVM_EXPAND,(WPARAM)(c),(LPARAM)(HTREEITEM)(i)))
366 #define TreeList_GetHeader(h) ((HWND )SNDMSG(h,TVM_GETHEADER,0,0))
367 #define TreeList_DeleteColumn(h,i) ((BOOL )SNDMSG(h,TVM_DELETECOLUMN,(WPARAM)(int)(i),0))
368 #define TreeList_InsertColumn(h,i,p) ((INT )SNDMSG(h,TVM_INSERTCOLUMN,(WPARAM)(int)(i),(LPARAM)(const TV_COLUMN*)(p)))
369 #define TreeList_GetColumnCount(h) ((INT )SNDMSG(h,TVM_GETCOLUMNCOUNT,0,0))
370 #define TreeList_HitTest(h,p) ((HTREEITEM )SNDMSG(h,TVM_HITTEST,0,(LPARAM)(LPTV_HITTESTINFO)(p)))
371 #define TreeList_GetItemOfRow(h,r) ((HTREEITEM )SNDMSG(h,TVM_GETITEMOFROW,0,r))
372 #define TreeList_GetRowOfItem(h,i) ((INT )SNDMSG(h,TVM_GETROWOFITEM,0,(LPARAM)(i)))
373 #define TreeList_GetRowCount(h) ((INT )SNDMSG(h,TVM_GETROWCOUNT ,0,0))
374 #define TreeList_GetCountPerPage(h) ((INT )SNDMSG(h,TVM_GETCOUNTPERPAGE ,0,0))
375 #define TreeList_GetExtendedStyle(h) ((DWORD )SNDMSG(h,TVM_GETEXTENDEDSTYLE,0,0))
376 #define TreeList_SetExtendedStyle(h,d) ((DWORD )SNDMSG(h,TVM_SETEXTENDEDSTYLE,0,d))
377 #define TreeList_SetExtendedStyleEx(h,d,m) ((DWORD )SNDMSG(h,TVM_SETEXTENDEDSTYLE,m,d))
378 #define TreeList_GetColor(h,i) ((COLORREF )SNDMSG(h,TVM_GETBKCOLOR,(WPARAM)(i),0))
379 #define TreeList_SetColor(h,i,c) ((COLORREF )SNDMSG(h,TVM_SETBKCOLOR,(WPARAM)(i),c))
380 #define TreeList_GetItemBkColor(h,i,s) ((COLORREF )SNDMSG(h,TVM_GETITEMBKCOLOR,(WPARAM)(i),s))
381 #define TreeList_SetItemBkColor(h,i,s,c) ((COLORREF )SNDMSG(h,TVM_SETITEMBKCOLOR,((UINT)(i))|((s)<<24),c))
382 #define TreeList_GetItemTextColor(h,i,s) ((COLORREF )SNDMSG(h,TVM_GETITEMTEXTCOLOR,(WPARAM)(i),s))
383 #define TreeList_SetItemTextColor(h,i,s,c) ((COLORREF )SNDMSG(h,TVM_SETITEMTEXTCOLOR,((UINT)(i))|((s)<<24),c))
384 #define TreeList_IsItemVisible(h,i,s) ((INT )SNDMSG(h,TVM_ISITEMVISIBLE,s,(LPARAM)(HTREEITEM)(i)))
385 #define TreeList_EnsureVisible(h,i) ((BOOL )SNDMSG(h,TVM_ENSUREVISIBLE,0,(LPARAM)(HTREEITEM)(i)))
386 #define TreeList_EnsureVisibleEx(h,i,s) ((BOOL )SNDMSG(h,TVM_ENSUREVISIBLE,s,(LPARAM)(HTREEITEM)(i)))
387 #define TreeList_SelectDropTargetEx(h,i,s) ((BOOL )SNDMSG(h,TVM_SELECTDROP,(WPARAM)(s),(LPARAM)(HTREEITEM)(i)))
388 #define TreeList_SelectSubItem(h,i,s) ((BOOL )SNDMSG(h,TVM_SELECTSUBITEM,(WPARAM)(s),(LPARAM)(HTREEITEM)(i)))
389 #define TreeList_SelectChilds(h,i,s) ((BOOL )SNDMSG(h,TVM_SELECTCHILDS,(WPARAM)(s),(LPARAM)(HTREEITEM)(i)))
390 #define TreeList_Select(h,i,c) ((BOOL )SNDMSG(h,TVM_SELECTITEM,(WPARAM)(c),(LPARAM)(HTREEITEM)(i)))
391 #define TreeList_EditLabel(h,i,s) ((HWND )SNDMSG(h,TVM_EDITLABEL,s,(LPARAM)(HTREEITEM)(i)))
392 #define TreeList_StartEdit(h,i,s) ((BOOL )SNDMSG(h,TVM_EDITLABEL,TVIR_EDITCOL(s)|TVLE_DONOTIFY,(LPARAM)(HTREEITEM)(i)))
393 #define TreeList_EndEditLabelNow(h,c) ((BOOL )SNDMSG(h,TVM_ENDEDITLABELNOW,c,0))
394 #define TreeList_GetItem(h,p) ((BOOL )SNDMSG(h,TVM_GETITEM,0,(LPARAM)(TV_ITEM*)(p)))
395 #define TreeList_GetCount() ((BOOL )SNDMSG(h,TVM_GETCOUNT,0,0))
396 #define TreeList_GetEditControl(h) ((HWND )SNDMSG(h,TVM_GETEDITCONTROL,0,0))
397 #define TreeList_GetImageList(h,i) ((HIMAGELIST)SNDMSG(h,TVM_GETIMAGELIST,i,0))
398 #define TreeList_GetUserData(h,i) ((LPVOID )SNDMSG(h,TVM_GETUSERDATA,0,(LPARAM)(HTREEITEM)(i)))
399 #define TreeList_GetUserDataSize(h) ((INT )SNDMSG(h,TVM_GETUSERDATASIZE,0,0))
400 #define TreeList_SetUserDataSize(h,s) ((INT )SNDMSG(h,TVM_SETUSERDATASIZE,0,s))
401 #define TreeList_GetIndent ((UINT )SNDMSG(h,TVM_GETINDENT,0,0))
402 #define TreeList_GetVisibleCount ((UINT )SNDMSG(h,TVM_GETVISIBLECOUNT,0,0))
403 #define TreeList_InsertItem(h,p) ((HTREEITEM )SNDMSG(h,TVM_INSERTITEM,0,(LPARAM)(LPTV_INSERTSTRUCT)(p)))
404 #define TreeList_FindItem(h,p,f) ((HTREEITEM )SNDMSG(h,TVM_FINDITEM ,(WPARAM)p,(LPARAM)f))
405 #define TreeList_CreateDragImage(h,i) ((HIMAGELIST)SNDMSG(h,TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(i)))
406 #define TreeList_CreateDragImageEx(h,i,s) ((HIMAGELIST)SNDMSG(h,TVM_CREATEDRAGIMAGE, s, (LPARAM)(HTREEITEM)(i)))
407 #define TreeList_SetImageList(h,l,i) ((HIMAGELIST)SNDMSG(h,TVM_SETIMAGELIST,i,(LPARAM)(UINT)(HIMAGELIST)(l)))
408 #define TreeList_SetIndent(h,i) ((BOOL )SNDMSG(h,TVM_SETINDENT,(WPARAM)(i),0))
409 #define TreeList_SetItem(h,p) ((BOOL )SNDMSG(h,TVM_SETITEM,0,(LPARAM)(const TV_ITEM*)(p)))
410 #define TreeList_SortChildren(h,i,r) ((BOOL )SNDMSG(h,TVM_SORTCHILDREN ,(WPARAM)r,(LPARAM)(HTREEITEM)(i)))
411 #define TreeList_SortChildrenCB(h,p,r) ((BOOL )SNDMSG(h,TVM_SORTCHILDRENCB,(WPARAM)r,(LPARAM)(LPTV_SORTCB)(p)))
412 #define TreeList_SortChildrenEX(h,p,r) ((BOOL )SNDMSG(h,TVM_SORTCHILDRENEX,(WPARAM)r,(LPARAM)(LPTV_SORTEX)(p)))
413 #define TreeList_SetColumn(h,i,p) ((BOOL )SNDMSG(h,TVM_SETCOLUMN,i,(LPARAM)(const TV_COLUMN*)(p)))
414 #define TreeList_GetColumn(h,i,p) ((BOOL )SNDMSG(h,TVM_GETCOLUMN,i,(LPARAM)(TV_COLUMN*)(p)))
415 #define TreeList_SetColumnWidth(h,i,w) ((BOOL )SNDMSG(h,TVM_SETCOLUMNWIDTH,i,w))
416 #define TreeList_GetColumnWidth(h,i) ((INT )SNDMSG(h,TVM_GETCOLUMNWIDTH,i,0))
417 #define TreeList_SetColumnAutoEdit(h,i,f,p) ((BOOL )SNDMSG(h,TVM_COLUMNAUTOEDIT,(WPARAM)((f)&~TVAE_COL(-1))|TVAE_COL(i),(LPARAM)(p)))
418 #define TreeList_SetColumnAutoIcon(h,i,n) ((BOOL )SNDMSG(h,TVM_COLUMNAUTOICON,i,n))
419 #define TreeList_SetFocusItem(h,i,c) ((BOOL )SNDMSG(h,TVM_SETFOCUSITEM,c,(LPARAM)(i)))
420 #define TreeList_SetOption(h,i,o) ((INT )SNDMSG(h,TVM_GETSETOPTION,(i)|TVOP_WRITEOPTION,(LPARAM)(o)))
421 #define TreeList_GetOption(h,i) ((INT )SNDMSG(h,TVM_GETSETOPTION,i,0))
422 #define TreeList_SetColumnOrderArray(h,n,p) ((BOOL )SNDMSG(h,TVM_SETCOLUMNORDERARRAY,n,(LPARAM)(p)))
423 #define TreeList_GetColumnOrderArray(h,n,p) ((BOOL )SNDMSG(h,TVM_GETCOLUMNORDERARRAY,n,(LPARAM)(p)))
424 #define TreeList_GetStyle(h) ((DWORD )::GetWindowLong(h,GWL_STYLE))
425 #define TreeList_SetStyle(h,d) ((DWORD )::SetWindowLong(h,GWL_STYLE,d))
426 #define TreeList_SetStyleEx(h,d,m) ((DWORD )::SetWindowLong(h,GWL_STYLE,((d)&(m))|(::GetWindowLong(h,GWL_STYLE)&~(m))))
427 #define TreeList_GetItemRect(h,i,s,p,c) (*(HTREEITEM*)p =(i),(BOOL)SNDMSG(h,TVM_GETITEMRECT,(WPARAM)((c)|(TVIR_COLTOSUB(s))),(LPARAM)(RECT*)(p)))
428
429
430 #define TreeList_SelectItem(h,i) TreeList_Select(h,i,TVGN_CARET)
431 #define TreeList_SelectDropTarget(h,i) TreeList_Select(h,i,TVGN_DROPHILITE)
432 #define TreeList_SelectSetFirstVisible(h,i) TreeList_Select(h,i,TVGN_FIRSTVISIBLE)
433
434 #define TreeList_GetNextItem(h,i,c) TreeView_GetNextItem(h, i, c)
435 #define TreeList_GetChild(h,i) TreeView_GetNextItem(h, i, TVGN_CHILD)
436 #define TreeList_GetParent(h, i) TreeView_GetNextItem(h, i, TVGN_PARENT)
437 #define TreeList_GetNextSibling(h,i) TreeView_GetNextItem(h, i, TVGN_NEXT)
438 #define TreeList_GetPrevSibling(h,i) TreeView_GetNextItem(h, i, TVGN_PREVIOUS)
439 #define TreeList_GetNextSelected(h,i) TreeView_GetNextItem(h, i, TVGN_NEXTSELECTED)
440 #define TreeList_GetNextSelectedChild(h,i) TreeView_GetNextItem(h, i, TVGN_NEXTSELCHILD)
441 #define TreeList_GetNextVisible(h,i) TreeView_GetNextItem(h, i, TVGN_NEXTVISIBLE)
442 #define TreeList_GetPrevVisible(h,i) TreeView_GetNextItem(h, i, TVGN_PREVIOUSVISIBLE)
443 #define TreeList_GetLastChild(h,i) TreeView_GetNextItem(h, i, TVGN_LASTCHILD)
444 #define TreeList_GetSelection(h) TreeView_GetNextItem(h, NULL, TVGN_CARET)
445 #define TreeList_GetDropHilight(h) TreeView_GetNextItem(h, NULL, TVGN_DROPHILITE)
446 #define TreeList_GetFirstVisible(h) TreeView_GetNextItem(h, NULL, TVGN_FIRSTVISIBLE)
447 #define TreeList_GetLastVisible(h) TreeView_GetNextItem(h, NULL, TVGN_LASTVISIBLE)
448 #define TreeList_GetRoot(h) TreeView_GetNextItem(h, NULL, TVGN_ROOT)
449 #define TreeList_GetFocus(h) TreeView_GetNextItem(h, NULL, TVGN_FOCUS)
450 #define TreeList_GetFocusColumn(h) ((int)TreeView_GetNextItem(h, NULL, TVGN_FOCUSSUB))
451 #define TreeList_GetSelectionColumn(h) ((int)TreeView_GetNextItem(h, NULL, TVGN_CARETSUB))
452 #define TreeList_GetDropHilightColumn(h) ((int)TreeView_GetNextItem(h, NULL, TVGN_DROPHILITESUB))
453
454 extern int TreeListRegister(HINSTANCE hInstance);
455 extern BOOL TreeListUnregister(HINSTANCE hInstance);
456
457
458 /* Compat with my old code... */
459 #define TLCOLUMN TVCOLUMN
460 #define HTLITEM HTREEITEM
461 #define TL_INSERTSTRUCTA TV_INSERTSTRUCTA
462 #define TL_INSERTSTRUCTW TV_INSERTSTRUCTW
463 #define TL_INSERTSTRUCT TV_INSERTSTRUCT
464
465 /* New stuff */
466 #ifndef __REACTOS__
467 #define TreeList_SetItemText(hwndLV,hItem_,iSubItem_,pszText_) \
468 { \
469 TV_ITEM _ms_tvi; \
470 _ms_tvi.mask = TVIF_SUBITEM | TVIF_TEXT; \
471 _ms_tvi.hItem = (hItem_); \
472 _ms_tvi.stateMask = 0; \
473 _ms_tvi.pszText = (pszText_); \
474 _ms_tvi.cchTextMax = (pszText_) ? 256 : 0; \
475 _ms_tvi.cChildren = (iSubItem_); \
476 TreeList_SetItem((hwndLV), &_ms_tvi); \
477 }
478 #else // __REACTOS__
479 #define TreeList_SetItemText(hwndLV,hItem_,iSubItem_,pszText_) \
480 { \
481 TV_ITEM _ms_tvi; \
482 LPWSTR _my_pszText = (pszText_); \
483 _ms_tvi.mask = TVIF_SUBITEM | TVIF_TEXT; \
484 _ms_tvi.hItem = (hItem_); \
485 _ms_tvi.stateMask = 0; \
486 _ms_tvi.pszText = _my_pszText; \
487 _ms_tvi.cchTextMax = _my_pszText ? wcslen(_my_pszText) : 0; \
488 _ms_tvi.cChildren = (iSubItem_); \
489 TreeList_SetItem((hwndLV), &_ms_tvi); \
490 }
491 #endif // __REACTOS__
492
493 #endif