ReactOS 0.4.15-dev-7924-g5949c20
propsheet_depends.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Services
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/mscutils/servman/propsheet_depends.c
5 * PURPOSE: Property dialog box message handler
6 * COPYRIGHT: Copyright 2006-2009 Ged Murphy <gedmurphy@reactos.org>
7 *
8 */
9
10#include "precomp.h"
11
14 HTREEITEM hParent,
16 LPWSTR lpServiceName,
17 ULONG ServiceType,
18 BOOL bHasChildren)
19{
20 TV_ITEM tvi;
21 TV_INSERTSTRUCT tvins;
24
25 ZeroMemory(&tvi, sizeof(tvi));
26 ZeroMemory(&tvins, sizeof(tvins));
27
29 tvi.pszText = lpDisplayName;
30 tvi.cchTextMax = wcslen(lpDisplayName);
31 tvi.cChildren = bHasChildren;
32
33 /* Select the image for this service */
34 switch (ServiceType)
35 {
38 tvi.iImage = IMAGE_SERVICE;
39 tvi.iSelectedImage = IMAGE_SERVICE;
40 break;
41
44 tvi.iImage = IMAGE_DRIVER;
45 tvi.iSelectedImage = IMAGE_DRIVER;
46 break;
47
48 default:
49 tvi.iImage = IMAGE_UNKNOWN;
50 tvi.iSelectedImage = IMAGE_UNKNOWN;
51 break;
52 }
53
54 if (lpServiceName)
55 {
56 dwSize = wcslen(lpServiceName) + 1;
57 /* Attach the service name */
59 0,
60 dwSize * sizeof(WCHAR));
61 if (lpName)
62 {
63 StringCchCopyW(lpName, dwSize, lpServiceName);
64 tvi.lParam = (LPARAM)lpName;
65 }
66 }
67
68 tvins.item = tvi;
69 tvins.hParent = hParent;
70
71 return TreeView_InsertItem(hTreeView, &tvins);
72}
73
74static LPARAM
77{
78 LPARAM lParam = 0;
79 TVITEMW tv = {0};
80
82 tv.hItem = hItem;
83
84 if (TreeView_GetItem(hTreeView, &tv))
85 {
86 lParam = tv.lParam;
87 }
88
89 return lParam;
90}
91
92static VOID
93DestroyItem(HWND hTreeView,
95{
96 HTREEITEM hChildItem;
97 LPWSTR lpServiceName;
98
99 /* Does this item have any children */
100 hChildItem = TreeView_GetChild(hTreeView, hItem);
101 if (hChildItem)
102 {
103 /* It does, recurse to that one */
104 DestroyItem(hTreeView, hChildItem);
105 }
106
107 /* Get the string and free it */
108 lpServiceName = (LPWSTR)TreeView_GetItemParam(hTreeView, hItem);
109 if (lpServiceName)
110 {
112 0,
113 lpServiceName);
114 }
115}
116
117static VOID
119{
121
122 /* Get the first item in the top level */
123 hItem = TreeView_GetFirstVisible(hTreeView);
124 if (hItem)
125 {
126 /* Kill it and all children */
127 DestroyItem(hTreeView, hItem);
128
129 /* Kill all remaining top level items */
130 while (hItem)
131 {
132 /* Are there any more items at the top level */
133 hItem = TreeView_GetNextSibling(hTreeView, hItem);
134 if (hItem)
135 {
136 /* Kill it and all children */
137 DestroyItem(hTreeView, hItem);
138 }
139 }
140 }
141}
142
143/*
144static BOOL
145TreeView_GetItemText(HWND hTreeView,
146 HTREEITEM hItem,
147 LPTSTR lpBuffer,
148 DWORD cbBuffer)
149{
150 TVITEM tv = {0};
151
152 tv.mask = TVIF_TEXT | TVIF_HANDLE;
153 tv.hItem = hItem;
154 tv.pszText = lpBuffer;
155 tv.cchTextMax = (int)cbBuffer;
156
157 return TreeView_GetItem(hTreeView, &tv);
158}
159*/
160
161static VOID
163{
164 /* Initialize the image list */
169 IMAGE_ICON);
170
171 /* Set the first tree view */
172 TV1_Initialize(pDependData, pDependData->pDlgInfo->pService->lpServiceName);
173
174 /* Set the second tree view */
175 TV2_Initialize(pDependData, pDependData->pDlgInfo->pService->lpServiceName);
176}
177
178/*
179 * Dependancies Property dialog callback.
180 * Controls messages to the Dependancies dialog
181 */
184 UINT uMsg,
187{
188 PDEPENDDATA pDependData;
189
190 /* Get the window context */
191 pDependData = (PDEPENDDATA)GetWindowLongPtr(hwndDlg,
193 if (pDependData == NULL && uMsg != WM_INITDIALOG)
194 {
195 return FALSE;
196 }
197
198 switch (uMsg)
199 {
200 case WM_INITDIALOG:
201 {
202 pDependData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DEPENDDATA));
203 if (pDependData != NULL)
204 {
205 SetWindowLongPtr(hwndDlg,
207 (LONG_PTR)pDependData);
208
209 pDependData->pDlgInfo = (PSERVICEPROPSHEET)(((LPPROPSHEETPAGE)lParam)->lParam);
210 pDependData->hDependsWnd = hwndDlg;
211
212 InitDependPage(pDependData);
213 }
214 }
215 break;
216
217 case WM_NOTIFY:
218 {
219 switch (((LPNMHDR)lParam)->code)
220 {
222 {
224
225 if (lpnmtv->action == TVE_EXPAND)
226 {
227 if (lpnmtv->hdr.idFrom == IDC_DEPEND_TREE1)
228 {
229 /* Has this node been expanded before */
230 if (!TreeView_GetChild(pDependData->hDependsTreeView1, lpnmtv->itemNew.hItem))
231 {
232 /* It's not, add the children */
233 TV1_AddDependantsToTree(pDependData, lpnmtv->itemNew.hItem, (LPWSTR)lpnmtv->itemNew.lParam);
234 }
235 }
236 else if (lpnmtv->hdr.idFrom == IDC_DEPEND_TREE2)
237 {
238 /* Has this node been expanded before */
239 if (!TreeView_GetChild(pDependData->hDependsTreeView2, lpnmtv->itemNew.hItem))
240 {
241 /* It's not, add the children */
242 TV2_AddDependantsToTree(pDependData, lpnmtv->itemNew.hItem, (LPWSTR)lpnmtv->itemNew.lParam);
243 }
244 }
245 }
246 break;
247 }
248 }
249 break;
250 }
251
252 case WM_COMMAND:
253 switch(LOWORD(wParam))
254 {
255
256 }
257 break;
258
259 case WM_DESTROY:
262
263 if (pDependData->hDependsImageList)
265
266 HeapFree(GetProcessHeap(), 0, pDependData);
267 }
268
269 return FALSE;
270}
HIMAGELIST InitImageList(UINT StartResource, UINT EndResource, UINT Width, UINT Height, ULONG type)
Definition: misc.c:219
struct _DEPENDDATA * PDEPENDDATA
struct _SERVICEPROPSHEET * PSERVICEPROPSHEET
#define IMAGE_SERVICE
Definition: precomp.h:37
#define IMAGE_DRIVER
Definition: precomp.h:38
#define IMAGE_UNKNOWN
Definition: precomp.h:36
#define IDC_DEPEND_TREE1
Definition: resource.h:175
#define IDC_DEPEND_TREE2
Definition: resource.h:176
#define IDI_NODEPENDS
Definition: resource.h:66
#define IDI_DRIVER
Definition: resource.h:68
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL TV1_Initialize(PDEPENDDATA pDependData, LPWSTR lpServiceName)
VOID TV1_AddDependantsToTree(PDEPENDDATA pDependData, HTREEITEM hParent, LPWSTR lpServiceName)
VOID TV2_AddDependantsToTree(PDEPENDDATA pDependData, HTREEITEM hParent, LPWSTR lpServiceName)
BOOL TV2_Initialize(PDEPENDDATA pDependData, LPWSTR lpServiceName)
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define LOWORD(l)
Definition: pedump.c:82
static VOID DestroyItem(HWND hTreeView, HTREEITEM hItem)
INT_PTR CALLBACK DependenciesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static VOID InitDependPage(PDEPENDDATA pDependData)
static VOID DestroyTreeView(HWND hTreeView)
static LPARAM TreeView_GetItemParam(HWND hTreeView, HTREEITEM hItem)
HTREEITEM AddItemToTreeView(HWND hTreeView, HTREEITEM hParent, LPWSTR lpDisplayName, LPWSTR lpServiceName, ULONG ServiceType, BOOL bHasChildren)
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define TVIF_TEXT
Definition: commctrl.h:3266
#define TreeView_GetChild(hwnd, hitem)
Definition: commctrl.h:3466
#define TVIF_IMAGE
Definition: commctrl.h:3267
#define LPNMTREEVIEW
Definition: commctrl.h:3643
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3490
#define TVE_EXPAND
Definition: commctrl.h:3423
#define TV_INSERTSTRUCT
Definition: commctrl.h:3377
#define TreeView_GetFirstVisible(hwnd)
Definition: commctrl.h:3470
#define TV_ITEM
Definition: commctrl.h:3300
#define TVIF_HANDLE
Definition: commctrl.h:3270
#define TreeView_GetNextSibling(hwnd, hitem)
Definition: commctrl.h:3467
#define TVN_ITEMEXPANDING
Definition: commctrl.h:3738
#define TVIF_PARAM
Definition: commctrl.h:3268
#define TVIF_CHILDREN
Definition: commctrl.h:3272
#define TreeView_InsertItem(hwnd, lpis)
Definition: commctrl.h:3412
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3271
#define WM_NOTIFY
Definition: richedit.h:61
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
PSERVICEPROPSHEET pDlgInfo
Definition: precomp.h:138
HWND hDependsTreeView1
Definition: precomp.h:141
HIMAGELIST hDependsImageList
Definition: precomp.h:139
HWND hDependsTreeView2
Definition: precomp.h:142
ENUM_SERVICE_STATUS_PROCESS * pService
Definition: precomp.h:132
Definition: inflate.c:139
HTREEITEM hItem
Definition: commctrl.h:3317
LPARAM lParam
Definition: commctrl.h:3325
UINT mask
Definition: commctrl.h:3316
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define GWLP_USERDATA
Definition: treelist.c:63
HTREEITEM hItem
Definition: treelist.h:37
int32_t INT_PTR
Definition: typedefs.h:64
uint32_t ULONG
Definition: typedefs.h:59
#define ZeroMemory
Definition: winbase.h:1712
_In_ LPCSTR _Out_writes_to_opt_ cchDisplayName LPSTR lpDisplayName
Definition: winbase.h:2790
_In_ LPCSTR lpName
Definition: winbase.h:2789
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define IMAGE_ICON
Definition: winuser.h:212
#define WM_COMMAND
Definition: winuser.h:1740
#define WM_INITDIALOG
Definition: winuser.h:1739
#define SM_CXSMICON
Definition: winuser.h:1012
#define WM_DESTROY
Definition: winuser.h:1609
int WINAPI GetSystemMetrics(_In_ int)
#define SERVICE_KERNEL_DRIVER
Definition: cmtypes.h:953
#define SERVICE_WIN32_SHARE_PROCESS
Definition: cmtypes.h:963
#define SERVICE_WIN32_OWN_PROCESS
Definition: cmtypes.h:962
#define SERVICE_FILE_SYSTEM_DRIVER
Definition: cmtypes.h:954
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184