diff --git a/reactos/dll/cpl/usrmgr/groups.c b/reactos/dll/cpl/usrmgr/groups.c index fbb3475e268..7778bbc0a3c 100644 --- a/reactos/dll/cpl/usrmgr/groups.c +++ b/reactos/dll/cpl/usrmgr/groups.c @@ -29,8 +29,8 @@ SetGroupsListColumns(HWND hwndListView) GetClientRect(hwndListView, &rect); memset(&column, 0x00, sizeof(column)); - column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT; - column.fmt=LVCFMT_LEFT; + column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_SUBITEM | LVCF_TEXT; + column.fmt = LVCFMT_LEFT; column.cx = (INT)((rect.right - rect.left) * 0.40); column.iSubItem = 0; LoadString(hApplet, IDS_NAME, szStr, sizeof(szStr) / sizeof(szStr[0])); diff --git a/reactos/dll/cpl/usrmgr/lang/en-US.rc b/reactos/dll/cpl/usrmgr/lang/en-US.rc index 248c07b5ef6..d278bcf193a 100644 --- a/reactos/dll/cpl/usrmgr/lang/en-US.rc +++ b/reactos/dll/cpl/usrmgr/lang/en-US.rc @@ -12,7 +12,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Users" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "", IDC_USERS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + CONTROL "", IDC_USERS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 7, 7, 238, 85, WS_EX_CLIENTEDGE END @@ -22,7 +22,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Groups" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "", IDC_GROUPS_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + CONTROL "", IDC_GROUPS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 7, 7, 238, 85, WS_EX_CLIENTEDGE END @@ -36,6 +36,31 @@ BEGIN END +IDD_USER_GENERAL DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDC_USER_NAME, 7, 7, 112, 8 + +END + + + +IDD_CHANGE_PASSWORD DIALOGEX DISCARDABLE 0, 0, 267, 74 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Change Password" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_EDIT_PASSWORD1,107,7,153,14,ES_AUTOHSCROLL + RTEXT "New Password:", -1,7,10,96,8 + EDITTEXT IDC_EDIT_PASSWORD2,107,25,153,14,ES_AUTOHSCROLL + RTEXT "Repeat Password:", -1,7,28,96,8 + DEFPUSHBUTTON "OK",IDOK,156,53,50,14 + PUSHBUTTON "Abbrechen",IDCANCEL,210,53,50,14 +END + + /* Menus */ IDM_POPUP_GROUP MENU DISCARDABLE diff --git a/reactos/dll/cpl/usrmgr/resource.h b/reactos/dll/cpl/usrmgr/resource.h index 27779466a70..cd413e81efe 100644 --- a/reactos/dll/cpl/usrmgr/resource.h +++ b/reactos/dll/cpl/usrmgr/resource.h @@ -13,10 +13,14 @@ #define ICONSIZE 16 -/* ids */ -#define IDC_USRMGR_ICON 40 -#define IDC_USRMGR_ICON2 100 // Needed for theme compatability with Windows. +/* Icons */ +#define IDI_USRMGR_ICON 40 +#define IDI_USRMGR_ICON2 100 // Needed for theme compatibility with Windows. +#define IDI_USER 41 +#define IDI_LOCKED_USER 42 +#define IDI_GROUP 43 + #define IDD_USERS 100 #define IDD_GROUPS 101 @@ -29,6 +33,26 @@ #define IDC_STATIC -1 +/* Dialogs */ + +#define IDD_USER_GENERAL 310 +#define IDC_USER_NAME 311 +#define IDC_USER_FULLNAME 312 +#define IDC_USER_DESCRIPTION 313 +#define IDC_USER_PW_CHANGE 314 +#define IDC_USER_PW_NOCHANGE 315 +#define IDC_USER_PW_EXPIRE 316 +#define IDC_USER_DEACTIVATE 317 +#define IDC_USER_LOCK 318 + + +#define IDD_CHANGE_PASSWORD 350 +#define IDC_EDIT_PASSWORD1 351 +#define IDC_EDIT_PASSWORD2 352 + + +/* Strings */ + #define IDS_CPLNAME 2000 #define IDS_CPLDESCRIPTION 2001 @@ -36,7 +60,9 @@ #define IDS_FULLNAME 2101 #define IDS_DESCRIPTION 2102 + /* Menus */ + #define IDM_POPUP_GROUP 120 #define IDM_GROUP_ADD_MEMBER 121 #define IDM_GROUP_NEW 122 diff --git a/reactos/dll/cpl/usrmgr/resources/group.ico b/reactos/dll/cpl/usrmgr/resources/group.ico new file mode 100644 index 00000000000..6a7c73a315e Binary files /dev/null and b/reactos/dll/cpl/usrmgr/resources/group.ico differ diff --git a/reactos/dll/cpl/usrmgr/resources/locked.ico b/reactos/dll/cpl/usrmgr/resources/locked.ico new file mode 100644 index 00000000000..9953f9dee8d Binary files /dev/null and b/reactos/dll/cpl/usrmgr/resources/locked.ico differ diff --git a/reactos/dll/cpl/usrmgr/resources/user.ico b/reactos/dll/cpl/usrmgr/resources/user.ico new file mode 100644 index 00000000000..1868683d351 Binary files /dev/null and b/reactos/dll/cpl/usrmgr/resources/user.ico differ diff --git a/reactos/dll/cpl/usrmgr/users.c b/reactos/dll/cpl/usrmgr/users.c index f0d60ad492d..b48711a4bc5 100644 --- a/reactos/dll/cpl/usrmgr/users.c +++ b/reactos/dll/cpl/usrmgr/users.c @@ -20,6 +20,69 @@ typedef struct _USER_DATA } USER_DATA, *PUSER_DATA; + +static BOOL +SetPassword(HWND hwndDlg) +{ + TCHAR szPassword1[256]; + TCHAR szPassword2[256]; + UINT uLen1; + UINT uLen2; + + uLen1 = GetDlgItemText(hwndDlg, IDC_EDIT_PASSWORD1, szPassword1, 256); + uLen2 = GetDlgItemText(hwndDlg, IDC_EDIT_PASSWORD2, szPassword2, 256); + + /* Check the passwords */ + if (uLen1 != uLen2 || _tcscmp(szPassword1, szPassword2) != 0) + { + MessageBox(hwndDlg, + TEXT("The passwords you entered are not the same!"), + TEXT("ERROR"), + MB_OK | MB_ICONERROR); + return FALSE; + } + + + return TRUE; +} + + +INT_PTR CALLBACK +ChangePasswordDlgProc(HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + UNREFERENCED_PARAMETER(wParam); + + switch (uMsg) + { + case WM_INITDIALOG: + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case IDOK: + if (SetPassword(hwndDlg)) + EndDialog(hwndDlg, 0); + break; + + case IDCANCEL: + EndDialog(hwndDlg, 0); + break; + } + break; + + default: + return FALSE; + } + + return TRUE; +} + + + static VOID SetUsersListColumns(HWND hwndListView) { @@ -120,7 +183,46 @@ OnInitDialog(HWND hwndDlg) } -static VOID +static BOOL +OnEndLabelEdit(LPNMLVDISPINFO pnmv) +{ + TCHAR szOldUserName[UNLEN]; + TCHAR szNewUserName[UNLEN]; + USER_INFO_0 useri0; + NET_API_STATUS status; + + if (pnmv->item.iItem == -1) + return FALSE; + + ListView_GetItemText(pnmv->hdr.hwndFrom, + pnmv->item.iItem, 0, + szOldUserName, + UNLEN); + lstrcpy(szNewUserName, pnmv->item.pszText); + + if (lstrcmp(szOldUserName, szNewUserName) == 0) + return FALSE; + + useri0.usri0_name = szNewUserName; + + status = NetUserSetInfo(NULL, szOldUserName, 0, (LPBYTE)&useri0, NULL); + if (status != NERR_Success) + { + TCHAR szText[256]; + wsprintf(szText, _T("Error: %u"), status); + MessageBox(NULL, szText, _T("NetUserSetInfo"), MB_ICONERROR | MB_OK); + return FALSE; + } + + ListView_SetItemText(pnmv->hdr.hwndFrom, + pnmv->item.iItem, 0, + szNewUserName); + + return TRUE; +} + + +static BOOL OnNotify(HWND hwndDlg, PUSER_DATA pUserData, NMHDR *phdr) { LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)phdr; @@ -143,6 +245,9 @@ OnNotify(HWND hwndDlg, PUSER_DATA pUserData, NMHDR *phdr) case NM_DBLCLK: break; + case LVN_ENDLABELEDIT: + return OnEndLabelEdit((LPNMLVDISPINFO)phdr); + case NM_RCLICK: ClientToScreen(GetDlgItem(hwndDlg, IDC_USERS_LIST), &lpnmlv->ptAction); TrackPopupMenu(GetSubMenu(pUserData->hPopupMenu, (lpnmlv->iItem == -1) ? 0 : 1), @@ -151,6 +256,8 @@ OnNotify(HWND hwndDlg, PUSER_DATA pUserData, NMHDR *phdr) } break; } + + return FALSE; } @@ -180,6 +287,28 @@ UsersPageProc(HWND hwndDlg, case WM_COMMAND: switch (LOWORD(wParam)) { + case IDM_USER_CHANGE_PASSWORD: + DialogBoxParam(hApplet, + MAKEINTRESOURCE(IDD_CHANGE_PASSWORD), + hwndDlg, + ChangePasswordDlgProc, + (LPARAM)NULL); + break; + + case IDM_USER_RENAME: + { + INT nItem; + HWND hwndLV; + + hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST); + nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED); + if (nItem != -1) + { + (void)ListView_EditLabel(hwndLV, nItem); + } + } + break; + case IDM_USER_PROPERTIES: MessageBeep(-1); break; @@ -187,8 +316,7 @@ UsersPageProc(HWND hwndDlg, break; case WM_NOTIFY: - OnNotify(hwndDlg, pUserData, (NMHDR *)lParam); - break; + return OnNotify(hwndDlg, pUserData, (NMHDR *)lParam); case WM_DESTROY: DestroyMenu(pUserData->hPopupMenu); diff --git a/reactos/dll/cpl/usrmgr/usrmgr.c b/reactos/dll/cpl/usrmgr/usrmgr.c index 992441e1c58..c622bea9af1 100644 --- a/reactos/dll/cpl/usrmgr/usrmgr.c +++ b/reactos/dll/cpl/usrmgr/usrmgr.c @@ -20,7 +20,7 @@ HINSTANCE hApplet = 0; APPLET Applets[NUM_APPLETS] = { { - IDC_USRMGR_ICON, + IDI_USRMGR_ICON, IDS_CPLNAME, IDS_CPLDESCRIPTION, UsrmgrApplet @@ -60,7 +60,7 @@ UsrmgrApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam) psh.dwFlags = PSH_PROPSHEETPAGE; psh.hwndParent = NULL; psh.hInstance = hApplet; - psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDC_USRMGR_ICON)); + psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_USRMGR_ICON)); psh.pszCaption = Caption; psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); psh.nStartPage = 0; diff --git a/reactos/dll/cpl/usrmgr/usrmgr.rbuild b/reactos/dll/cpl/usrmgr/usrmgr.rbuild index 764a542deb4..42b5e321d16 100644 --- a/reactos/dll/cpl/usrmgr/usrmgr.rbuild +++ b/reactos/dll/cpl/usrmgr/usrmgr.rbuild @@ -5,6 +5,7 @@ . 0x600 0x501 + 0x609 kernel32 user32 gdi32 diff --git a/reactos/dll/cpl/usrmgr/usrmgr.rc b/reactos/dll/cpl/usrmgr/usrmgr.rc index f547cae50ec..945525391b6 100644 --- a/reactos/dll/cpl/usrmgr/usrmgr.rc +++ b/reactos/dll/cpl/usrmgr/usrmgr.rc @@ -11,7 +11,11 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 123 24 DISCARDABLE "manifest.xml" -IDC_USRMGR_ICON ICON "resources/applet.ico" -IDC_USRMGR_ICON2 ICON "resources/applet.ico" +IDI_USRMGR_ICON ICON "resources/applet.ico" +IDI_USRMGR_ICON2 ICON "resources/applet.ico" + +IDI_USER ICON "resources/user.ico" +IDI_LOCKED_USER ICON "resources/locked.ico" +IDI_GROUP ICON "resources/group.ico" #include "rsrc.rc"