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