ReactOS 0.4.16-dev-303-g11d5cb8
listview.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/listview.c
5 * PURPOSE: service listview manipulation functions
6 * COPYRIGHT: Copyright 2006-2007 Ged Murphy <gedmurphy@reactos.org>
7 *
8 */
9
10#include "precomp.h"
11
12typedef struct _COLUMN_LIST
13{
15 int cx;
18
19static const COLUMN_LIST Columns[] =
20{
21 /* name */
22 { LVNAME, 150, IDS_FIRSTCOLUMN },
23 /* description */
24 { LVDESC, 240, IDS_SECONDCOLUMN },
25 /* status */
27 /* startup type */
29 /* logon as */
30 { LVLOGONAS, 100, IDS_FITHCOLUMN },
31};
32
33VOID
35 DWORD View)
36{
38
39 if ((Style & LVS_TYPEMASK) != View)
40 {
41 SetWindowLongPtr(hListView,
43 (Style & ~LVS_TYPEMASK) | View);
44 }
45}
46
47VOID
49 LPNMLISTVIEW pnmv)
50{
52
53 /* get handle to menu */
54 hMainMenu = GetMenu(Info->hMainWnd);
55
56 /* activate properties menu item, if not already */
58 ID_PROP,
60 {
62 ID_PROP,
64 EnableMenuItem(GetSubMenu(Info->hShortcutMenu, 0),
65 ID_PROP,
67 SetMenuDefaultItem(GetSubMenu(Info->hShortcutMenu, 0),
68 ID_PROP,
70 }
71
72 /* activate delete menu item, if not already */
76 {
80 EnableMenuItem(GetSubMenu(Info->hShortcutMenu, 0),
83 }
84
85 /* set selected service */
86 Info->SelectedItem = pnmv->iItem;
87
88 /* get pointer to selected service */
89 Info->pCurrentService = GetSelectedService(Info);
90
91 /* set current selected service in the status bar */
92 SendMessage(Info->hStatus,
94 1,
95 (LPARAM)Info->pCurrentService->lpDisplayName);
96
97 /* show the properties button */
98 SendMessage(Info->hTool,
100 ID_PROP,
102}
103
104VOID
107 UINT Column)
108{
109 LVFINDINFO lvfi;
110 LVITEM lvItem;
111 INT index;
112
113 lvfi.flags = LVFI_PARAM;
114 lvfi.lParam = (LPARAM)pService;
115 index = ListView_FindItem(Info->hListView,
116 -1,
117 &lvfi);
118 if (index != -1)
119 {
120 lvItem.iItem = index;
121 lvItem.iSubItem = Column;
122
123 switch (Column)
124 {
125 case LVNAME:
126 {
127 LPQUERY_SERVICE_CONFIG lpServiceConfig;
128
129 lpServiceConfig = GetServiceConfig(pService->lpServiceName);
130 if (lpServiceConfig)
131 {
132 lvItem.pszText = lpServiceConfig->lpDisplayName;
133 SendMessage(Info->hListView,
135 lvItem.iItem,
136 (LPARAM)&lvItem);
137
139 0,
140 lpServiceConfig);
141 }
142 }
143 break;
144
145 case LVDESC:
146 {
147 LPWSTR lpDescription;
148
149 lpDescription = GetServiceDescription(pService->lpServiceName);
150
151 lvItem.pszText = lpDescription;
152 SendMessage(Info->hListView,
154 lvItem.iItem,
155 (LPARAM) &lvItem);
156
158 0,
159 lpDescription);
160 }
161 break;
162
163 case LVSTATUS:
164 {
165 WCHAR szStatus[64];
166
168 {
171 szStatus,
172 sizeof(szStatus) / sizeof(WCHAR));
173 }
174 else
175 {
176 szStatus[0] = 0;
177 }
178
179 lvItem.pszText = szStatus;
180 SendMessageW(Info->hListView,
182 lvItem.iItem,
183 (LPARAM) &lvItem);
184 }
185 break;
186
187 case LVSTARTUP:
188 {
189 LPQUERY_SERVICE_CONFIGW lpServiceConfig;
190 LPWSTR lpStartup = NULL;
191 DWORD StringId = 0;
192
193 lpServiceConfig = GetServiceConfig(pService->lpServiceName);
194
195 if (lpServiceConfig)
196 {
197 switch (lpServiceConfig->dwStartType)
198 {
199 case 2: StringId = IDS_SERVICES_AUTO; break;
200 case 3: StringId = IDS_SERVICES_MAN; break;
201 case 4: StringId = IDS_SERVICES_DIS; break;
202 }
203 }
204
205 if (StringId)
206 AllocAndLoadString(&lpStartup,
207 hInstance,
208 StringId);
209
210 lvItem.pszText = lpStartup;
211 SendMessageW(Info->hListView,
213 lvItem.iItem,
214 (LPARAM)&lvItem);
215
216 LocalFree(lpStartup);
218 0,
219 lpServiceConfig);
220 }
221 break;
222
223 case LVLOGONAS:
224 {
225 LPQUERY_SERVICE_CONFIG lpServiceConfig;
226
227 lpServiceConfig = GetServiceConfig(pService->lpServiceName);
228 if (lpServiceConfig)
229 {
230 lvItem.pszText = lpServiceConfig->lpServiceStartName;
231 SendMessageW(Info->hListView,
233 lvItem.iItem,
234 (LPARAM)&lvItem);
235
237 0,
238 lpServiceConfig);
239 }
240 }
241 break;
242 }
243 }
244}
245
246BOOL
248{
250 LVITEMW lvItem;
251 DWORD Index;
252
253 SendMessage (Info->hListView,
255 FALSE,
256 0);
257
258 (void)ListView_DeleteAllItems(Info->hListView);
259
260 if (GetServiceList(Info))
261 {
262 for (Index = 0; Index < Info->NumServices; Index++)
263 {
264 INT i;
265
266 pService = &Info->pAllServices[Index];
267
268 /* set the display name */
269 ZeroMemory(&lvItem, sizeof(LVITEMW));
270 lvItem.mask = LVIF_TEXT | LVIF_PARAM;
271 lvItem.pszText = pService->lpDisplayName;
272
273 /* Add the service pointer */
274 lvItem.lParam = (LPARAM)pService;
275
276 /* add it to the listview */
277 lvItem.iItem = ListView_InsertItem(Info->hListView, &lvItem);
278
279 /* fill out all the column data */
280 for (i = LVDESC; i <= LVLOGONAS; i++)
281 {
282 ChangeListViewText(Info, pService, i);
283 }
284 }
285
287 }
288
289 /* turn redraw flag on. */
290 SendMessageW(Info->hListView,
292 TRUE,
293 0);
294
295 return TRUE;
296}
297
298static VOID
300{
301 HICON hSmIconItem, hLgIconItem;
302 HIMAGELIST hSmall, hLarge;
303
307 1,
308 1);
309 if (hSmall)
310 {
311 hSmIconItem = LoadImageW(hInstance,
314 16,
315 16,
316 0);
317 if (hSmIconItem)
318 {
319 ImageList_AddIcon(hSmall,
320 hSmIconItem);
321 (void)ListView_SetImageList(Info->hListView,
322 hSmall,
324
325 DestroyIcon(hSmIconItem);
326 }
327 }
328
332 1,
333 1);
334 if (hLarge)
335 {
336 hLgIconItem = LoadImageW(hInstance,
339 32,
340 32,
341 0);
342 if (hLgIconItem)
343 {
344 ImageList_AddIcon(hLarge,
345 hLgIconItem);
346 (void)ListView_SetImageList(Info->hListView,
347 hLarge,
349 DestroyIcon(hLgIconItem);
350 }
351 }
352}
353
354BOOL
356{
357 LVCOLUMNW lvc = { 0 };
358 WCHAR szTemp[256];
359 HDITEM hdi;
360 int i, n;
361
364 NULL,
367 0, 0, 0, 0,
368 Info->hMainWnd,
370 hInstance,
371 NULL);
372 if (Info->hListView == NULL)
373 {
374 MessageBoxW(Info->hMainWnd,
375 L"Could not create List View.",
376 L"Error",
378 return FALSE;
379 }
380
381 Info->hHeader = ListView_GetHeader(Info->hListView);
382
384 LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);/*LVS_EX_GRIDLINES |*/
385
387 lvc.fmt = LVCFMT_LEFT;
388 lvc.pszText = szTemp;
389
390 /* Add columns to the list-view */
391 for (n = 0; n < sizeof(Columns) / sizeof(Columns[0]); n++)
392 {
393 lvc.iSubItem = Columns[n].iSubItem;
394 lvc.cx = Columns[n].cx;
395
397 Columns[n].idsText,
398 szTemp,
399 sizeof(szTemp) / sizeof(szTemp[0]));
400
401 i = ListView_InsertColumn(Info->hListView, Columns[n].iSubItem, &lvc);
402
403 hdi.mask = HDI_LPARAM;
404 hdi.lParam = ORD_ASCENDING;
405 (void)Header_SetItem(Info->hHeader, i, &hdi);
406 }
407
409
410 /* check the details view menu item */
416
417 return TRUE;
418}
const DWORD Style
Definition: appswitch.c:71
INT AllocAndLoadString(OUT LPTSTR *lpTarget, IN HINSTANCE hInst, IN UINT uID)
Definition: misc.c:59
struct _COLUMN_LIST COLUMN_LIST
VOID SetListViewStyle(HWND hListView, DWORD View)
Definition: listview.c:34
BOOL RefreshServiceList(PMAIN_WND_INFO Info)
Definition: listview.c:247
VOID ChangeListViewText(PMAIN_WND_INFO Info, ENUM_SERVICE_STATUS_PROCESS *pService, UINT Column)
Definition: listview.c:105
static VOID InitListViewImage(PMAIN_WND_INFO Info)
Definition: listview.c:299
VOID ListViewSelectionChanged(PMAIN_WND_INFO Info, LPNMLISTVIEW pnmv)
Definition: listview.c:48
static const COLUMN_LIST Columns[]
Definition: listview.c:19
BOOL CreateListView(PMAIN_WND_INFO Info)
Definition: listview.c:355
VOID UpdateServiceCount(PMAIN_WND_INFO Info)
Definition: mainwnd.c:125
LPQUERY_SERVICE_CONFIG GetServiceConfig(LPWSTR lpServiceName)
Definition: query.c:29
#define LVLOGONAS
Definition: precomp.h:33
#define LVDESC
Definition: precomp.h:30
ENUM_SERVICE_STATUS_PROCESS * GetSelectedService(PMAIN_WND_INFO Info)
Definition: query.c:13
#define ORD_ASCENDING
Definition: precomp.h:46
HANDLE ProcessHeap
Definition: servman.c:15
BOOL GetServiceList(PMAIN_WND_INFO Info)
Definition: query.c:279
#define LVSTATUS
Definition: precomp.h:31
#define LVSTARTUP
Definition: precomp.h:32
LPWSTR GetServiceDescription(LPWSTR lpServiceName)
Definition: query.c:135
#define LVNAME
Definition: precomp.h:29
#define ID_VIEW_LARGE
Definition: resource.h:33
#define IDS_SERVICES_AUTO
Definition: resource.h:59
#define ID_DELETE
Definition: resource.h:25
#define ID_PROP
Definition: resource.h:15
#define IDS_SECONDCOLUMN
Definition: resource.h:41
#define IDS_FOURTHCOLUMN
Definition: resource.h:43
#define IDS_THIRDCOLUMN
Definition: resource.h:42
#define IDC_SERVLIST
Definition: resource.h:11
#define IDS_SERVICES_MAN
Definition: resource.h:60
#define IDI_SM_ICON
Definition: resource.h:64
#define IDS_SERVICES_STARTED
Definition: resource.h:57
#define IDS_FIRSTCOLUMN
Definition: resource.h:40
#define ID_VIEW_DETAILS
Definition: resource.h:36
#define IDS_FITHCOLUMN
Definition: resource.h:44
#define IDS_SERVICES_DIS
Definition: resource.h:61
#define index(s, c)
Definition: various.h:29
HINSTANCE hInstance
Definition: charmap.c:19
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
#define HeapFree(x, y, z)
Definition: compat.h:735
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLdouble n
Definition: glext.h:7729
GLuint index
Definition: glext.h:6031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
static HICON
Definition: imagelist.c:80
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HMENU hMainMenu
Definition: mplay32.c:25
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define WS_CHILD
Definition: pedump.c:617
#define WS_BORDER
Definition: pedump.c:625
#define WS_VISIBLE
Definition: pedump.c:620
#define LBS_NOTIFY
Definition: pedump.c:678
#define LBS_NOREDRAW
Definition: pedump.c:680
#define LVM_SETITEMTEXT
Definition: commctrl.h:2694
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define ListView_InsertItem(hwnd, pitem)
Definition: commctrl.h:2413
#define LVM_SETITEMTEXTW
Definition: commctrl.h:2692
#define LVFINDINFO
Definition: commctrl.h:2468
#define ListView_InsertColumn(hwnd, iCol, pcol)
Definition: commctrl.h:2641
#define ListView_SetImageList(hwnd, himl, iImageList)
Definition: commctrl.h:2309
#define WC_LISTVIEWW
Definition: commctrl.h:2262
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define LVS_TYPEMASK
Definition: commctrl.h:2270
#define ListView_GetHeader(hwnd)
Definition: commctrl.h:2656
#define TB_SETSTATE
Definition: commctrl.h:1054
#define LVS_EX_HEADERDRAGDROP
Definition: commctrl.h:2738
#define LVFI_PARAM
Definition: commctrl.h:2441
#define LVS_REPORT
Definition: commctrl.h:2267
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define ILC_COLOR32
Definition: commctrl.h:358
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2739
#define LVS_SORTASCENDING
Definition: commctrl.h:2273
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
Definition: commctrl.h:2730
#define LVITEM
Definition: commctrl.h:2380
#define LVIF_PARAM
Definition: commctrl.h:2316
#define ListView_DeleteAllItems(hwnd)
Definition: commctrl.h:2419
#define LVIF_TEXT
Definition: commctrl.h:2314
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define LVCF_FMT
Definition: commctrl.h:2591
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define HDI_LPARAM
Definition: commctrl.h:706
#define LVCF_SUBITEM
Definition: commctrl.h:2594
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define ILC_MASK
Definition: commctrl.h:351
#define SB_SETTEXT
Definition: commctrl.h:1954
#define LVCF_TEXT
Definition: commctrl.h:2593
#define HDITEM
Definition: commctrl.h:697
#define ListView_FindItem(hwnd, iStart, plvfi)
Definition: commctrl.h:2475
#define LVSIL_NORMAL
Definition: commctrl.h:2303
UINT idsText
Definition: listview.c:16
int iSubItem
Definition: listview.c:14
SERVICE_STATUS_PROCESS ServiceStatusProcess
Definition: winsvc.h:137
LPSTR lpServiceStartName
Definition: winsvc.h:152
LPWSTR pszText
Definition: commctrl.h:2572
LPWSTR pszText
Definition: commctrl.h:2370
UINT mask
Definition: commctrl.h:2365
LPARAM lParam
Definition: commctrl.h:2373
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT
Definition: typedefs.h:58
#define MAKELONG(a, b)
Definition: typedefs.h:249
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_In_ WDFCOLLECTION _In_ ULONG Index
#define ZeroMemory
Definition: winbase.h:1737
LONG_PTR LPARAM
Definition: windef.h:208
#define SERVICE_RUNNING
Definition: winsvc.h:24
#define MF_BYCOMMAND
Definition: winuser.h:202
BOOL WINAPI SetMenuDefaultItem(_In_ HMENU, _In_ UINT, _In_ UINT)
UINT WINAPI GetMenuState(_In_ HMENU, _In_ UINT, _In_ UINT)
#define IMAGE_ICON
Definition: winuser.h:212
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2255
#define SM_CYSMICON
Definition: winuser.h:1016
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_ICONERROR
Definition: winuser.h:790
#define SM_CXSMICON
Definition: winuser.h:1015
#define SM_CYICON
Definition: winuser.h:976
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define MF_ENABLED
Definition: winuser.h:128
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define SendMessage
Definition: winuser.h:5855
#define MB_OK
Definition: winuser.h:793
BOOL WINAPI CheckMenuRadioItem(_In_ HMENU, _In_ UINT, _In_ UINT, _In_ UINT, _In_ UINT)
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define GWL_STYLE
Definition: winuser.h:855
#define SM_CXICON
Definition: winuser.h:975
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MAKEINTRESOURCE
Definition: winuser.h:591
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HMENU WINAPI GetMenu(_In_ HWND)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2105
#define WM_SETREDRAW
Definition: winuser.h:1619
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184