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>
19 #include "set_quota.h"
24 * PROTOTYPES _________________________________________________________________
28 BOOL CALLBACK Filesets_SetQuota_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
30 void Filesets_SetQuota_OnInitDialog (HWND hDlg, LPIDENT lpi);
31 void Filesets_SetQuota_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_SETQUOTA_APPLY_PARAMS lpp);
35 * ROUTINES ___________________________________________________________________
39 BOOL Filesets_SetQuota (LPIDENT lpiFileset, size_t ckQuota)
43 if ((ckQuota = Filesets_PickQuota (lpiFileset)) == 0)
47 LPSET_SETQUOTA_APPLY_PARAMS lpp = New (SET_SETQUOTA_APPLY_PARAMS);
48 lpp->lpiFileset = lpiFileset;
49 lpp->ckQuota = ckQuota;
50 StartTask (taskSET_SETQUOTA_APPLY, NULL, lpp);
55 size_t Filesets_PickQuota (LPIDENT lpiFileset)
57 SET_SETQUOTA_APPLY_PARAMS ssp;
58 memset (&ssp, 0x00, sizeof(ssp));
59 ssp.lpiFileset = lpiFileset;
61 INT_PTR rc = ModalDialogParam (IDD_SET_SETQUOTA, GetActiveWindow(), (DLGPROC)Filesets_SetQuota_DlgProc, (LPARAM)&ssp);
69 BOOL CALLBACK Filesets_SetQuota_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
71 static LPSET_SETQUOTA_APPLY_PARAMS lpp = NULL;
72 if (msg == WM_INITDIALOG)
73 lpp = (LPSET_SETQUOTA_APPLY_PARAMS)lp;
75 if (AfsAppLib_HandleHelp (IDD_SET_SETQUOTA, hDlg, msg, wp, lp))
83 Filesets_SetQuota_OnInitDialog (hDlg, lpp->lpiFileset);
84 StartTask (taskSET_SETQUOTA_INIT, hDlg, lpp->lpiFileset);
89 if ((ptp = (LPTASKPACKET)lp) != NULL)
91 if (ptp->idTask == taskSET_SETQUOTA_INIT)
92 Filesets_SetQuota_OnEndTask_InitDialog (hDlg, ptp, lpp);
102 EndDialog (hDlg, LOWORD(wp));
106 if (HIWORD(wp) == SPN_UPDATE)
108 lpp->ckQuota = SP_GetPos (GetDlgItem (hDlg, IDC_SET_QUOTA));
109 if (gr.cbQuotaUnits == cb1MB)
110 lpp->ckQuota *= ck1MB;
114 case IDC_SET_QUOTA_UNITS:
115 if (HIWORD(wp) == CBN_SELCHANGE)
117 lpp->ckQuota = SP_GetPos (GetDlgItem (hDlg, IDC_SET_QUOTA));
118 if (gr.cbQuotaUnits == cb1MB)
119 lpp->ckQuota *= ck1MB;
121 gr.cbQuotaUnits = (size_t)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS));
122 StartTask (taskSET_SETQUOTA_INIT, hDlg, lpp->lpiFileset);
126 case IDC_AGG_PROPERTIES:
128 nAlerts = Alert_GetCount (lpp->lpiFileset->GetAggregate());
129 Aggregates_ShowProperties (lpp->lpiFileset->GetAggregate(), nAlerts, TRUE, hDlg);
144 void Filesets_SetQuota_OnInitDialog (HWND hDlg, LPIDENT lpi)
146 TCHAR szServer[ cchNAME ];
147 TCHAR szAggregate[ cchNAME ];
148 TCHAR szFileset[ cchNAME ];
149 lpi->GetServerName (szServer);
150 lpi->GetAggregateName (szAggregate);
151 lpi->GetFilesetName (szFileset);
153 TCHAR szText[ cchRESOURCE ];
154 GetDlgItemText (hDlg, IDC_SET_NAME, szText, cchRESOURCE);
155 LPTSTR pszNew = FormatString (szText, TEXT("%s"), szFileset);
156 SetDlgItemText (hDlg, IDC_SET_NAME, pszNew);
159 GetDlgItemText (hDlg, IDC_SET_AGGREGATE, szText, cchRESOURCE);
160 pszNew = FormatString (szText, TEXT("%s%s"), szServer, szAggregate);
161 SetDlgItemText (hDlg, IDC_SET_AGGREGATE, pszNew);
164 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
166 CB_StartChange (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), TRUE);
167 CB_AddItem (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), IDS_QUOTAUNITS_KB, (LPARAM)cb1KB);
168 CB_AddItem (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), IDS_QUOTAUNITS_MB, (LPARAM)cb1MB);
169 CB_EndChange (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), (LPARAM)gr.cbQuotaUnits);
173 void Filesets_SetQuota_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_SETQUOTA_APPLY_PARAMS lpp)
177 TCHAR szSvrName[ cchNAME ];
178 TCHAR szAggName[ cchNAME ];
179 TCHAR szSetName[ cchNAME ];
180 lpp->lpiFileset->GetServerName (szSvrName);
181 lpp->lpiFileset->GetAggregateName (szAggName);
182 lpp->lpiFileset->GetFilesetName (szSetName);
183 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
184 EndDialog (hDlg, IDCANCEL);
188 BOOL fBeenHereBefore = fHasSpinner (GetDlgItem (hDlg, IDC_SET_QUOTA));
190 size_t cMin = TASKDATA(ptp)->ckMin;
191 size_t cMax = TASKDATA(ptp)->ckMax;
192 size_t cNow = (fBeenHereBefore) ? lpp->ckQuota : TASKDATA(ptp)->fs.ckQuota;
194 if (gr.cbQuotaUnits == cb1MB)
201 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), TRUE);
203 if (!fBeenHereBefore)
204 CreateSpinner (GetDlgItem (hDlg, IDC_SET_QUOTA), 10, FALSE, (int)cMin, (int)cNow, (int)cMax);
207 SP_SetRange (GetDlgItem (hDlg, IDC_SET_QUOTA), cMin, cMax);
208 SP_SetPos (GetDlgItem (hDlg, IDC_SET_QUOTA), cNow);
210 Filesets_DisplayQuota (hDlg, &TASKDATA(ptp)->fs);
215 void Filesets_DisplayQuota (HWND hDlg, LPFILESETSTATUS lpfs)
217 double dUsed = 1024.0 * lpfs->ckUsed;
218 double dTotal = 1024.0 * lpfs->ckQuota;
220 if (lpfs->ckQuota != 0)
222 dwPer = (DWORD)( 100.0 * lpfs->ckUsed / lpfs->ckQuota );
223 dwPer = limit( 0, dwPer, 100 );
226 LPTSTR pszUsage = FormatString (IDS_USAGE_FILESET, TEXT("%.1B%.1B%lu"), dUsed, dTotal, dwPer);
227 SetDlgItemText (hDlg, IDC_SET_USAGE, pszUsage);
228 FreeString (pszUsage);
230 SendDlgItemMessage (hDlg, IDC_SET_USAGEBAR, PBM_SETRANGE, 0, MAKELPARAM(0,100));
231 SendDlgItemMessage (hDlg, IDC_SET_USAGEBAR, PBM_SETPOS, (WPARAM)dwPer, 0);