29d86126ffd05f3737e744d015fc730084156412
[reactos.git] / reactos / dll / cpl / usrmgr / groupprops.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS User Manager Control Panel
4 * FILE: dll/cpl/usrmgr/groupprops.c
5 * PURPOSE: Group property sheet
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 #include "usrmgr.h"
11
12
13 static VOID
14 GetGroupData(HWND hwndDlg, LPTSTR lpGroupName)
15 {
16 PLOCALGROUP_INFO_1 groupInfo = NULL;
17 PLOCALGROUP_MEMBERS_INFO_1 membersInfo = NULL;
18 DWORD dwRead;
19 DWORD dwTotal;
20 DWORD_PTR resumeHandle = 0;
21 DWORD i;
22 LV_ITEM lvi;
23 HWND hwndLV;
24 LV_COLUMN column;
25 RECT rect;
26 HIMAGELIST hImgList;
27 HICON hIcon;
28
29 hwndLV = GetDlgItem(hwndDlg, IDC_GROUP_GENERAL_MEMBERS);
30
31 /* Create the image list */
32 hImgList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 5, 5);
33 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_USER), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
34 ImageList_AddIcon(hImgList, hIcon);
35 hIcon = LoadImage(hApplet, MAKEINTRESOURCE(IDI_GROUP), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
36 ImageList_AddIcon(hImgList, hIcon);
37 DestroyIcon(hIcon);
38
39 (void)ListView_SetImageList(hwndLV, hImgList, LVSIL_SMALL);
40
41 /* Set the list column */
42 GetClientRect(hwndLV, &rect);
43
44 memset(&column, 0x00, sizeof(column));
45 column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM;
46 column.fmt = LVCFMT_LEFT;
47 column.cx = (INT)(rect.right - rect.left);
48 column.iSubItem = 0;
49 (void)ListView_InsertColumn(hwndLV, 0, &column);
50
51 /* Set group name */
52 SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_NAME, lpGroupName);
53
54 /* Set group description */
55 NetLocalGroupGetInfo(NULL, lpGroupName, 1, (LPBYTE*)&groupInfo);
56 SetDlgItemText(hwndDlg, IDC_GROUP_GENERAL_DESCRIPTION, groupInfo->lgrpi1_comment);
57 NetApiBufferFree(groupInfo);
58
59 /* Set group members */
60 NetLocalGroupGetMembers(NULL, lpGroupName, 1, (LPBYTE*)&membersInfo,
61 MAX_PREFERRED_LENGTH, &dwRead, &dwTotal,
62 &resumeHandle);
63
64 for (i = 0; i < dwRead; i++)
65 {
66 ZeroMemory(&lvi, sizeof(lvi));
67 lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;
68 lvi.pszText = membersInfo[i].lgrmi1_name;
69 lvi.state = 0;
70 lvi.iImage = (membersInfo[i].lgrmi1_sidusage == SidTypeGroup ||
71 membersInfo[i].lgrmi1_sidusage == SidTypeWellKnownGroup) ? 1 : 0;
72
73 (void)ListView_InsertItem(hwndLV, &lvi);
74 }
75
76 NetApiBufferFree(membersInfo);
77 }
78
79
80 INT_PTR CALLBACK
81 GroupGeneralPageProc(HWND hwndDlg,
82 UINT uMsg,
83 WPARAM wParam,
84 LPARAM lParam)
85 {
86 UNREFERENCED_PARAMETER(lParam);
87 UNREFERENCED_PARAMETER(wParam);
88 UNREFERENCED_PARAMETER(hwndDlg);
89
90 switch (uMsg)
91 {
92 case WM_INITDIALOG:
93 GetGroupData(hwndDlg,
94 (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam);
95 break;
96
97 case WM_COMMAND:
98 break;
99
100 case WM_DESTROY:
101 break;
102 }
103
104 return FALSE;
105 }
106
107
108 static VOID
109 InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LPTSTR pszGroup)
110 {
111 ZeroMemory(psp, sizeof(PROPSHEETPAGE));
112 psp->dwSize = sizeof(PROPSHEETPAGE);
113 psp->dwFlags = PSP_DEFAULT;
114 psp->hInstance = hApplet;
115 psp->pszTemplate = MAKEINTRESOURCE(idDlg);
116 psp->pfnDlgProc = DlgProc;
117 psp->lParam = (LPARAM)pszGroup;
118 }
119
120
121 VOID
122 GroupProperties(HWND hwndDlg)
123 {
124 PROPSHEETPAGE psp[1];
125 PROPSHEETHEADER psh;
126 TCHAR szGroupName[UNLEN];
127 INT nItem;
128 HWND hwndLV;
129
130 hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);
131 nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
132 if (nItem == -1)
133 return;
134
135 /* Get the new user name */
136 ListView_GetItemText(hwndLV,
137 nItem, 0,
138 szGroupName,
139 UNLEN);
140
141 ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
142 psh.dwSize = sizeof(PROPSHEETHEADER);
143 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
144 psh.hwndParent = hwndDlg;
145 psh.hInstance = hApplet;
146 psh.hIcon = NULL;
147 psh.pszCaption = szGroupName;
148 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
149 psh.nStartPage = 0;
150 psh.ppsp = psp;
151
152 InitPropSheetPage(&psp[0], IDD_GROUP_GENERAL, (DLGPROC)GroupGeneralPageProc, szGroupName);
153
154 PropertySheet(&psh);
155 }