From 626e85df7f3a409357921e329057ea8b963ab063 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 2 Dec 2007 14:35:59 +0000 Subject: [PATCH] - Add icons for user, locked user and group. - Enable users to change their name and password (not fully working yet). - Use the IDI_ prefix for icons. svn path=/trunk/; revision=30958 --- reactos/dll/cpl/usrmgr/groups.c | 4 +- reactos/dll/cpl/usrmgr/lang/en-US.rc | 29 ++++- reactos/dll/cpl/usrmgr/resource.h | 32 ++++- reactos/dll/cpl/usrmgr/resources/group.ico | Bin 0 -> 2606 bytes reactos/dll/cpl/usrmgr/resources/locked.ico | Bin 0 -> 2606 bytes reactos/dll/cpl/usrmgr/resources/user.ico | Bin 0 -> 2606 bytes reactos/dll/cpl/usrmgr/users.c | 134 +++++++++++++++++++- reactos/dll/cpl/usrmgr/usrmgr.c | 4 +- reactos/dll/cpl/usrmgr/usrmgr.rbuild | 1 + reactos/dll/cpl/usrmgr/usrmgr.rc | 8 +- 10 files changed, 198 insertions(+), 14 deletions(-) create mode 100644 reactos/dll/cpl/usrmgr/resources/group.ico create mode 100644 reactos/dll/cpl/usrmgr/resources/locked.ico create mode 100644 reactos/dll/cpl/usrmgr/resources/user.ico 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 0000000000000000000000000000000000000000..6a7c73a315ee3ecf811d0f6205fe7a46c77622bd GIT binary patch literal 2606 zcmaKt2~3k`7{~tz6?7id;XDvUJa8gPDd5c^^+FK~EuvNstXM#lGR133QNf}UY0Nh3 zzyn0*iJ+n^9(c?n&bjW2I*F*mER$qx8W*#ecmJ;h;7%Toz#a&6}+}G19!b zRyyyn;Rf^aWMi{Wnp;s3WRDVU`=EqGGg=yox28`V#cCC8;l)^3hbWej}pB< z%8~={r6CZ9QiE`0(P&hpkAO8{61MB3P;LxGW!899E|0*8Yz7QF(Ay=b)|H44JwBPU=tL7`+qDaXa7_lY>CbX9$TcgrlYuu9{Pj z>%M~P!gKIib^t?Hmt#QIX@rhjk8n*s!r}@Mm$nJeeFLX>ZvA<*H(Y}2g7a`nwxNyw zCk$GB1xiyn0&=RL$UTLyEqMsdKZ)>y)6j0M#+dvI7*%i&gROP&{h|(IOCCVA0ESccdP(4?KqMz;8%7_5g-c4OnveF_xTZz~VE1!g%%x zme%}X|9yYGb1kmz-GrVo`#P@QDTMCF;HN>w*h~F&`jTI2jZ2!F{z%Vypx)+e)2NVVaM;E94Lx z6%fU0h;k#uc?)M&K-Ak_<@s(;=c}B-_q(ti^X-}MzJ-a{zDcVS+70$rJRXTC4<1DPMfe6U;~P9b1a3w&baEQ`Ro3V}PeSNS%w=4A(}Y>;=q zf&KgU_v$}D=Efx(+^a{gq3%7q_wl~+}qukpLdMvEL-_O`1sMo!+d3|J4HoxZaXejpFDR&s0?myt{u9y zYrim4yI_9&C?d+uAt*9lUzn8l`#QkH4# zwL+(ko-#2lCo4l`uLF~2&zcr8NyTL+o@#PJ;+(jErb4=-8m9Cg`Lb-}4Qan|(LYoa zOx!gsw=?Sypf3A$A9a7@nAdNTwM6VYE(yXd7CVVS(vW~87m3KGi_9#~3?nVsK<+kQ zEQ!lfy^`Q9(JP5cl6OavKUusp$)Ch+>L;>EY{Hu*(aQdP3j+2V0;xh0cTaKvQ@mRC z(+HFRJwXJs`EXhgSwdx!%7hHLUOd;YWj{^9i}Q&d(w?9vcc=$imms18cI*8)s`>9> zGok8}n#wyQ79~O^6UQVsVNOmrH8=OuLhP3!DXBCTAx=&bp`<6lO7;`)Z056UdN{Nd z1x7DXX*3#PN^TO@BrTy!CQF)lxfr1tDH8IYx}XsVR`Qs*CEbHd?n}JZ-FVq9owOw- zKu1t9GzOtc9uuo1_L!1~60=+P(_WN=U+yVtgk~bp$zx)i#3#HZm$dGu=_nBThPt7R zC@4CC_$KWo5wN*+KTSxn&^y$RGOwD#lYFMT;XuRvuUYyBbT=qFdWlM+r6@1Sr>$p7 uZ7rAX20cvm(!i2v-_qQOqA+RWP1}L@9gD(D+%+w?GwYC|u)6G`uzvx;=tqA5 literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/usrmgr/resources/locked.ico b/reactos/dll/cpl/usrmgr/resources/locked.ico new file mode 100644 index 0000000000000000000000000000000000000000..9953f9dee8db78081270cecb44469369e341b3cc GIT binary patch literal 2606 zcmai$dr(wm7{;GnFCZGQhNzh>S|TZgn@VPateJOo*Mv+qOkEW-r`;ki%v3s-Hc+(t zSCQLHgD3-eVNuNT2IhE4jMl6%bQMLMN+vgLNGF-M=Nxbsg|%|#Ta~UorRtDR8*{n zD%NM=>kaeq&Bj-;JAXOPQ;hK$4n)q`3!UX#M819qLssrb>V)@Uoa?~c<@v0s0W3A> zn#F0YMp*U{L@up{*7`Hz-Z_TJlk1R~c>!Y!E@D_=JrXw6Bf01@rhW1wmbgw}_LlR= z`pOIIwqLPgM;%f(H(*jpBht#QBBQ7Q=Ax@eFKWb`?N?#h(TL2lYp|64hGn}hBYSTX za`soAJ`*P@#f>xK z@jqu#j(F>mX+h5U&|>#SZzy z3Gulh%^v^tCq|JUOnwCU6!K~0*~_<#{2Co3&j9(t4B2UiR6E(z4QccQc)r^vzREVf z-;N&S!^rm{A5K1|HzdUXv6vybcF3nr$R0Q3j3>Y&947RI4TIpoaFjDiYLN;brb2Y{ zAO;)6ya8f&L7Wv3_i>0P@SZ0!O-y8Lm_dFa`PJkL$QP5}MgAc9W8`^G=Xvst~Mq~F0q48C%9n{{B0IA+XeqP1-IRTe?8*o2ar!7Kc4(-@{7o? zB>y4#LY-i%L9p8_IBXZxItAz5f@_`tA4*=i1AWL3AU}wFEctlyDLTPigTQVUd}L=Y zr{IuVQ0EEoYA8gjgC8|oWkl=M5e;Z{kqX^x_&sc zN7xjuO>OI_9z7?eMe9vNhql(g(6iU%ZtePMCw6~qP=EjVpzSg+X~fe{^?g*UUI^c% zF)71F8WQ@oEiu?QDtUN(V$9w3km;#2o{b;tUqABP)bXRAf6~8>ef*he6UN2(*BJ0b z3R?se&IXR?_mGt*w^H%wTT6sb!4K z`!?drU?sztnaqf0Ix8Wqw5?%UF-WDAy?>RHKfW3dvy%DDpd z40+a52{eKdj%xqb&Yjj%2rS;dJc)^_1gBchN`^bPj@QHRrDv!armrF*wf+I$mtUEg zO^afQzQ&CL(RiLijC;ksXjnEjB5FJC^&_IgV zf(*KhN}-7;8agYb=#pY8%c&scitnfvnuv0ttHu>ID7Fe-PnS|s-bv1eqF_u|C9Q^hI=>xAZQf Hh|BmNUoaS6 literal 0 HcmV?d00001 diff --git a/reactos/dll/cpl/usrmgr/resources/user.ico b/reactos/dll/cpl/usrmgr/resources/user.ico new file mode 100644 index 0000000000000000000000000000000000000000..1868683d351f0bde7466a7cff362c8ff6f076317 GIT binary patch literal 2606 zcmbuBe^Aq99LL|l6jX%GKut=(k_a^z0-6dk1@afUDG=g9#f4L|Hjf0me%KF{#Ay4c z#87kiBm993k)-p-FjF}-nptP2i6UMlcdqnEuk)VX-z^4&vp;%n&pr2i_j!Hz?z?C2 z7l0RhAeYOz$`I)VBmmrldq3!V0lB>9+7E`_2RP9ih?HtL!#E}GVM7Iu`?T>ycI2g8GU|H16Jj?;2`R+;|5qKm7ok%?2SvXIq7H00VWInW-AC zDQPJw&UL!ZweDRatwU1xZ%kPLC@RJjMksi51B#2or8|u*E?z6Od!u7LF=xCMy0{$V z^O|J9AL;UM{{^GY|Evb5Or_K59#rB0l3|Ow2Mt zo^cQg?U#_hd=$f1976J>_c1x+1E{i1$X;3kXwN{F%c*NXU;S~&7d60J_dO!tJc)6o zR}fX!j8UI9BhhjV(?0qZ`Q?q6wfz!ucVC8X&yQGEbrH!GElAthiu7GKkY#Cs#&QFh zmR4l!y#Z}iE9UOH3GJ?5uz3G9=nuA`;LuGJ9B#v_hku9h$Zfo4yX8DHUvGIAjXO$k zYUhVIzGnyQb)VsMUA6NZtvYcV>rS_0)yaD(`^MosQ;9-}xk7`L!iWvRj03`o^TO^v zXF<`xFf|av??2H5%%}$DGy#hoK#@>j9r<$dRpf2t&ym00g^wVgtOjxnK!FJ;tp+N| zA9Db9@)yYeOumKuujFr$Z|}lKM*wOSV3-S-3V`ZTps5mYdqdy* z%n%MMM7!O6|ItC@hmnsVpF}>LJbO77lV7QTSf_;8q=DFHglI6crxl{r-pTW~t>#bJ zz~8s25Ba|2{mBQA4;uiHq=e9FAYL~@d}4;EvqGG=ck&2;8iQa!I7}FUY9>h&lHtHq z2t^Kr(g2}Z17R$OFxNm>PeItPbm7CuCy<{(K9776`BL)R$nPhAg#1bJ{F~-W&x5W{0)xu$>)_v%^((a3}=+Pzv192(%jo{xl2RvkLrW7j8a;{3!Ah$&v9tvJE_u%&e$Q~UWG$=SY_>tg&&bXC@^zYk0)W2V!ehSzAvHk&p zvxfxu`@8nuLj&ZR?8nms{(0YfrhLFG-x=ya|Dn!$Z`t#HPmg#a?5UwL=N{g@B9q3B zO9+o}ZGqm&X|dyhdo6V1j6m@*D>CoOeTcHpzC+*}>g<|Njk>nSuO}mlWAu1}ho1 z%v{DW)0aW)dNG;zEmtvVl@BFzBKQmKMoIp6lsIs*0we zpy)DcNiv}4dODKIr0pmsdQ4Iri#^x#KB-{Iu-da;bnbr@d-_~muM1JGviW$P&A#O- OM_|u+H?&+Ov3~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"