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
14 #include <afs/param.h>
20 #include "agg_general.h"
21 #include "svr_general.h"
22 #include "propcache.h"
27 * PROTOTYPES _________________________________________________________________
31 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
33 void Aggregates_General_OnInitDialog (HWND hDlg);
34 void Aggregates_General_OnApply (HWND hDlg);
35 void Aggregates_General_OnWarnings (HWND hDlg);
36 void Aggregates_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp);
37 void Aggregates_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp);
41 * ROUTINES ___________________________________________________________________
45 void Aggregates_ShowProperties (LPIDENT lpiAggregate, size_t nAlerts, BOOL fJumpToThreshold, HWND hParentModal)
49 if ((hCurrent = PropCache_Search (pcAGG_PROP, lpiAggregate)) != NULL)
56 if ((hTab = GetDlgItem (hCurrent, IDC_PROPSHEET_TABCTRL)) != NULL)
58 int nTabs = TabCtrl_GetItemCount (hTab);
59 TabCtrl_SetCurSel (hTab, nTabs-1);
63 nm.idFrom = IDC_PROPSHEET_TABCTRL;
64 nm.code = TCN_SELCHANGE;
65 SendMessage (hCurrent, WM_NOTIFY, 0, (LPARAM)&nm);
71 TCHAR szSvrName[ cchNAME ];
72 TCHAR szAggName[ cchNAME ];
73 lpiAggregate->GetServerName (szSvrName);
74 lpiAggregate->GetAggregateName (szAggName);
75 LPTSTR pszTitle = FormatString (IDS_AGG_PROP_TITLE, TEXT("%s%s"), szSvrName, szAggName);
77 LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
78 psh->fMadeCaption = TRUE;
79 psh->sh.hwndParent = hParentModal;
81 if (PropSheet_AddProblemsTab (psh, IDD_AGG_PROBLEMS, lpiAggregate, nAlerts) &&
82 PropSheet_AddTab (psh, IDS_AGG_GENERAL_TAB, IDD_AGG_GENERAL, (DLGPROC)Aggregates_General_DlgProc, (LPARAM)lpiAggregate, TRUE, FALSE))
85 psh->sh.nStartPage = psh->sh.nPages-1;
88 PropSheet_ShowModal (psh, PumpMessage);
90 PropSheet_ShowModeless (psh);
96 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
98 if (AfsAppLib_HandleHelp (IDD_AGG_GENERAL, hDlg, msg, wp, lp))
101 if (msg == WM_INITDIALOG)
102 SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
104 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
108 case WM_INITDIALOG_SHEET:
109 PropCache_Add (pcAGG_PROP, (LPIDENT)lp, hDlg);
112 case WM_DESTROY_SHEET:
113 PropCache_Delete (hDlg);
117 Aggregates_General_OnInitDialog (hDlg);
118 StartTask (taskAGG_PROP_INIT, hDlg, lpi);
123 if ((ptp = (LPTASKPACKET)lp) != NULL)
125 if (ptp->idTask == taskAGG_PROP_INIT)
126 Aggregates_General_OnEndTask_InitDialog (hDlg, ptp);
127 else if (ptp->idTask == taskAGG_PROP_APPLY)
128 Aggregates_General_OnEndTask_Apply (hDlg, ptp);
129 FreeTaskPacket (ptp);
141 Aggregates_General_OnApply (hDlg);
144 case IDC_AGG_WARNALLOC:
145 PropSheetChanged (hDlg);
149 case IDC_AGG_WARN_AGGFULL:
150 case IDC_AGG_WARN_AGGFULL_DEF:
151 Aggregates_General_OnWarnings (hDlg);
152 PropSheetChanged (hDlg);
155 case IDC_AGG_WARN_AGGFULL_PERCENT:
156 PropSheetChanged (hDlg);
166 void Aggregates_General_OnInitDialog (HWND hDlg)
168 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
170 TCHAR szSvrName[ cchNAME ];
171 TCHAR szAggName[ cchNAME ];
172 lpi->GetServerName (szSvrName);
173 lpi->GetAggregateName (szAggName);
175 TCHAR szText[ cchRESOURCE ];
176 GetDlgItemText (hDlg, IDC_AGG_NAME, szText, cchRESOURCE);
177 LPTSTR pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szAggName);
178 SetDlgItemText (hDlg, IDC_AGG_NAME, pszText);
179 FreeString (pszText);
181 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARNALLOC), FALSE);
182 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN), FALSE);
183 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), FALSE);
184 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), FALSE);
185 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
189 void Aggregates_General_OnApply (HWND hDlg)
191 LPAGG_PROP_APPLY_PACKET lpp;
192 if ((lpp = New (AGG_PROP_APPLY_PACKET)) != NULL)
194 lpp->lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
195 lpp->fIDC_AGG_WARNALLOC = IsDlgButtonChecked (hDlg, IDC_AGG_WARNALLOC);
196 lpp->fIDC_AGG_WARN = IsDlgButtonChecked (hDlg, IDC_AGG_WARN);
197 lpp->fIDC_AGG_WARN_AGGFULL_DEF = IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL_DEF);
198 lpp->wIDC_AGG_WARN_AGGFULL_PERCENT = (short)SP_GetPos (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT));
200 StartTask (taskAGG_PROP_APPLY, hDlg, lpp);
205 void Aggregates_General_OnWarnings (HWND hDlg)
207 if (!IsDlgButtonChecked (hDlg, IDC_AGG_WARN))
209 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), FALSE);
210 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), FALSE);
211 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
212 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), FALSE);
214 else if (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL))
216 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), TRUE);
217 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), TRUE);
218 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), TRUE);
219 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), TRUE);
221 else // (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL_DEF))
223 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL_DEF, TRUE);
224 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), TRUE);
225 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), TRUE);
226 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
227 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), FALSE);
232 void Aggregates_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
234 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
238 TCHAR szUnknown[ cchRESOURCE ];
239 GetString (szUnknown, IDS_UNKNOWN);
240 SetDlgItemText (hDlg, IDC_AGG_ID, szUnknown);
241 SetDlgItemText (hDlg, IDC_AGG_DEVICE, szUnknown);
242 SetDlgItemText (hDlg, IDC_AGG_FILESETS, szUnknown);
243 SetDlgItemText (hDlg, IDC_AGG_USAGE, szUnknown);
245 TCHAR szSvrName[ cchNAME ];
246 TCHAR szAggName[ cchNAME ];
247 lpi->GetServerName (szSvrName);
248 lpi->GetAggregateName (szAggName);
249 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_AGGREGATE_STATUS, TEXT("%s%s"), szSvrName, szAggName);
253 TCHAR szText[ cchRESOURCE ];
254 wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->as.dwID);
255 SetDlgItemText (hDlg, IDC_AGG_ID, szText);
257 SetDlgItemText (hDlg, IDC_AGG_DEVICE, TASKDATA(ptp)->pszText1);
259 LPTSTR pszText = FormatString (IDS_AGG_FILESETS, TEXT("%lu%.1B"), TASKDATA(ptp)->nFilesets, (double)cb1KB * (double)(TASKDATA(ptp)->as.ckStorageAllocated));
260 SetDlgItemText (hDlg, IDC_AGG_FILESETS, pszText);
261 FreeString (pszText);
263 double dUsed = 1024.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree);
264 double dTotal = 1024.0 * TASKDATA(ptp)->as.ckStorageTotal;
266 if (TASKDATA(ptp)->as.ckStorageTotal != 0)
268 dwPer = (DWORD)( 100.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree) / TASKDATA(ptp)->as.ckStorageTotal );
269 dwPer = limit( 0, dwPer, 100 );
272 LPTSTR pszUsage = FormatString (IDS_USAGE_AGGREGATE, TEXT("%.1B%.1B%lu"), dUsed, dTotal, dwPer);
273 SetDlgItemText (hDlg, IDC_AGG_USAGE, pszUsage);
274 FreeString (pszUsage);
276 SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETRANGE, 0, MAKELPARAM(0,100));
277 SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETPOS, (WPARAM)dwPer, 0);
279 if (TASKDATA(ptp)->lpsp->fWarnAggAlloc)
281 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARNALLOC), TRUE);
282 CheckDlgButton (hDlg, IDC_AGG_WARNALLOC, TASKDATA(ptp)->lpap->fWarnAggAlloc);
285 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN), TRUE);
287 if (TASKDATA(ptp)->lpsp->perWarnAggFull == 0)
289 GetString (szText, IDS_AGGFULL_WARN_OFF);
290 SetDlgItemText (hDlg, IDC_AGG_WARN_AGGFULL_DEF, szText);
294 pszText = FormatString (IDS_AGGFULL_WARN_ON, TEXT("%lu"), TASKDATA(ptp)->lpsp->perWarnAggFull);
295 SetDlgItemText (hDlg, IDC_AGG_WARN_AGGFULL_DEF, pszText);
296 FreeString (pszText);
299 CheckDlgButton (hDlg, IDC_AGG_WARN, (TASKDATA(ptp)->lpap->perWarnAggFull != 0));
300 if (TASKDATA(ptp)->lpap->perWarnAggFull != 0)
302 if (TASKDATA(ptp)->lpap->perWarnAggFull != -1)
303 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL, TRUE);
305 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL_DEF, TRUE);
308 CreateSpinner (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT),
309 10, FALSE, // base, signed
311 (TASKDATA(ptp)->lpap->perWarnAggFull == 0 || TASKDATA(ptp)->lpap->perWarnAggFull == -1) ? perDEFAULT_AGGFULL_WARNING : TASKDATA(ptp)->lpap->perWarnAggFull,
312 100); // min, default, max
314 Aggregates_General_OnWarnings (hDlg);
319 void Aggregates_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
323 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
325 TCHAR szSvrName[ cchNAME ];
326 TCHAR szAggName[ cchNAME ];
327 lpi->GetServerName (szSvrName);
328 lpi->GetAggregateName (szAggName);
329 ErrorDialog (ptp->status, IDS_ERROR_CHANGE_AGGREGATE_STATUS, TEXT("%s%s"), szSvrName, szAggName);