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 "set_quota.h"
18 #include "svr_general.h"
19 #include "propcache.h"
24 * PROTOTYPES _________________________________________________________________
28 BOOL CALLBACK Filesets_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
30 void Filesets_General_OnInitDialog (HWND hDlg, LPIDENT lpiFileset);
31 void Filesets_General_OnApply (HWND hDlg, LPIDENT lpiFileset);
32 void Filesets_General_OnWarnings (HWND hDlg, LPIDENT lpiFileset);
34 void Filesets_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi);
38 * ROUTINES ___________________________________________________________________
42 void Filesets_ShowProperties (LPIDENT lpiFileset, size_t nAlerts, BOOL fJumpToThreshold)
45 if ((hCurrent = PropCache_Search (pcSET_PROP, lpiFileset)) != NULL)
52 if ((hTab = GetDlgItem (hCurrent, IDC_PROPSHEET_TABCTRL)) != NULL)
54 int nTabs = TabCtrl_GetItemCount (hTab);
55 TabCtrl_SetCurSel (hTab, nTabs-1);
59 nm.idFrom = IDC_PROPSHEET_TABCTRL;
60 nm.code = TCN_SELCHANGE;
61 SendMessage (hCurrent, WM_NOTIFY, 0, (LPARAM)&nm);
67 TCHAR szCell[ cchNAME ];
68 lpiFileset->GetCellName (szCell);
70 TCHAR szFileset[ cchNAME ];
71 lpiFileset->GetFilesetName (szFileset);
73 LPTSTR pszTitle = FormatString (IDS_SET_PROP_TITLE, TEXT("%s"), szFileset);
74 LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
75 psh->fMadeCaption = TRUE;
77 if (PropSheet_AddProblemsTab (psh, IDD_SET_PROBLEMS, lpiFileset, nAlerts) &&
78 PropSheet_AddTab (psh, IDS_SET_GENERAL_TAB, IDD_SET_GENERAL, (DLGPROC)Filesets_General_DlgProc, (LPARAM)lpiFileset, TRUE))
81 psh->sh.nStartPage = psh->sh.nPages-1;
82 PropSheet_ShowModeless (psh);
88 BOOL CALLBACK Filesets_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
90 if (AfsAppLib_HandleHelp (IDD_SET_GENERAL, hDlg, msg, wp, lp))
93 if (msg == WM_INITDIALOG)
94 SetWindowLong (hDlg, DWL_USER, ((LPPROPSHEETPAGE)lp)->lParam);
96 LPIDENT lpi = (LPIDENT)GetWindowLong (hDlg, DWL_USER);
100 case WM_INITDIALOG_SHEET:
101 PropCache_Add (pcSET_PROP, (LPIDENT)lp, hDlg);
104 case WM_DESTROY_SHEET:
105 PropCache_Delete (hDlg);
109 Filesets_General_OnInitDialog (hDlg, lpi);
110 StartTask (taskSET_PROP_INIT, hDlg, lpi);
111 NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
115 DontNotifyMeEver (hDlg);
120 if ((ptp = (LPTASKPACKET)lp) != NULL)
122 if (ptp->idTask == taskSET_PROP_INIT)
123 Filesets_General_OnEndTask_InitDialog (hDlg, ptp, lpi);
124 FreeTaskPacket (ptp);
128 case WM_NOTIFY_FROM_DISPATCH:
129 StartTask (taskSET_PROP_INIT, hDlg, lpi);
130 Delete ((LPNOTIFYSTRUCT)lp);
141 Filesets_General_OnApply (hDlg, lpi);
145 case IDC_SET_WARN_SETFULL:
146 case IDC_SET_WARN_SETFULL_DEF:
147 Filesets_General_OnWarnings (hDlg, lpi);
148 PropSheetChanged (hDlg);
151 case IDC_SET_WARN_SETFULL_PERCENT:
152 PropSheetChanged (hDlg);
156 if (Filesets_SetQuota (lpi))
158 // this new task will block until the setquota req is done
159 StartTask (taskSET_PROP_INIT, hDlg, lpi);
164 StartTask (taskSET_LOCK, NULL, lpi);
168 StartTask (taskSET_UNLOCK, NULL, lpi);
178 void Filesets_General_OnInitDialog (HWND hDlg, LPIDENT lpi)
180 TCHAR szText[ cchRESOURCE ];
181 TCHAR szSvrName[ cchNAME ];
182 TCHAR szAggName[ cchNAME ];
183 TCHAR szSetName[ cchNAME ];
185 lpi->GetServerName (szSvrName);
186 lpi->GetAggregateName (szAggName);
187 lpi->GetFilesetName (szSetName);
188 lpi->GetFilesetID (&vidFileset);
190 GetDlgItemText (hDlg, IDC_SET_NAME, szText, cchRESOURCE);
191 LPTSTR pszText = FormatString (szText, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
192 SetDlgItemText (hDlg, IDC_SET_NAME, pszText);
193 FreeString (pszText);
195 pszText = FormatString (TEXT("%1"), TEXT("%lu"), vidFileset);
196 SetDlgItemText (hDlg, IDC_SET_ID, pszText);
197 FreeString (pszText);
199 EnableWindow (GetDlgItem (hDlg, IDC_SET_LOCK), FALSE);
200 EnableWindow (GetDlgItem (hDlg, IDC_SET_UNLOCK), FALSE);
201 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
202 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), FALSE);
203 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
204 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
205 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
206 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
210 void Filesets_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi)
214 TCHAR szUnknown[ cchRESOURCE ];
215 GetString (szUnknown, IDS_UNKNOWN);
219 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szUnknown);
220 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szUnknown);
221 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szUnknown);
222 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szUnknown);
223 SetDlgItemText (hDlg, IDC_SET_USAGE, szUnknown);
224 SetDlgItemText (hDlg, IDC_SET_STATUS, szUnknown);
225 SetDlgItemText (hDlg, IDC_SET_FILES, szUnknown);
227 TCHAR szSvrName[ cchNAME ];
228 TCHAR szAggName[ cchNAME ];
229 TCHAR szSetName[ cchNAME ];
230 lpi->GetServerName (szSvrName);
231 lpi->GetAggregateName (szAggName);
232 lpi->GetFilesetName (szSetName);
233 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
237 TCHAR szText[ cchRESOURCE ];
239 EnableWindow (GetDlgItem (hDlg, IDC_SET_LOCK), TRUE);
240 EnableWindow (GetDlgItem (hDlg, IDC_SET_UNLOCK), TRUE);
241 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), TRUE);
242 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), TRUE);
243 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
244 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
245 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), TRUE);
246 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), TRUE);
248 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeCreation))
249 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szUnknown);
251 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szText);
253 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastUpdate))
254 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szUnknown);
256 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szText);
258 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastAccess))
259 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szUnknown);
261 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szText);
263 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastBackup))
264 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szUnknown);
266 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szText);
268 wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->fs.nFiles);
269 SetDlgItemText (hDlg, IDC_SET_FILES, szText);
271 size_t nAlerts = Alert_GetCount (lpi);
274 GetString (szText, IDS_SETSTATUS_1ALERT);
275 SetDlgItemText (hDlg, IDC_SET_STATUS, szText);
277 else if (nAlerts > 1)
279 pszText = FormatString (IDS_SETSTATUS_2ALERT, TEXT("%lu"), nAlerts);
280 SetDlgItemText (hDlg, IDC_SET_STATUS, pszText);
281 FreeString (pszText);
283 else // (nAlerts == 0)
285 if (TASKDATA(ptp)->fs.State & fsBUSY)
286 GetString (szText, IDS_SETSTATUS_BUSY);
287 else if (TASKDATA(ptp)->fs.State & fsSALVAGE)
288 GetString (szText, IDS_SETSTATUS_SALVAGE);
289 else if (TASKDATA(ptp)->fs.State & fsMOVED)
290 GetString (szText, IDS_SETSTATUS_MOVED);
291 else if (TASKDATA(ptp)->fs.State & fsLOCKED)
292 GetString (szText, IDS_SETSTATUS_LOCKED);
293 else if (TASKDATA(ptp)->fs.State & fsNO_VOL)
294 GetString (szText, IDS_SETSTATUS_NO_VOL);
296 GetString (szText, IDS_STATUS_NOALERTS);
297 SetDlgItemText (hDlg, IDC_SET_STATUS, szText);
300 if (TASKDATA(ptp)->fs.Type == ftREADWRITE)
302 Filesets_DisplayQuota (hDlg, &TASKDATA(ptp)->fs);
306 if (TASKDATA(ptp)->fs.Type == ftREPLICA)
307 GetString (szText, IDS_USAGE_REPLICA);
308 else // (TASKDATA(ptp)->fs.Type == ftCLONE)
309 GetString (szText, IDS_USAGE_CLONE);
311 pszText = FormatString (szText, TEXT("%.1B"), (double)TASKDATA(ptp)->fs.ckUsed * cb1KB);
312 SetDlgItemText (hDlg, IDC_SET_USAGE, pszText);
313 FreeString (pszText);
315 if (GetDlgItem (hDlg, IDC_SET_USAGEBAR))
318 GetRectInParent (GetDlgItem (hDlg, IDC_SET_USAGEBAR), &rUsagebar);
320 HFONT hf = (HFONT)SendMessage (GetDlgItem (hDlg, IDC_SET_USAGEBAR), WM_GETFONT, 0, 0);
321 DestroyWindow (GetDlgItem (hDlg, IDC_SET_USAGEBAR));
323 if (TASKDATA(ptp)->fs.Type == ftREPLICA)
324 GetString (szText, IDS_NO_QUOTA_REPLICA);
325 else // (TASKDATA(ptp)->fs.Type == ftCLONE)
326 GetString (szText, IDS_NO_QUOTA_CLONE);
328 HWND hDesc = CreateWindow (TEXT("static"),
330 WS_CHILD | SS_SIMPLE,
331 rUsagebar.left, rUsagebar.top,
332 cxRECT(rUsagebar), cyRECT(rUsagebar),
337 SendMessage (hDesc, WM_SETFONT, (WPARAM)hf, MAKELPARAM(TRUE,0));
338 ShowWindow (hDesc, SW_SHOW);
341 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
342 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), FALSE);
343 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
344 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
345 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
346 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
349 if (TASKDATA(ptp)->lpsp->perWarnSetFull == 0)
351 GetString (szText, IDS_SETFULL_WARN_OFF);
352 SetDlgItemText (hDlg, IDC_SET_WARN_SETFULL_DEF, szText);
356 GetString (szText, IDS_SETFULL_WARN_ON);
357 pszText = FormatString (szText, TEXT("%lu"), TASKDATA(ptp)->lpsp->perWarnSetFull);
358 SetDlgItemText (hDlg, IDC_SET_WARN_SETFULL_DEF, pszText);
359 FreeString (pszText);
362 CheckDlgButton (hDlg, IDC_SET_WARN, (TASKDATA(ptp)->lpfp->perWarnSetFull != 0));
363 if (TASKDATA(ptp)->lpfp->perWarnSetFull != 0)
365 if (TASKDATA(ptp)->lpfp->perWarnSetFull != -1)
366 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL, TRUE);
368 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL_DEF, TRUE);
371 CreateSpinner (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT),
372 10, FALSE, // base, signed
374 (TASKDATA(ptp)->lpfp->perWarnSetFull == 0 || TASKDATA(ptp)->lpfp->perWarnSetFull == -1) ? perDEFAULT_SETFULL_WARNING : TASKDATA(ptp)->lpfp->perWarnSetFull,
375 100); // min, default, max
377 Filesets_General_OnWarnings (hDlg, lpi);
382 void Filesets_General_OnApply (HWND hDlg, LPIDENT lpi)
384 LPSET_PROP_APPLY_PARAMS lpp = New (SET_PROP_APPLY_PARAMS);
387 lpp->fIDC_SET_WARN = IsDlgButtonChecked (hDlg, IDC_SET_WARN);
388 lpp->fIDC_SET_WARN_SETFULL_DEF = IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL_DEF);
389 lpp->wIDC_SET_WARN_SETFULL_PERCENT = (WORD)SP_GetPos (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT));
391 StartTask (taskSET_PROP_APPLY, hDlg, lpp);
395 void Filesets_General_OnWarnings (HWND hDlg, LPIDENT lpi)
397 if (IsWindowEnabled (GetDlgItem (hDlg, IDC_SET_WARN)))
399 if (!IsDlgButtonChecked (hDlg, IDC_SET_WARN))
401 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
402 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
403 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
404 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
406 else if (IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL))
408 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
409 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
410 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), TRUE);
411 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), TRUE);
413 else // (IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL_DEF))
415 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL_DEF, TRUE);
416 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
417 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
418 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
419 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);