windows-64-bit-type-safety-20051105
[openafs.git] / src / WINNT / afsusrmgr / grp_delete.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_delete.h"
17
18
19 /*
20  * DEFINITIONS ________________________________________________________________
21  *
22  */
23
24
25 /*
26  * PROTOTYPES _________________________________________________________________
27  *
28  */
29
30 BOOL CALLBACK Group_Delete_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
31 void Group_Delete_OnInitDialog (HWND hDlg);
32 void Group_Delete_OnDestroy (HWND hDlg);
33 void Group_Delete_OnOK (HWND hDlg);
34
35
36 /*
37  * ROUTINES ___________________________________________________________________
38  *
39  */
40
41 void Group_ShowDelete (LPASIDLIST pGroupList)
42 {
43    ModalDialogParam (IDD_GROUP_DELETE, g.hMain, (DLGPROC)Group_Delete_DlgProc, (LPARAM)pGroupList);
44 }
45
46
47 BOOL CALLBACK Group_Delete_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
48 {
49    if (AfsAppLib_HandleHelp (IDD_GROUP_DELETE, hDlg, msg, wp, lp))
50       return TRUE;
51
52    switch (msg)
53       {
54       case WM_INITDIALOG:
55          SetWindowLongPtr (hDlg, DWLP_USER, lp);
56          Group_Delete_OnInitDialog (hDlg);
57          break;
58
59       case WM_DESTROY:
60          Group_Delete_OnDestroy (hDlg);
61          break;
62
63       case WM_COMMAND:
64          switch (LOWORD(wp))
65             {
66             case IDOK:
67                Group_Delete_OnOK (hDlg);
68                EndDialog (hDlg, IDOK);
69                break;
70
71             case IDCANCEL:
72                EndDialog (hDlg, IDCANCEL);
73                break;
74             }
75          break;
76       }
77
78    return FALSE;
79 }
80
81
82 void Group_Delete_OnInitDialog (HWND hDlg)
83 {
84    LPASIDLIST pGroupList = (LPASIDLIST)GetWindowLongPtr (hDlg, DWLP_USER);
85
86    // Fix the title of the dialog
87    //
88    if (pGroupList->cEntries == 1)
89       {
90       ULONG status;
91       TCHAR szName[ cchNAME ];
92       asc_ObjectNameGet_Fast (g.idClient, g.idCell, pGroupList->aEntries[0].idObject, szName, &status);
93
94       TCHAR szText[ cchRESOURCE ];
95       GetDlgItemText (hDlg, IDC_DELETE_TITLE, szText, cchRESOURCE);
96
97       LPTSTR pszText = FormatString (szText, TEXT("%s"), szName);
98       SetDlgItemText (hDlg, IDC_DELETE_TITLE, pszText);
99       FreeString (pszText);
100       }
101    else
102       {
103       LPTSTR pszNames = CreateNameList (pGroupList);
104
105       LPTSTR pszText = FormatString (IDS_GROUP_DELETE_MULTIPLE, TEXT("%s"), pszNames);
106       SetDlgItemText (hDlg, IDC_DELETE_TITLE, pszText);
107       FreeString (pszText);
108
109       FreeString (pszNames);
110       }
111 }
112
113
114 void Group_Delete_OnDestroy (HWND hDlg)
115 {
116    LPASIDLIST pGroupList = (LPASIDLIST)GetWindowLongPtr (hDlg, DWLP_USER);
117    asc_AsidListFree (&pGroupList);
118 }
119
120
121 void Group_Delete_OnOK (HWND hDlg)
122 {
123    LPASIDLIST pGroupList = (LPASIDLIST)GetWindowLongPtr (hDlg, DWLP_USER);
124
125    // Start a background task to do all the work.
126    //
127    LPASIDLIST pTask;
128    asc_AsidListCopy (&pTask, &pGroupList);
129    StartTask (taskGROUP_DELETE, NULL, pTask);
130 }
131