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 <afsconfig.h>
15 #include <afs/param.h>
21 #include "set_quota.h"
22 #include "svr_general.h"
23 #include "propcache.h"
28 * PROTOTYPES _________________________________________________________________
32 BOOL CALLBACK Filesets_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
34 void Filesets_General_OnInitDialog (HWND hDlg, LPIDENT lpiFileset);
35 void Filesets_General_OnApply (HWND hDlg, LPIDENT lpiFileset);
36 void Filesets_General_OnWarnings (HWND hDlg, LPIDENT lpiFileset);
38 void Filesets_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi);
42 * ROUTINES ___________________________________________________________________
46 void Filesets_ShowProperties (LPIDENT lpiFileset, size_t nAlerts, BOOL fJumpToThreshold)
49 if ((hCurrent = PropCache_Search (pcSET_PROP, lpiFileset)) != 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 szCell[ cchNAME ];
72 lpiFileset->GetCellName (szCell);
74 TCHAR szFileset[ cchNAME ];
75 lpiFileset->GetFilesetName (szFileset);
77 LPTSTR pszTitle = FormatString (IDS_SET_PROP_TITLE, TEXT("%s"), szFileset);
78 LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
79 psh->fMadeCaption = TRUE;
81 if (PropSheet_AddProblemsTab (psh, IDD_SET_PROBLEMS, lpiFileset, nAlerts) &&
82 PropSheet_AddTab (psh, IDS_SET_GENERAL_TAB, IDD_SET_GENERAL, (DLGPROC)Filesets_General_DlgProc, (LPARAM)lpiFileset, TRUE))
85 psh->sh.nStartPage = psh->sh.nPages-1;
86 PropSheet_ShowModeless (psh);
92 BOOL CALLBACK Filesets_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
94 if (AfsAppLib_HandleHelp (IDD_SET_GENERAL, hDlg, msg, wp, lp))
97 if (msg == WM_INITDIALOG)
98 SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
100 LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
104 case WM_INITDIALOG_SHEET:
105 PropCache_Add (pcSET_PROP, (LPIDENT)lp, hDlg);
108 case WM_DESTROY_SHEET:
109 PropCache_Delete (hDlg);
113 Filesets_General_OnInitDialog (hDlg, lpi);
114 StartTask (taskSET_PROP_INIT, hDlg, lpi);
115 NotifyMe (WHEN_OBJECT_CHANGES, lpi, hDlg, 0);
119 DontNotifyMeEver (hDlg);
124 if ((ptp = (LPTASKPACKET)lp) != NULL)
126 if (ptp->idTask == taskSET_PROP_INIT)
127 Filesets_General_OnEndTask_InitDialog (hDlg, ptp, lpi);
128 FreeTaskPacket (ptp);
132 case WM_NOTIFY_FROM_DISPATCH:
133 StartTask (taskSET_PROP_INIT, hDlg, lpi);
134 Delete ((LPNOTIFYSTRUCT)lp);
145 Filesets_General_OnApply (hDlg, lpi);
149 case IDC_SET_WARN_SETFULL:
150 case IDC_SET_WARN_SETFULL_DEF:
151 Filesets_General_OnWarnings (hDlg, lpi);
152 PropSheetChanged (hDlg);
155 case IDC_SET_WARN_SETFULL_PERCENT:
156 PropSheetChanged (hDlg);
160 if (Filesets_SetQuota (lpi))
162 // this new task will block until the setquota req is done
163 StartTask (taskSET_PROP_INIT, hDlg, lpi);
168 StartTask (taskSET_LOCK, NULL, lpi);
172 StartTask (taskSET_UNLOCK, NULL, lpi);
182 void Filesets_General_OnInitDialog (HWND hDlg, LPIDENT lpi)
184 TCHAR szText[ cchRESOURCE ];
185 TCHAR szSvrName[ cchNAME ];
186 TCHAR szAggName[ cchNAME ];
187 TCHAR szSetName[ cchNAME ];
189 lpi->GetServerName (szSvrName);
190 lpi->GetAggregateName (szAggName);
191 lpi->GetFilesetName (szSetName);
192 lpi->GetFilesetID (&vidFileset);
194 GetDlgItemText (hDlg, IDC_SET_NAME, szText, cchRESOURCE);
195 LPTSTR pszText = FormatString (szText, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
196 SetDlgItemText (hDlg, IDC_SET_NAME, pszText);
197 FreeString (pszText);
199 pszText = FormatString (TEXT("%1"), TEXT("%lu"), vidFileset);
200 SetDlgItemText (hDlg, IDC_SET_ID, pszText);
201 FreeString (pszText);
203 EnableWindow (GetDlgItem (hDlg, IDC_SET_LOCK), FALSE);
204 EnableWindow (GetDlgItem (hDlg, IDC_SET_UNLOCK), FALSE);
205 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
206 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), FALSE);
207 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
208 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
209 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
210 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
214 void Filesets_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPIDENT lpi)
218 TCHAR szUnknown[ cchRESOURCE ];
219 GetString (szUnknown, IDS_UNKNOWN);
223 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szUnknown);
224 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szUnknown);
225 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szUnknown);
226 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szUnknown);
227 SetDlgItemText (hDlg, IDC_SET_USAGE, szUnknown);
228 SetDlgItemText (hDlg, IDC_SET_STATUS, szUnknown);
229 SetDlgItemText (hDlg, IDC_SET_FILES, szUnknown);
231 TCHAR szSvrName[ cchNAME ];
232 TCHAR szAggName[ cchNAME ];
233 TCHAR szSetName[ cchNAME ];
234 lpi->GetServerName (szSvrName);
235 lpi->GetAggregateName (szAggName);
236 lpi->GetFilesetName (szSetName);
237 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
241 TCHAR szText[ cchRESOURCE ];
243 EnableWindow (GetDlgItem (hDlg, IDC_SET_LOCK), TRUE);
244 EnableWindow (GetDlgItem (hDlg, IDC_SET_UNLOCK), TRUE);
245 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), TRUE);
246 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), TRUE);
247 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
248 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
249 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), TRUE);
250 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), TRUE);
252 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeCreation))
253 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szUnknown);
255 SetDlgItemText (hDlg, IDC_SET_CREATEDATE, szText);
257 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastUpdate))
258 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szUnknown);
260 SetDlgItemText (hDlg, IDC_SET_UPDATEDATE, szText);
262 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastAccess))
263 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szUnknown);
265 SetDlgItemText (hDlg, IDC_SET_ACCESSDATE, szText);
267 if (!FormatTime (szText, TEXT("%s"), &TASKDATA(ptp)->fs.timeLastBackup))
268 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szUnknown);
270 SetDlgItemText (hDlg, IDC_SET_BACKUPDATE, szText);
272 wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->fs.nFiles);
273 SetDlgItemText (hDlg, IDC_SET_FILES, szText);
275 size_t nAlerts = Alert_GetCount (lpi);
278 GetString (szText, IDS_SETSTATUS_1ALERT);
279 SetDlgItemText (hDlg, IDC_SET_STATUS, szText);
281 else if (nAlerts > 1)
283 pszText = FormatString (IDS_SETSTATUS_2ALERT, TEXT("%lu"), nAlerts);
284 SetDlgItemText (hDlg, IDC_SET_STATUS, pszText);
285 FreeString (pszText);
287 else // (nAlerts == 0)
289 if (TASKDATA(ptp)->fs.State & fsBUSY)
290 GetString (szText, IDS_SETSTATUS_BUSY);
291 else if (TASKDATA(ptp)->fs.State & fsSALVAGE)
292 GetString (szText, IDS_SETSTATUS_SALVAGE);
293 else if (TASKDATA(ptp)->fs.State & fsMOVED)
294 GetString (szText, IDS_SETSTATUS_MOVED);
295 else if (TASKDATA(ptp)->fs.State & fsLOCKED)
296 GetString (szText, IDS_SETSTATUS_LOCKED);
297 else if (TASKDATA(ptp)->fs.State & fsNO_VOL)
298 GetString (szText, IDS_SETSTATUS_NO_VOL);
300 GetString (szText, IDS_STATUS_NOALERTS);
301 SetDlgItemText (hDlg, IDC_SET_STATUS, szText);
304 if (TASKDATA(ptp)->fs.Type == ftREADWRITE)
306 Filesets_DisplayQuota (hDlg, &TASKDATA(ptp)->fs);
310 if (TASKDATA(ptp)->fs.Type == ftREPLICA)
311 GetString (szText, IDS_USAGE_REPLICA);
312 else // (TASKDATA(ptp)->fs.Type == ftCLONE)
313 GetString (szText, IDS_USAGE_CLONE);
315 pszText = FormatString (szText, TEXT("%.1B"), (double)TASKDATA(ptp)->fs.ckUsed * cb1KB);
316 SetDlgItemText (hDlg, IDC_SET_USAGE, pszText);
317 FreeString (pszText);
319 if (GetDlgItem (hDlg, IDC_SET_USAGEBAR))
322 GetRectInParent (GetDlgItem (hDlg, IDC_SET_USAGEBAR), &rUsagebar);
324 HFONT hf = (HFONT)SendMessage (GetDlgItem (hDlg, IDC_SET_USAGEBAR), WM_GETFONT, 0, 0);
325 DestroyWindow (GetDlgItem (hDlg, IDC_SET_USAGEBAR));
327 if (TASKDATA(ptp)->fs.Type == ftREPLICA)
328 GetString (szText, IDS_NO_QUOTA_REPLICA);
329 else // (TASKDATA(ptp)->fs.Type == ftCLONE)
330 GetString (szText, IDS_NO_QUOTA_CLONE);
332 HWND hDesc = CreateWindow (TEXT("static"),
334 WS_CHILD | SS_SIMPLE,
335 rUsagebar.left, rUsagebar.top,
336 cxRECT(rUsagebar), cyRECT(rUsagebar),
341 SendMessage (hDesc, WM_SETFONT, (WPARAM)hf, MAKELPARAM(TRUE,0));
342 ShowWindow (hDesc, SW_SHOW);
345 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
346 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN), FALSE);
347 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
348 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
349 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
350 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
353 if (TASKDATA(ptp)->lpsp->perWarnSetFull == 0)
355 GetString (szText, IDS_SETFULL_WARN_OFF);
356 SetDlgItemText (hDlg, IDC_SET_WARN_SETFULL_DEF, szText);
360 GetString (szText, IDS_SETFULL_WARN_ON);
361 pszText = FormatString (szText, TEXT("%lu"), TASKDATA(ptp)->lpsp->perWarnSetFull);
362 SetDlgItemText (hDlg, IDC_SET_WARN_SETFULL_DEF, pszText);
363 FreeString (pszText);
366 CheckDlgButton (hDlg, IDC_SET_WARN, (TASKDATA(ptp)->lpfp->perWarnSetFull != 0));
367 if (TASKDATA(ptp)->lpfp->perWarnSetFull != 0)
369 if (TASKDATA(ptp)->lpfp->perWarnSetFull != -1)
370 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL, TRUE);
372 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL_DEF, TRUE);
375 CreateSpinner (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT),
376 10, FALSE, // base, signed
378 (TASKDATA(ptp)->lpfp->perWarnSetFull == 0 || TASKDATA(ptp)->lpfp->perWarnSetFull == -1) ? perDEFAULT_SETFULL_WARNING : TASKDATA(ptp)->lpfp->perWarnSetFull,
379 100); // min, default, max
381 Filesets_General_OnWarnings (hDlg, lpi);
386 void Filesets_General_OnApply (HWND hDlg, LPIDENT lpi)
388 LPSET_PROP_APPLY_PARAMS lpp = New (SET_PROP_APPLY_PARAMS);
391 lpp->fIDC_SET_WARN = IsDlgButtonChecked (hDlg, IDC_SET_WARN);
392 lpp->fIDC_SET_WARN_SETFULL_DEF = IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL_DEF);
393 lpp->wIDC_SET_WARN_SETFULL_PERCENT = (WORD)SP_GetPos (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT));
395 StartTask (taskSET_PROP_APPLY, hDlg, lpp);
399 void Filesets_General_OnWarnings (HWND hDlg, LPIDENT lpi)
401 if (IsWindowEnabled (GetDlgItem (hDlg, IDC_SET_WARN)))
403 if (!IsDlgButtonChecked (hDlg, IDC_SET_WARN))
405 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), FALSE);
406 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), FALSE);
407 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
408 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);
410 else if (IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL))
412 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
413 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
414 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), TRUE);
415 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), TRUE);
417 else // (IsDlgButtonChecked (hDlg, IDC_SET_WARN_SETFULL_DEF))
419 CheckDlgButton (hDlg, IDC_SET_WARN_SETFULL_DEF, TRUE);
420 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DEF), TRUE);
421 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL), TRUE);
422 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_PERCENT), FALSE);
423 EnableWindow (GetDlgItem (hDlg, IDC_SET_WARN_SETFULL_DESC), FALSE);