6 #include "TaAfsUsrMgr.h"
8 #include "grp_create.h"
12 * DEFINITIONS ________________________________________________________________
18 GROUPPROPINFO Advanced;
19 } CREATEGROUPDLG, *LPCREATEGROUPDLG;
21 #define UID_AUTOSELECT ((int)0)
25 * PROTOTYPES _________________________________________________________________
29 BOOL CALLBACK Group_Create_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
30 void Group_Create_OnInitDialog (HWND hDlg);
31 void Group_Create_OnNames (HWND hDlg);
32 void Group_Create_OnID (HWND hDlg);
33 void Group_Create_OnAdvanced (HWND hDlg);
34 BOOL Group_Create_OnOK (HWND hDlg);
35 void Group_Create_OnEndTask_ObjectGet (HWND hDlg, LPTASKPACKET ptp);
39 * ROUTINES ___________________________________________________________________
43 void Group_SetDefaultCreateParams (LPGROUPPROPINFO lpp)
45 memset (lpp, 0x00, sizeof(GROUPPROPINFO));
46 lpp->aaStatus = aaANYONE;
47 lpp->fStatus_Mixed = FALSE;
48 lpp->aaGroups = aaANYONE;
49 lpp->fGroups_Mixed = FALSE;
50 lpp->aaMembers = aaANYONE;
51 lpp->fMembers_Mixed = FALSE;
52 lpp->aaAdd = aaGROUP_ONLY;
53 lpp->fAdd_Mixed = FALSE;
54 lpp->aaRemove = aaGROUP_ONLY;
55 lpp->fRemove_Mixed = FALSE;
56 lstrcpy (lpp->szOwner, TEXT(""));
57 lpp->fOwner_Mixed = FALSE;
58 lstrcpy (lpp->szCreator, TEXT(""));
59 lpp->fCreator_Mixed = FALSE;
63 void Group_ShowCreate (HWND hParent)
65 LPCREATEGROUPDLG lpp = New (CREATEGROUPDLG);
66 memset (lpp, 0x00, sizeof(CREATEGROUPDLG));
67 memcpy (&lpp->Advanced, &gr.CreateGroup, sizeof(GROUPPROPINFO));
68 lpp->Advanced.pMembers = NULL;
69 lpp->Advanced.pGroupsOwner = NULL;
71 (void)ModalDialogParam (IDD_NEWGROUP, hParent, (DLGPROC)Group_Create_DlgProc, (LPARAM)lpp);
73 if (lpp->Advanced.pMembers)
74 asc_AsidListFree (&lpp->Advanced.pMembers);
75 if (lpp->Advanced.pGroupsOwner)
76 asc_AsidListFree (&lpp->Advanced.pGroupsOwner);
81 BOOL CALLBACK Group_Create_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
83 if (AfsAppLib_HandleHelp (IDD_NEWGROUP, hDlg, msg, wp, lp))
89 SetWindowLong (hDlg, DWL_USER, lp);
90 Group_Create_OnInitDialog (hDlg);
95 if ((ptp = (LPTASKPACKET)lp) != NULL)
97 if (ptp->idTask == taskOBJECT_GET)
98 Group_Create_OnEndTask_ObjectGet (hDlg, ptp);
107 if (Group_Create_OnOK (hDlg))
108 EndDialog (hDlg, IDOK);
112 EndDialog (hDlg, IDCANCEL);
116 Group_Create_OnAdvanced (hDlg);
119 case IDC_NEWGROUP_NAME:
120 Group_Create_OnNames (hDlg);
123 case IDC_NEWGROUP_ID_AUTO:
124 case IDC_NEWGROUP_ID_MANUAL:
125 Group_Create_OnID (hDlg);
135 void Group_Create_OnInitDialog (HWND hDlg)
137 LPCREATEGROUPDLG lpp = (LPCREATEGROUPDLG)GetWindowLong (hDlg, DWL_USER);
139 // Fix the title of the dialog
142 TCHAR szName[ cchNAME ];
143 asc_CellNameGet_Fast (g.idClient, g.idCell, szName, &status);
145 TCHAR szText[ cchRESOURCE ];
146 GetDlgItemText (hDlg, IDC_NEWGROUP_TITLE, szText, cchRESOURCE);
148 LPTSTR pszText = FormatString (szText, TEXT("%s"), szName);
149 SetDlgItemText (hDlg, IDC_NEWGROUP_TITLE, pszText);
150 FreeString (pszText);
152 // Attach a spinner to the ID control
154 CheckDlgButton (hDlg, IDC_NEWGROUP_ID_AUTO, TRUE);
155 CreateSpinner (GetDlgItem (hDlg, IDC_NEWGROUP_ID), 10, TRUE, -0x7FFFFFFF, -1, -1);
156 Group_Create_OnID (hDlg);
158 StartTask (taskOBJECT_GET, hDlg, (PVOID)(g.idCell));
162 void Group_Create_OnNames (HWND hDlg)
164 TCHAR szSeparators[ cchRESOURCE ];
165 GetString (szSeparators, IDS_SEPARATORS);
166 lstrcat (szSeparators, TEXT(" \t"));
168 LPTSTR pszNames = GetEditText (GetDlgItem (hDlg, IDC_NEWGROUP_NAME));
169 EnableWindow (GetDlgItem (hDlg, IDOK), (pszNames && *pszNames));
171 BOOL fMultiple = FALSE;
172 for (LPTSTR psz = pszNames; !fMultiple && psz && *psz; ++psz)
174 if (lstrchr (szSeparators, *psz))
177 FreeString (pszNames);
179 EnableWindow (GetDlgItem (hDlg, IDC_NEWGROUP_ID_AUTO), !fMultiple);
180 EnableWindow (GetDlgItem (hDlg, IDC_NEWGROUP_ID_MANUAL), !fMultiple);
183 CheckDlgButton (hDlg, IDC_NEWGROUP_ID_AUTO, TRUE);
184 CheckDlgButton (hDlg, IDC_NEWGROUP_ID_MANUAL, FALSE);
185 Group_Create_OnID (hDlg);
190 void Group_Create_OnID (HWND hDlg)
192 BOOL fEnable = IsDlgButtonChecked (hDlg, IDC_NEWGROUP_ID_MANUAL);
193 EnableWindow (GetDlgItem (hDlg, IDC_NEWGROUP_ID), fEnable);
197 void Group_Create_OnAdvanced (HWND hDlg)
199 LPCREATEGROUPDLG lpp = (LPCREATEGROUPDLG)GetWindowLong (hDlg, DWL_USER);
200 lpp->Advanced.pGroupList = NULL;
201 lpp->Advanced.fDeleteMeOnClose = FALSE;
202 lpp->Advanced.fShowModal = TRUE;
203 lpp->Advanced.hParent = hDlg;
204 lpp->Advanced.fApplyGeneral = FALSE;
205 Group_ShowProperties (&lpp->Advanced, gptMEMBERS);
209 BOOL Group_Create_OnOK (HWND hDlg)
211 LPCREATEGROUPDLG lpp = (LPCREATEGROUPDLG)GetWindowLong (hDlg, DWL_USER);
213 // Start a background task to do all the work.
215 LPGROUP_CREATE_PARAMS pTask = New (GROUP_CREATE_PARAMS);
216 memset (pTask, 0x00, sizeof(GROUP_CREATE_PARAMS));
218 if (IsDlgButtonChecked (hDlg, IDC_NEWGROUP_ID_AUTO))
219 pTask->idGroup = UID_AUTOSELECT;
220 else // (IsDlgButtonChecked (hDlg, IDC_NEWGROUP_ID_MANUAL))
221 pTask->idGroup = SP_GetPos (GetDlgItem (hDlg, IDC_NEWGROUP_ID));
223 lstrcpy (pTask->Properties.szOwner, lpp->Advanced.szOwner);
225 pTask->Properties.aaListStatus = lpp->Advanced.aaStatus;
226 pTask->Properties.aaListGroupsOwned = lpp->Advanced.aaGroups;
227 pTask->Properties.aaListMembers = lpp->Advanced.aaMembers;
228 pTask->Properties.aaAddMember = lpp->Advanced.aaAdd;
229 pTask->Properties.aaDeleteMember = lpp->Advanced.aaRemove;
231 if (lpp->Advanced.pMembers)
232 asc_AsidListCopy (&pTask->pMembers, &lpp->Advanced.pMembers);
234 pTask->pMembers = NULL;
236 if (lpp->Advanced.pGroupsOwner)
237 asc_AsidListCopy (&pTask->pGroupsOwner, &lpp->Advanced.pGroupsOwner);
239 pTask->pGroupsOwner = NULL;
241 // Crack the specified list of user names into a multi-string
243 TCHAR szSeparators[ cchRESOURCE ];
244 GetString (szSeparators, IDS_SEPARATORS);
245 lstrcat (szSeparators, TEXT(" \t"));
247 LPTSTR pszNames = GetEditText (GetDlgItem (hDlg, IDC_NEWGROUP_NAME));
248 LPCTSTR pszStart = pszNames;
249 while (lstrchr (szSeparators, *pszStart))
254 // Find the first non-name character
256 LPCTSTR pszEnd = pszStart;
257 while (*pszEnd && !lstrchr(szSeparators, *pszEnd))
260 // Copy off this particular name
262 TCHAR szName[ cchNAME ];
263 lstrcpy (szName, pszStart);
264 szName[ pszEnd - pszStart ] = TEXT('\0');
267 FormatMultiString (&pTask->mszNames, FALSE, TEXT("%1"), TEXT("%s"), szName);
269 // Find the next valid-name character
272 while (lstrchr(szSeparators, *pszStart))
275 FreeString (pszNames);
277 // Do the real work of creating the user(s)
279 StartTask (taskGROUP_CREATE, NULL, pTask);
281 // Store these creation parameters as the new defaults
283 memcpy (&gr.CreateGroup, &lpp->Advanced, sizeof(GROUPPROPINFO));
288 void Group_Create_OnEndTask_ObjectGet (HWND hDlg, LPTASKPACKET ptp)
292 TCHAR szText[ cchRESOURCE ];
293 GetDlgItemText (hDlg, IDC_NEWGROUP_ID_AUTO, szText, cchRESOURCE);
295 LPTSTR pszText = FormatString (TEXT("%1 (%2)"), TEXT("%s%ld"), szText, TASKDATA(ptp)->Properties.u.CellProperties.idGroupMax-1);
296 SetDlgItemText (hDlg, IDC_NEWGROUP_ID_AUTO, pszText);
297 FreeString (pszText);
299 if (!IsWindowEnabled (GetDlgItem (hDlg, IDC_NEWGROUP_ID)))
300 SP_SetPos (GetDlgItem (hDlg, IDC_NEWGROUP_ID), TASKDATA(ptp)->Properties.u.CellProperties.idGroupMax-1);