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>
17 #include "agg_general.h"
18 #include "svr_general.h"
19 #include "propcache.h"
24 * PROTOTYPES _________________________________________________________________
28 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
30 void Aggregates_General_OnInitDialog (HWND hDlg);
31 void Aggregates_General_OnApply (HWND hDlg);
32 void Aggregates_General_OnWarnings (HWND hDlg);
33 void Aggregates_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp);
34 void Aggregates_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp);
38 * ROUTINES ___________________________________________________________________
42 void Aggregates_ShowProperties (LPIDENT lpiAggregate, size_t nAlerts, BOOL fJumpToThreshold, HWND hParentModal)
46 if ((hCurrent = PropCache_Search (pcAGG_PROP, lpiAggregate)) != NULL)
53 if ((hTab = GetDlgItem (hCurrent, IDC_PROPSHEET_TABCTRL)) != NULL)
55 int nTabs = TabCtrl_GetItemCount (hTab);
56 TabCtrl_SetCurSel (hTab, nTabs-1);
60 nm.idFrom = IDC_PROPSHEET_TABCTRL;
61 nm.code = TCN_SELCHANGE;
62 SendMessage (hCurrent, WM_NOTIFY, 0, (LPARAM)&nm);
68 TCHAR szSvrName[ cchNAME ];
69 TCHAR szAggName[ cchNAME ];
70 lpiAggregate->GetServerName (szSvrName);
71 lpiAggregate->GetAggregateName (szAggName);
72 LPTSTR pszTitle = FormatString (IDS_AGG_PROP_TITLE, TEXT("%s%s"), szSvrName, szAggName);
74 LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
75 psh->fMadeCaption = TRUE;
76 psh->sh.hwndParent = hParentModal;
78 if (PropSheet_AddProblemsTab (psh, IDD_AGG_PROBLEMS, lpiAggregate, nAlerts) &&
79 PropSheet_AddTab (psh, IDS_AGG_GENERAL_TAB, IDD_AGG_GENERAL, (DLGPROC)Aggregates_General_DlgProc, (LPARAM)lpiAggregate, TRUE, FALSE))
82 psh->sh.nStartPage = psh->sh.nPages-1;
85 PropSheet_ShowModal (psh, PumpMessage);
87 PropSheet_ShowModeless (psh);
93 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
95 if (AfsAppLib_HandleHelp (IDD_AGG_GENERAL, hDlg, msg, wp, lp))
98 if (msg == WM_INITDIALOG)
99 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
101 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
105 case WM_INITDIALOG_SHEET:
106 PropCache_Add (pcAGG_PROP, (LPIDENT)lp, hDlg);
109 case WM_DESTROY_SHEET:
110 PropCache_Delete (hDlg);
114 Aggregates_General_OnInitDialog (hDlg);
115 StartTask (taskAGG_PROP_INIT, hDlg, lpi);
120 if ((ptp = (LPTASKPACKET)lp) != NULL)
122 if (ptp->idTask == taskAGG_PROP_INIT)
123 Aggregates_General_OnEndTask_InitDialog (hDlg, ptp);
124 else if (ptp->idTask == taskAGG_PROP_APPLY)
125 Aggregates_General_OnEndTask_Apply (hDlg, ptp);
126 FreeTaskPacket (ptp);
138 Aggregates_General_OnApply (hDlg);
141 case IDC_AGG_WARNALLOC:
142 PropSheetChanged (hDlg);
146 case IDC_AGG_WARN_AGGFULL:
147 case IDC_AGG_WARN_AGGFULL_DEF:
148 Aggregates_General_OnWarnings (hDlg);
149 PropSheetChanged (hDlg);
152 case IDC_AGG_WARN_AGGFULL_PERCENT:
153 PropSheetChanged (hDlg);
163 void Aggregates_General_OnInitDialog (HWND hDlg)
165 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
167 TCHAR szSvrName[ cchNAME ];
168 TCHAR szAggName[ cchNAME ];
169 lpi->GetServerName (szSvrName);
170 lpi->GetAggregateName (szAggName);
172 TCHAR szText[ cchRESOURCE ];
173 GetDlgItemText (hDlg, IDC_AGG_NAME, szText, cchRESOURCE);
174 LPTSTR pszText = FormatString (szText, TEXT("%s%s"), szSvrName, szAggName);
175 SetDlgItemText (hDlg, IDC_AGG_NAME, pszText);
176 FreeString (pszText);
178 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARNALLOC), FALSE);
179 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN), FALSE);
180 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), FALSE);
181 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), FALSE);
182 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
186 void Aggregates_General_OnApply (HWND hDlg)
188 LPAGG_PROP_APPLY_PACKET lpp;
189 if ((lpp = New (AGG_PROP_APPLY_PACKET)) != NULL)
191 lpp->lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
192 lpp->fIDC_AGG_WARNALLOC = IsDlgButtonChecked (hDlg, IDC_AGG_WARNALLOC);
193 lpp->fIDC_AGG_WARN = IsDlgButtonChecked (hDlg, IDC_AGG_WARN);
194 lpp->fIDC_AGG_WARN_AGGFULL_DEF = IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL_DEF);
195 lpp->wIDC_AGG_WARN_AGGFULL_PERCENT = (short)SP_GetPos (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT));
197 StartTask (taskAGG_PROP_APPLY, hDlg, lpp);
202 void Aggregates_General_OnWarnings (HWND hDlg)
204 if (!IsDlgButtonChecked (hDlg, IDC_AGG_WARN))
206 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), FALSE);
207 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), FALSE);
208 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
209 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), FALSE);
211 else if (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL))
213 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), TRUE);
214 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), TRUE);
215 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), TRUE);
216 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), TRUE);
218 else // (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL_DEF))
220 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL_DEF, TRUE);
221 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DEF), TRUE);
222 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL), TRUE);
223 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT), FALSE);
224 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_DESC), FALSE);
229 void Aggregates_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
231 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
235 TCHAR szUnknown[ cchRESOURCE ];
236 GetString (szUnknown, IDS_UNKNOWN);
237 SetDlgItemText (hDlg, IDC_AGG_ID, szUnknown);
238 SetDlgItemText (hDlg, IDC_AGG_DEVICE, szUnknown);
239 SetDlgItemText (hDlg, IDC_AGG_FILESETS, szUnknown);
240 SetDlgItemText (hDlg, IDC_AGG_USAGE, szUnknown);
242 TCHAR szSvrName[ cchNAME ];
243 TCHAR szAggName[ cchNAME ];
244 lpi->GetServerName (szSvrName);
245 lpi->GetAggregateName (szAggName);
246 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_AGGREGATE_STATUS, TEXT("%s%s"), szSvrName, szAggName);
250 TCHAR szText[ cchRESOURCE ];
251 wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->as.dwID);
252 SetDlgItemText (hDlg, IDC_AGG_ID, szText);
254 SetDlgItemText (hDlg, IDC_AGG_DEVICE, TASKDATA(ptp)->pszText1);
256 LPTSTR pszText = FormatString (IDS_AGG_FILESETS, TEXT("%lu%.1B"), TASKDATA(ptp)->nFilesets, (double)cb1KB * (double)(TASKDATA(ptp)->as.ckStorageAllocated));
257 SetDlgItemText (hDlg, IDC_AGG_FILESETS, pszText);
258 FreeString (pszText);
260 double dUsed = 1024.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree);
261 double dTotal = 1024.0 * TASKDATA(ptp)->as.ckStorageTotal;
263 if (TASKDATA(ptp)->as.ckStorageTotal != 0)
265 dwPer = (DWORD)( 100.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree) / TASKDATA(ptp)->as.ckStorageTotal );
266 dwPer = limit( 0, dwPer, 100 );
269 LPTSTR pszUsage = FormatString (IDS_USAGE_AGGREGATE, TEXT("%.1B%.1B%lu"), dUsed, dTotal, dwPer);
270 SetDlgItemText (hDlg, IDC_AGG_USAGE, pszUsage);
271 FreeString (pszUsage);
273 SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETRANGE, 0, MAKELPARAM(0,100));
274 SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETPOS, (WPARAM)dwPer, 0);
276 if (TASKDATA(ptp)->lpsp->fWarnAggAlloc)
278 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARNALLOC), TRUE);
279 CheckDlgButton (hDlg, IDC_AGG_WARNALLOC, TASKDATA(ptp)->lpap->fWarnAggAlloc);
282 EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN), TRUE);
284 if (TASKDATA(ptp)->lpsp->perWarnAggFull == 0)
286 GetString (szText, IDS_AGGFULL_WARN_OFF);
287 SetDlgItemText (hDlg, IDC_AGG_WARN_AGGFULL_DEF, szText);
291 pszText = FormatString (IDS_AGGFULL_WARN_ON, TEXT("%lu"), TASKDATA(ptp)->lpsp->perWarnAggFull);
292 SetDlgItemText (hDlg, IDC_AGG_WARN_AGGFULL_DEF, pszText);
293 FreeString (pszText);
296 CheckDlgButton (hDlg, IDC_AGG_WARN, (TASKDATA(ptp)->lpap->perWarnAggFull != 0));
297 if (TASKDATA(ptp)->lpap->perWarnAggFull != 0)
299 if (TASKDATA(ptp)->lpap->perWarnAggFull != -1)
300 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL, TRUE);
302 CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL_DEF, TRUE);
305 CreateSpinner (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT),
306 10, FALSE, // base, signed
308 (TASKDATA(ptp)->lpap->perWarnAggFull == 0 || TASKDATA(ptp)->lpap->perWarnAggFull == -1) ? perDEFAULT_AGGFULL_WARNING : TASKDATA(ptp)->lpap->perWarnAggFull,
309 100); // min, default, max
311 Aggregates_General_OnWarnings (hDlg);
316 void Aggregates_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
320 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
322 TCHAR szSvrName[ cchNAME ];
323 TCHAR szAggName[ cchNAME ];
324 lpi->GetServerName (szSvrName);
325 lpi->GetAggregateName (szAggName);
326 ErrorDialog (ptp->status, IDS_ERROR_CHANGE_AGGREGATE_STATUS, TEXT("%s%s"), szSvrName, szAggName);