-/* $Id$\r
- *\r
+/*\r
* COPYRIGHT: See COPYING in the top level directory\r
* PROJECT: ReactOS User Manager Control Panel\r
* FILE: dll/cpl/usrmgr/groups.c\r
for (i = 0; i < entriesread; i++)\r
{\r
memset(&lvi, 0x00, sizeof(lvi));\r
- lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE; // | LVIF_PARAM;\r
-// lvi.lParam = (LPARAM)VarData;\r
+ lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;\r
lvi.pszText = pBuffer[i].lgrpi1_name;\r
- lvi.state = 0; //(i == 0) ? LVIS_SELECTED : 0;\r
+ lvi.state = 0;\r
lvi.iImage = 0;\r
iItem = ListView_InsertItem(hwndListView, &lvi);\r
\r
}\r
\r
\r
+INT_PTR CALLBACK\r
+NewGroupDlgProc(HWND hwndDlg,\r
+ UINT uMsg,\r
+ WPARAM wParam,\r
+ LPARAM lParam)\r
+{\r
+ PLOCALGROUP_INFO_1 groupInfo;\r
+ INT nLength;\r
+\r
+ UNREFERENCED_PARAMETER(wParam);\r
+\r
+ groupInfo = (PLOCALGROUP_INFO_1)GetWindowLongPtr(hwndDlg, DWLP_USER);\r
+\r
+ switch (uMsg)\r
+ {\r
+ case WM_INITDIALOG:\r
+ SetWindowLongPtr(hwndDlg, DWLP_USER, lParam);\r
+ groupInfo = (PLOCALGROUP_INFO_1)lParam;\r
+ SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, EM_SETLIMITTEXT, 20, 0);\r
+ break;\r
+\r
+ case WM_COMMAND:\r
+ switch (LOWORD(wParam))\r
+ {\r
+ case IDC_GROUP_NEW_NAME:\r
+ if (HIWORD(wParam) == EN_CHANGE)\r
+ {\r
+ nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);\r
+ EnableWindow(GetDlgItem(hwndDlg, IDOK), (nLength > 0));\r
+ }\r
+ break;\r
+\r
+ case IDOK:\r
+\r
+ nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_NAME, WM_GETTEXTLENGTH, 0, 0);\r
+ if (nLength > 0)\r
+ {\r
+ groupInfo->lgrpi1_name = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));\r
+ GetDlgItemText(hwndDlg, IDC_GROUP_NEW_NAME, groupInfo->lgrpi1_name, nLength + 1);\r
+ }\r
+\r
+ nLength = SendDlgItemMessage(hwndDlg, IDC_GROUP_NEW_DESCRIPTION, WM_GETTEXTLENGTH, 0, 0);\r
+ if (nLength > 0)\r
+ {\r
+ groupInfo->lgrpi1_comment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nLength + 1) * sizeof(WCHAR));\r
+ GetDlgItemText(hwndDlg, IDC_GROUP_NEW_DESCRIPTION, groupInfo->lgrpi1_comment, nLength + 1);\r
+ }\r
+\r
+ EndDialog(hwndDlg, IDOK);\r
+ break;\r
+\r
+ case IDCANCEL:\r
+ EndDialog(hwndDlg, IDCANCEL);\r
+ break;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ return FALSE;\r
+ }\r
+\r
+ return TRUE;\r
+}\r
+\r
+\r
+static VOID\r
+GroupNew(HWND hwndDlg)\r
+{\r
+ NET_API_STATUS status;\r
+ LOCALGROUP_INFO_1 group;\r
+ LV_ITEM lvi;\r
+ INT iItem;\r
+ HWND hwndLV;\r
+\r
+ ZeroMemory(&group, sizeof(LOCALGROUP_INFO_1));\r
+\r
+ if (DialogBoxParam(hApplet,\r
+ MAKEINTRESOURCE(IDD_GROUP_NEW),\r
+ hwndDlg,\r
+ NewGroupDlgProc,\r
+ (LPARAM)&group) == IDOK)\r
+ {\r
+#if 0\r
+ status = NetLocalGroupAdd(NULL,\r
+ 1,\r
+ (LPBYTE)&group,\r
+ NULL);\r
+#else\r
+ status = NERR_Success;\r
+#endif\r
+ if (status != NERR_Success)\r
+ {\r
+ TCHAR szText[256];\r
+ wsprintf(szText, TEXT("Error: %u"), status);\r
+ MessageBox(NULL, szText, TEXT("NetUserAdd"), MB_ICONERROR | MB_OK);\r
+ return;\r
+ }\r
+\r
+ hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);\r
+\r
+ ZeroMemory(&lvi, sizeof(lvi));\r
+ lvi.mask = LVIF_TEXT | LVIF_STATE | LVIF_IMAGE;\r
+ lvi.pszText = group.lgrpi1_name;\r
+ lvi.state = 0;\r
+ lvi.iImage = 0;\r
+ iItem = ListView_InsertItem(hwndLV, &lvi);\r
+\r
+ ListView_SetItemText(hwndLV, iItem, 1,\r
+ group.lgrpi1_comment);\r
+ }\r
+\r
+ if (group.lgrpi1_name)\r
+ HeapFree(GetProcessHeap, 0, group.lgrpi1_name);\r
+\r
+ if (group.lgrpi1_comment)\r
+ HeapFree(GetProcessHeap, 0, group.lgrpi1_comment);\r
+}\r
+\r
+\r
+static VOID\r
+GroupRename(HWND hwndDlg)\r
+{\r
+ INT nItem;\r
+ HWND hwndLV;\r
+\r
+ hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);\r
+ nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);\r
+ if (nItem != -1)\r
+ {\r
+ (void)ListView_EditLabel(hwndLV, nItem);\r
+ }\r
+}\r
+\r
+\r
+static BOOL\r
+GroupDelete(HWND hwndDlg)\r
+{\r
+ TCHAR szGroupName[UNLEN];\r
+ TCHAR szText[256];\r
+ INT nItem;\r
+ HWND hwndLV;\r
+ NET_API_STATUS status;\r
+\r
+ hwndLV = GetDlgItem(hwndDlg, IDC_GROUPS_LIST);\r
+ nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);\r
+ if (nItem == -1)\r
+ return FALSE;\r
+\r
+ /* Get the new group name */\r
+ ListView_GetItemText(hwndLV,\r
+ nItem, 0,\r
+ szGroupName,\r
+ UNLEN);\r
+\r
+ /* Display a warning message because the delete operation cannot be reverted */\r
+ wsprintf(szText, TEXT("Dou you really want to delete the user group \"%s\"?"), szGroupName);\r
+ if (MessageBox(NULL, szText, TEXT("User Groups"), MB_ICONWARNING | MB_YESNO) == IDNO)\r
+ return FALSE;\r
+\r
+ /* Delete the group */\r
+#if 0\r
+ status = NetLocalGroupDel(NULL, szGroupName);\r
+#else\r
+ status = NERR_Success;\r
+#endif\r
+ if (status != NERR_Success)\r
+ {\r
+ TCHAR szText[256];\r
+ wsprintf(szText, TEXT("Error: %u"), status);\r
+ MessageBox(NULL, szText, TEXT("NetLocalGroupDel"), MB_ICONERROR | MB_OK);\r
+ return FALSE;\r
+ }\r
+\r
+ /* Delete the group from the list */\r
+ (void)ListView_DeleteItem(hwndLV, nItem);\r
+\r
+ return TRUE;\r
+}\r
+\r
+\r
static VOID\r
OnInitDialog(HWND hwndDlg)\r
{\r
SetGroupsListColumns(hwndListView);\r
\r
UpdateGroupsList(hwndListView);\r
+}\r
+\r
+\r
+static BOOL\r
+OnBeginLabelEdit(LPNMLVDISPINFO pnmv)\r
+{\r
+ HWND hwndEdit;\r
+\r
+ hwndEdit = ListView_GetEditControl(pnmv->hdr.hwndFrom);\r
+ if (hwndEdit == NULL)\r
+ return TRUE;\r
\r
-// (void)ListView_SetColumnWidth(hwndListView, 3, LVSCW_AUTOSIZE_USEHEADER);\r
-// (void)ListView_Update(hwndListView, 0);\r
+ SendMessage(hwndEdit, EM_SETLIMITTEXT, 20, 0);\r
+\r
+ return FALSE;\r
}\r
\r
\r
-static VOID\r
+static BOOL\r
+OnEndLabelEdit(LPNMLVDISPINFO pnmv)\r
+{\r
+ TCHAR szOldGroupName[UNLEN];\r
+ TCHAR szNewGroupName[UNLEN];\r
+ LOCALGROUP_INFO_0 lgrpi0;\r
+ NET_API_STATUS status;\r
+\r
+ /* Leave, if there is no valid listview item */\r
+ if (pnmv->item.iItem == -1)\r
+ return FALSE;\r
+\r
+ /* Get the new user name */\r
+ ListView_GetItemText(pnmv->hdr.hwndFrom,\r
+ pnmv->item.iItem, 0,\r
+ szOldGroupName,\r
+ UNLEN);\r
+\r
+ /* Leave, if the user canceled the edit action */\r
+ if (pnmv->item.pszText == NULL)\r
+ return FALSE;\r
+\r
+ /* Get the new user name */\r
+ lstrcpy(szNewGroupName, pnmv->item.pszText);\r
+\r
+ /* Leave, if the user name was not changed */\r
+ if (lstrcmp(szOldGroupName, szNewGroupName) == 0)\r
+ return FALSE;\r
+\r
+\r
+ /* Change the user name */\r
+ lgrpi0.lgrpi0_name = szNewGroupName;\r
+\r
+#if 0\r
+ status = NetLocalGroupSetInfo(NULL, szOldGroupName, 0, (LPBYTE)&lgrpi0, NULL);\r
+#else\r
+ status = NERR_Success;\r
+#endif\r
+ if (status != NERR_Success)\r
+ {\r
+ TCHAR szText[256];\r
+ wsprintf(szText, TEXT("Error: %u"), status);\r
+ MessageBox(NULL, szText, TEXT("NetLocalGroupSetInfo"), MB_ICONERROR | MB_OK);\r
+ return FALSE;\r
+ }\r
+\r
+ /* Update the listview item */\r
+ ListView_SetItemText(pnmv->hdr.hwndFrom,\r
+ pnmv->item.iItem, 0,\r
+ szNewGroupName);\r
+\r
+ return TRUE;\r
+}\r
+\r
+\r
+static BOOL\r
OnNotify(HWND hwndDlg, PGROUP_DATA pGroupData, NMHDR *phdr)\r
{\r
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr;\r
TrackPopupMenu(GetSubMenu(pGroupData->hPopupMenu, (lpnmlv->iItem == -1) ? 0 : 1),\r
TPM_LEFTALIGN, lpnmlv->ptAction.x, lpnmlv->ptAction.y, 0, hwndDlg, NULL);\r
break;\r
+\r
+ case LVN_BEGINLABELEDIT:\r
+ return OnBeginLabelEdit((LPNMLVDISPINFO)phdr);\r
+\r
+ case LVN_ENDLABELEDIT:\r
+ return OnEndLabelEdit((LPNMLVDISPINFO)phdr);\r
}\r
break;\r
}\r
+\r
+ return FALSE;\r
}\r
\r
\r
break;\r
\r
case WM_COMMAND:\r
+ switch (LOWORD(wParam))\r
+ {\r
+ case IDM_GROUP_NEW:\r
+ GroupNew(hwndDlg);\r
+ break;\r
+\r
+ case IDM_GROUP_RENAME:\r
+ GroupRename(hwndDlg);\r
+ break;\r
+\r
+ case IDM_GROUP_DELETE:\r
+ GroupDelete(hwndDlg);\r
+ break;\r
+ }\r
break;\r
\r
case WM_NOTIFY:\r
- OnNotify(hwndDlg, pGroupData, (NMHDR *)lParam);\r
- break;\r
+ return OnNotify(hwndDlg, pGroupData, (NMHDR *)lParam);\r
\r
case WM_DESTROY:\r
DestroyMenu(pGroupData->hPopupMenu);\r
END
+IDD_GROUP_NEW DIALOGEX DISCARDABLE 0, 0, 267, 74
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
+CAPTION "New Group"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ EDITTEXT IDC_GROUP_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL
+ RTEXT "Group name:", -1,7,10,96,8
+ EDITTEXT IDC_GROUP_NEW_DESCRIPTION,107,25,153,14,ES_AUTOHSCROLL
+ RTEXT "Description:", -1,7,28,96,8
+ DEFPUSHBUTTON "OK",IDOK,156,53,50,14,WS_DISABLED
+ PUSHBUTTON "Cancel",IDCANCEL,210,53,50,14
+END
+
+
/* Menus */
IDM_POPUP_GROUP MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
- MENUITEM "New Group...", IDM_GROUP_NEW, GRAYED
+ MENUITEM "New Group...", IDM_GROUP_NEW
END
POPUP ""
BEGIN
MENUITEM "Add Member", IDM_GROUP_ADD_MEMBER, GRAYED
MENUITEM SEPARATOR
- MENUITEM "Delete", IDM_GROUP_DELETE, GRAYED
- MENUITEM "Rename", IDM_GROUP_RENAME, GRAYED
+ MENUITEM "Delete", IDM_GROUP_DELETE
+ MENUITEM "Rename", IDM_GROUP_RENAME
MENUITEM SEPARATOR
MENUITEM "Properties", IDM_GROUP_PROPERTIES, GRAYED
END