Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / WINNT / afsusrmgr / cell_prop.cpp
1 extern "C" {
2 #include <afs/param.h>
3 #include <afs/stds.h>
4 }
5
6 #include "TaAfsUsrMgr.h"
7 #include "cell_prop.h"
8 #include "winlist.h"
9
10
11 /*
12  * DEFINITIONS ________________________________________________________________
13  *
14  */
15
16 #define nID_USERMAX_MIN    1
17 #define nID_USERMAX_MAX   -1
18
19 #define nID_GROUPMAX_MIN  -0x7FFFFFFF
20 #define nID_GROUPMAX_MAX  -1
21
22
23 /*
24  * PROTOTYPES _________________________________________________________________
25  *
26  */
27
28 BOOL CALLBACK CellProp_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
29 void CellProp_General_OnInitDialog (HWND hDlg);
30 void CellProp_General_OnDestroy (HWND hDlg);
31 void CellProp_General_OnApply (HWND hDlg);
32 void CellProp_General_UpdateDialog (HWND hDlg);
33
34
35 /*
36  * ROUTINES ___________________________________________________________________
37  *
38  */
39
40 void Cell_ShowProperties (CELLPROPTAB cptTarget)
41 {
42    HWND hSheet = NULL;
43
44    // If there is already a window open for this cell, switch to it.
45    //
46    if ((hSheet = WindowList_Search (wltCELL_PROPERTIES, g.idCell)) != NULL)
47       {
48       SetForegroundWindow (hSheet);
49       if (cptTarget != cptANY)
50          {
51          HWND hTab = GetDlgItem (hSheet, IDC_PROPSHEET_TABCTRL);
52          int nTabs = TabCtrl_GetItemCount (hTab);
53          if (nTabs < nCELLPROPTAB_MAX)
54             cptTarget = (CELLPROPTAB)( (cptTarget == cptPROBLEMS) ? ((int)cptGENERAL-1) : ((int)cptTarget-1) );
55          TabCtrl_SwitchToTab (hTab, cptTarget);
56          }
57       return;
58       }
59
60    // Okay, we're clear to create the new properties window.
61    //
62    TCHAR szCell[ cchRESOURCE ];
63    asc_CellNameGet_Fast (g.idClient, g.idCell, szCell);
64
65    LPTSTR pszTitle = FormatString (IDS_CELL_PROPERTIES_TITLE, TEXT("%s"), szCell);
66
67    LPPROPSHEET psh = PropSheet_Create (pszTitle, TRUE, NULL, (LPARAM)g.idCell);
68    PropSheet_AddTab (psh, 0, IDD_CELL_GENERAL, (DLGPROC)CellProp_General_DlgProc, (LPARAM)g.idCell, TRUE, (cptTarget == cptGENERAL) ? TRUE : FALSE);
69    PropSheet_ShowModeless (psh, SW_SHOW);
70 }
71
72
73 BOOL CALLBACK CellProp_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
74 {
75    if (AfsAppLib_HandleHelp (IDD_CELL_GENERAL, hDlg, msg, wp, lp))
76       return TRUE;
77
78    ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
79
80    switch (msg)
81       {
82       case WM_INITDIALOG_SHEET:
83          WindowList_Add (hDlg, wltCELL_PROPERTIES, idCell);
84          break;
85
86       case WM_DESTROY_SHEET:
87          WindowList_Remove (hDlg);
88          break;
89
90       case WM_INITDIALOG:
91          CellProp_General_OnInitDialog (hDlg);
92          break;
93
94       case WM_DESTROY:
95          CellProp_General_OnDestroy (hDlg);
96          break;
97
98       case WM_ASC_NOTIFY_OBJECT:
99          CellProp_General_UpdateDialog (hDlg);
100          break;
101
102       case WM_COMMAND:
103          switch (LOWORD(wp))
104             {
105             case IDAPPLY:
106                CellProp_General_OnApply (hDlg);
107                break;
108
109             case IDC_CELL_USERMAX:
110             case IDC_CELL_GROUPMAX:
111                PropSheetChanged (hDlg);
112                break;
113             }
114          break;
115       }
116
117    return FALSE;
118 }
119
120
121 void CellProp_General_OnInitDialog (HWND hDlg)
122 {
123    ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
124
125    // Indicate we want to know if anything changes with this cell
126    //
127    LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS);
128    memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS));
129    pTask->hNotify = hDlg;
130    asc_AsidListCreate (&pTask->pAsidList);
131    asc_AsidListAddEntry (&pTask->pAsidList, idCell, 0);
132    StartTask (taskOBJECT_LISTEN, NULL, pTask);
133
134    // Fix the name shown on the dialog
135    //
136    TCHAR szText[ cchRESOURCE ];
137    GetDlgItemText (hDlg, IDC_CELL_NAME, szText, cchRESOURCE);
138
139    TCHAR szName[ cchRESOURCE ];
140    asc_CellNameGet_Fast (g.idClient, idCell, szName);
141
142    LPTSTR pszText = FormatString (szText, TEXT("%s"), szName);
143    SetDlgItemText (hDlg, IDC_CELL_NAME, pszText);
144    FreeString (pszText);
145
146    // Fill in the rest of the information about the selected users
147    //
148    CellProp_General_UpdateDialog (hDlg);
149 }
150
151
152 void CellProp_General_OnDestroy (HWND hDlg)
153 {
154    // Indicate we no longer care if anything changes with this cell
155    //
156    LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS);
157    memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS));
158    pTask->hNotify = hDlg;
159    StartTask (taskOBJECT_LISTEN, NULL, pTask);
160 }
161
162
163 void CellProp_General_UpdateDialog (HWND hDlg)
164 {
165    ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
166
167    ULONG status;
168    ASOBJPROP Properties;
169    asc_ObjectPropertiesGet_Fast (g.idClient, idCell, idCell, &Properties, &status);
170
171    if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX)))
172       SP_SetPos (GetDlgItem (hDlg, IDC_CELL_USERMAX), Properties.u.CellProperties.idUserMax);
173    else
174       CreateSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX), 10, FALSE, nID_USERMAX_MIN, Properties.u.CellProperties.idUserMax, nID_USERMAX_MAX);
175
176    if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX)))
177       SP_SetPos (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), Properties.u.CellProperties.idGroupMax);
178    else
179       CreateSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), 10, TRUE, nID_GROUPMAX_MIN, Properties.u.CellProperties.idGroupMax, nID_GROUPMAX_MAX);
180 }
181
182
183 void CellProp_General_OnApply (HWND hDlg)
184 {
185    ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
186
187    LPCELL_CHANGE_PARAMS pTask = New (CELL_CHANGE_PARAMS);
188    memset (pTask, 0x00, sizeof(CELL_CHANGE_PARAMS));
189    pTask->idCell = idCell;
190    pTask->idUserMax = SP_GetPos (GetDlgItem (hDlg, IDC_CELL_USERMAX));
191    pTask->idGroupMax = SP_GetPos (GetDlgItem (hDlg, IDC_CELL_GROUPMAX));
192    StartTask (taskCELL_CHANGE, NULL, pTask);
193 }
194