2 * Copyright 2000, International Business Machines Corporation and others.
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
11 #include <afs/param.h>
15 #include "TaAfsUsrMgr.h"
16 #include "cell_prop.h"
21 * DEFINITIONS ________________________________________________________________
25 #define nID_USERMAX_MIN 1
26 #define nID_USERMAX_MAX -1
28 #define nID_GROUPMAX_MIN -0x7FFFFFFF
29 #define nID_GROUPMAX_MAX -1
33 * PROTOTYPES _________________________________________________________________
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);
45 * ROUTINES ___________________________________________________________________
49 void Cell_ShowProperties (CELLPROPTAB cptTarget)
53 // If there is already a window open for this cell, switch to it.
55 if ((hSheet = WindowList_Search (wltCELL_PROPERTIES, g.idCell)) != NULL)
57 SetForegroundWindow (hSheet);
58 if (cptTarget != cptANY)
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);
69 // Okay, we're clear to create the new properties window.
71 TCHAR szCell[ cchRESOURCE ];
72 asc_CellNameGet_Fast (g.idClient, g.idCell, szCell);
74 LPTSTR pszTitle = FormatString (IDS_CELL_PROPERTIES_TITLE, TEXT("%s"), szCell);
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);
82 BOOL CALLBACK CellProp_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
84 if (AfsAppLib_HandleHelp (IDD_CELL_GENERAL, hDlg, msg, wp, lp))
87 ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
91 case WM_INITDIALOG_SHEET:
92 WindowList_Add (hDlg, wltCELL_PROPERTIES, idCell);
95 case WM_DESTROY_SHEET:
96 WindowList_Remove (hDlg);
100 CellProp_General_OnInitDialog (hDlg);
104 CellProp_General_OnDestroy (hDlg);
107 case WM_ASC_NOTIFY_OBJECT:
108 CellProp_General_UpdateDialog (hDlg);
115 CellProp_General_OnApply (hDlg);
118 case IDC_CELL_USERMAX:
119 case IDC_CELL_GROUPMAX:
120 PropSheetChanged (hDlg);
130 void CellProp_General_OnInitDialog (HWND hDlg)
132 ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
134 // Indicate we want to know if anything changes with this cell
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);
143 // Fix the name shown on the dialog
145 TCHAR szText[ cchRESOURCE ];
146 GetDlgItemText (hDlg, IDC_CELL_NAME, szText, cchRESOURCE);
148 TCHAR szName[ cchRESOURCE ];
149 asc_CellNameGet_Fast (g.idClient, idCell, szName);
151 LPTSTR pszText = FormatString (szText, TEXT("%s"), szName);
152 SetDlgItemText (hDlg, IDC_CELL_NAME, pszText);
153 FreeString (pszText);
155 // Fill in the rest of the information about the selected users
157 CellProp_General_UpdateDialog (hDlg);
161 void CellProp_General_OnDestroy (HWND hDlg)
163 // Indicate we no longer care if anything changes with this cell
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);
172 void CellProp_General_UpdateDialog (HWND hDlg)
174 ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
177 ASOBJPROP Properties;
178 asc_ObjectPropertiesGet_Fast (g.idClient, idCell, idCell, &Properties, &status);
180 if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX)))
181 SP_SetPos (GetDlgItem (hDlg, IDC_CELL_USERMAX), Properties.u.CellProperties.idUserMax);
183 CreateSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX), 10, FALSE, nID_USERMAX_MIN, Properties.u.CellProperties.idUserMax, nID_USERMAX_MAX);
185 if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX)))
186 SP_SetPos (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), Properties.u.CellProperties.idGroupMax);
188 CreateSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), 10, TRUE, nID_GROUPMAX_MIN, Properties.u.CellProperties.idGroupMax, nID_GROUPMAX_MAX);
192 void CellProp_General_OnApply (HWND hDlg)
194 ASID idCell = (ASID)PropSheet_FindTabParam (hDlg);
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);