win-xp-sp2-20040325
[openafs.git] / src / WINNT / afsusrmgr / grp_rename.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "TaAfsUsrMgr.h"
16 #include "grp_rename.h"
17 #include "browse.h"
18
19
20 /*
21  * DEFINITIONS ________________________________________________________________
22  *
23  */
24
25
26 /*
27  * PROTOTYPES _________________________________________________________________
28  *
29  */
30
31 BOOL CALLBACK Group_Rename_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
32 void Group_Rename_OnInitDialog (HWND hDlg);
33 void Group_Rename_OnDestroy (HWND hDlg);
34 void Group_Rename_OnNewName (HWND hDlg);
35 void Group_Rename_OnChangeOwner (HWND hDlg);
36 void Group_Rename_OnOK (HWND hDlg);
37 void Group_Rename_UpdateDialog (HWND hDlg);
38
39
40 /*
41  * ROUTINES ___________________________________________________________________
42  *
43  */
44
45 void Group_ShowRename (HWND hParent, ASID idGroup)
46 {
47    ModalDialogParam (IDD_GROUP_RENAME, hParent, (DLGPROC)Group_Rename_DlgProc, (LPARAM)idGroup);
48 }
49
50
51 BOOL CALLBACK Group_Rename_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
52 {
53    if (AfsAppLib_HandleHelp (IDD_GROUP_RENAME, hDlg, msg, wp, lp))
54       return TRUE;
55
56    switch (msg)
57       {
58       case WM_INITDIALOG:
59          SetWindowLong (hDlg, DWL_USER, lp);
60          Group_Rename_OnInitDialog (hDlg);
61          break;
62
63       case WM_DESTROY:
64          Group_Rename_OnDestroy (hDlg);
65          break;
66
67       case WM_ASC_NOTIFY_OBJECT:
68          Group_Rename_UpdateDialog (hDlg);
69          break;
70
71       case WM_COMMAND:
72          switch (LOWORD(wp))
73             {
74             case IDOK:
75                Group_Rename_OnOK (hDlg);
76                EndDialog (hDlg, IDOK);
77                break;
78
79             case IDCANCEL:
80                EndDialog (hDlg, IDCANCEL);
81                break;
82
83             case IDC_RENAME_NEWNAME:
84                Group_Rename_OnNewName (hDlg);
85                break;
86
87             case IDC_RENAME_CHOWN:
88                Group_Rename_OnChangeOwner (hDlg);
89                break;
90             }
91          break;
92       }
93
94    return FALSE;
95 }
96
97
98 void Group_Rename_OnInitDialog (HWND hDlg)
99 {
100    ASID idGroup = (ASID)GetWindowLong (hDlg, DWL_USER);
101
102    // Indicate we want to know if anything changes with this group
103    //
104    LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS);
105    memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS));
106    pTask->hNotify = hDlg;
107    asc_AsidListCreate (&pTask->pAsidList);
108    asc_AsidListAddEntry (&pTask->pAsidList, idGroup, 0);
109    StartTask (taskOBJECT_LISTEN, NULL, pTask);
110
111    // Update the dialog's information
112    //
113    SetDlgItemText (hDlg, IDC_RENAME_NEWNAME, TEXT(""));
114    Group_Rename_UpdateDialog (hDlg);
115 }
116
117
118 void Group_Rename_OnDestroy (HWND hDlg)
119 {
120    // Indicate we no longer care if anything changes with this group
121    //
122    LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS);
123    memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS));
124    pTask->hNotify = hDlg;
125    StartTask (taskOBJECT_LISTEN, NULL, pTask);
126 }
127
128
129 void Group_Rename_OnNewName (HWND hDlg)
130 {
131    TCHAR szOldName[ cchNAME ];
132    GetDlgItemText (hDlg, IDC_RENAME_OLDNAME, szOldName, cchNAME);
133
134    TCHAR szNewName[ cchNAME ];
135    GetDlgItemText (hDlg, IDC_RENAME_NEWNAME, szNewName, cchNAME);
136
137    BOOL fEnable = TRUE;
138    if (!szNewName[0])
139       fEnable = FALSE;
140    if (!lstrcmp (szOldName, szNewName))
141       fEnable = FALSE;
142
143    EnableWindow (GetDlgItem (hDlg, IDOK), fEnable);
144 }
145
146
147 void Group_Rename_OnChangeOwner (HWND hDlg)
148 {
149    ASID idGroup = (ASID)GetWindowLong (hDlg, DWL_USER);
150
151    BROWSE_PARAMS pp;
152    memset (&pp, 0x00, sizeof(pp));
153    pp.hParent = hDlg;
154    pp.iddForHelp = IDD_BROWSE_OWNER;
155    pp.idsTitle = IDS_GROUP_CHANGEOWNER_TITLE;
156    pp.idsPrompt = IDS_GROUP_CHANGEOWNER_PROMPT;
157    pp.idsCheck = 0;
158    pp.TypeToShow = (ASOBJTYPE)( (ULONG)TYPE_USER | (ULONG)TYPE_GROUP );
159    pp.fAllowMultiple = FALSE;
160
161    ULONG status;
162    ASOBJPROP Properties;
163    if (asc_ObjectPropertiesGet_Fast (g.idClient, g.idCell, idGroup, &Properties, &status))
164       {
165       lstrcpy (pp.szName, Properties.u.GroupProperties.szOwner);
166
167       if (ShowBrowseDialog (&pp))
168          {
169          LPGROUP_CHANGE_PARAMS pTask = New (GROUP_CHANGE_PARAMS);
170          pTask->idGroup = idGroup;
171          pTask->NewProperties.aaListStatus = Properties.u.GroupProperties.aaListStatus;
172          pTask->NewProperties.aaListGroupsOwned = Properties.u.GroupProperties.aaListGroupsOwned;
173          pTask->NewProperties.aaListMembers = Properties.u.GroupProperties.aaListMembers;
174          pTask->NewProperties.aaAddMember = Properties.u.GroupProperties.aaAddMember;
175          pTask->NewProperties.aaDeleteMember = Properties.u.GroupProperties.aaDeleteMember;
176          lstrcpy (pTask->NewProperties.szOwner, pp.szName);
177          StartTask (taskGROUP_CHANGE, NULL, pTask);
178          }
179       }
180
181    if (pp.pObjectsSelected)
182       asc_AsidListFree (&pp.pObjectsSelected);
183 }
184
185
186 void Group_Rename_OnOK (HWND hDlg)
187 {
188    ASID idGroup = (ASID)GetWindowLong (hDlg, DWL_USER);
189
190    LPGROUP_RENAME_PARAMS lpp = New (GROUP_RENAME_PARAMS);
191    memset (lpp, 0x00, sizeof(GROUP_RENAME_PARAMS));
192    lpp->idGroup = idGroup;
193    GetDlgItemText (hDlg, IDC_RENAME_NEWNAME, lpp->szNewName, cchNAME);
194
195    StartTask (taskGROUP_RENAME, NULL, lpp);
196 }
197
198
199 void Group_Rename_UpdateDialog (HWND hDlg)
200 {
201    ASID idGroup = (ASID)GetWindowLong (hDlg, DWL_USER);
202
203    // Get the current properties for this group
204    //
205    ULONG status;
206    TCHAR szName[ cchNAME ];
207    asc_ObjectNameGet_Fast (g.idClient, g.idCell, idGroup, szName, &status);
208
209    ASOBJPROP Properties;
210    if (!asc_ObjectPropertiesGet_Fast (g.idClient, g.idCell, idGroup, &Properties, &status))
211       GetString (Properties.u.GroupProperties.szOwner, IDS_UNKNOWN_NAME);
212    SetDlgItemText (hDlg, IDC_RENAME_OWNER, Properties.u.GroupProperties.szOwner);
213
214    // Fill in the text at the top of the dialog
215    //
216    LPTSTR pszText = FormatString (IDS_RENAME_TITLE, TEXT("%s"), szName);
217    SetDlgItemText (hDlg, IDC_RENAME_TITLE, pszText);
218    FreeString (pszText);
219
220    // Prepare the New Name control and disable the OK button
221    //
222    SetDlgItemText (hDlg, IDC_RENAME_OLDNAME, szName);
223    Group_Rename_OnNewName (hDlg);
224 }
225