/* * Copyright 2000, International Business Machines Corporation and others. * All Rights Reserved. * * This software has been released under the terms of the IBM Public * License. For details, see the LICENSE file in the top-level source * directory or online at http://www.openafs.org/dl/license10.html */ extern "C" { #include #include } #include "TaAfsUsrMgr.h" #include "cell_prop.h" #include "winlist.h" /* * DEFINITIONS ________________________________________________________________ * */ #define nID_USERMAX_MIN 1 #define nID_USERMAX_MAX -1 #define nID_GROUPMAX_MIN -0x7FFFFFFF #define nID_GROUPMAX_MAX -1 /* * PROTOTYPES _________________________________________________________________ * */ BOOL CALLBACK CellProp_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void CellProp_General_OnInitDialog (HWND hDlg); void CellProp_General_OnDestroy (HWND hDlg); void CellProp_General_OnApply (HWND hDlg); void CellProp_General_UpdateDialog (HWND hDlg); /* * ROUTINES ___________________________________________________________________ * */ void Cell_ShowProperties (CELLPROPTAB cptTarget) { HWND hSheet = NULL; // If there is already a window open for this cell, switch to it. // if ((hSheet = WindowList_Search (wltCELL_PROPERTIES, g.idCell)) != NULL) { SetForegroundWindow (hSheet); if (cptTarget != cptANY) { HWND hTab = GetDlgItem (hSheet, IDC_PROPSHEET_TABCTRL); int nTabs = TabCtrl_GetItemCount (hTab); if (nTabs < nCELLPROPTAB_MAX) cptTarget = (CELLPROPTAB)( (cptTarget == cptPROBLEMS) ? ((int)cptGENERAL-1) : ((int)cptTarget-1) ); TabCtrl_SwitchToTab (hTab, cptTarget); } return; } // Okay, we're clear to create the new properties window. // TCHAR szCell[ cchRESOURCE ]; asc_CellNameGet_Fast (g.idClient, g.idCell, szCell); LPTSTR pszTitle = FormatString (IDS_CELL_PROPERTIES_TITLE, TEXT("%s"), szCell); LPPROPSHEET psh = PropSheet_Create (pszTitle, TRUE, NULL, (LPARAM)g.idCell); PropSheet_AddTab (psh, 0, IDD_CELL_GENERAL, (DLGPROC)CellProp_General_DlgProc, (LPARAM)g.idCell, TRUE, (cptTarget == cptGENERAL) ? TRUE : FALSE); PropSheet_ShowModeless (psh, SW_SHOW); } BOOL CALLBACK CellProp_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (AfsAppLib_HandleHelp (IDD_CELL_GENERAL, hDlg, msg, wp, lp)) return TRUE; ASID idCell = (ASID)PropSheet_FindTabParam (hDlg); switch (msg) { case WM_INITDIALOG_SHEET: WindowList_Add (hDlg, wltCELL_PROPERTIES, idCell); break; case WM_DESTROY_SHEET: WindowList_Remove (hDlg); break; case WM_INITDIALOG: CellProp_General_OnInitDialog (hDlg); break; case WM_DESTROY: CellProp_General_OnDestroy (hDlg); break; case WM_ASC_NOTIFY_OBJECT: CellProp_General_UpdateDialog (hDlg); break; case WM_COMMAND: switch (LOWORD(wp)) { case IDAPPLY: CellProp_General_OnApply (hDlg); break; case IDC_CELL_USERMAX: case IDC_CELL_GROUPMAX: PropSheetChanged (hDlg); break; } break; } return FALSE; } void CellProp_General_OnInitDialog (HWND hDlg) { ASID idCell = (ASID)PropSheet_FindTabParam (hDlg); // Indicate we want to know if anything changes with this cell // LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS); memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS)); pTask->hNotify = hDlg; asc_AsidListCreate (&pTask->pAsidList); asc_AsidListAddEntry (&pTask->pAsidList, idCell, 0); StartTask (taskOBJECT_LISTEN, NULL, pTask); // Fix the name shown on the dialog // TCHAR szText[ cchRESOURCE ]; GetDlgItemText (hDlg, IDC_CELL_NAME, szText, cchRESOURCE); TCHAR szName[ cchRESOURCE ]; asc_CellNameGet_Fast (g.idClient, idCell, szName); LPTSTR pszText = FormatString (szText, TEXT("%s"), szName); SetDlgItemText (hDlg, IDC_CELL_NAME, pszText); FreeString (pszText); // Fill in the rest of the information about the selected users // CellProp_General_UpdateDialog (hDlg); } void CellProp_General_OnDestroy (HWND hDlg) { // Indicate we no longer care if anything changes with this cell // LPOBJECT_LISTEN_PARAMS pTask = New (OBJECT_LISTEN_PARAMS); memset (pTask, 0x00, sizeof(OBJECT_LISTEN_PARAMS)); pTask->hNotify = hDlg; StartTask (taskOBJECT_LISTEN, NULL, pTask); } void CellProp_General_UpdateDialog (HWND hDlg) { ASID idCell = (ASID)PropSheet_FindTabParam (hDlg); ULONG status; ASOBJPROP Properties; asc_ObjectPropertiesGet_Fast (g.idClient, idCell, idCell, &Properties, &status); if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX))) SP_SetPos (GetDlgItem (hDlg, IDC_CELL_USERMAX), Properties.u.CellProperties.idUserMax); else CreateSpinner (GetDlgItem (hDlg, IDC_CELL_USERMAX), 10, FALSE, nID_USERMAX_MIN, Properties.u.CellProperties.idUserMax, nID_USERMAX_MAX); if (fHasSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX))) SP_SetPos (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), Properties.u.CellProperties.idGroupMax); else CreateSpinner (GetDlgItem (hDlg, IDC_CELL_GROUPMAX), 10, TRUE, nID_GROUPMAX_MIN, Properties.u.CellProperties.idGroupMax, nID_GROUPMAX_MAX); } void CellProp_General_OnApply (HWND hDlg) { ASID idCell = (ASID)PropSheet_FindTabParam (hDlg); LPCELL_CHANGE_PARAMS pTask = New (CELL_CHANGE_PARAMS); memset (pTask, 0x00, sizeof(CELL_CHANGE_PARAMS)); pTask->idCell = idCell; pTask->idUserMax = SP_GetPos (GetDlgItem (hDlg, IDC_CELL_USERMAX)); pTask->idGroupMax = SP_GetPos (GetDlgItem (hDlg, IDC_CELL_GROUPMAX)); StartTask (taskCELL_CHANGE, NULL, pTask); }