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>
16 #include "set_quota.h"
21 * PROTOTYPES _________________________________________________________________
25 BOOL CALLBACK Filesets_SetQuota_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
27 void Filesets_SetQuota_OnInitDialog (HWND hDlg, LPIDENT lpi);
28 void Filesets_SetQuota_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_SETQUOTA_APPLY_PARAMS lpp);
32 * ROUTINES ___________________________________________________________________
36 BOOL Filesets_SetQuota (LPIDENT lpiFileset, size_t ckQuota)
40 if ((ckQuota = Filesets_PickQuota (lpiFileset)) == 0)
44 LPSET_SETQUOTA_APPLY_PARAMS lpp = New (SET_SETQUOTA_APPLY_PARAMS);
45 lpp->lpiFileset = lpiFileset;
46 lpp->ckQuota = ckQuota;
47 StartTask (taskSET_SETQUOTA_APPLY, NULL, lpp);
52 size_t Filesets_PickQuota (LPIDENT lpiFileset)
54 SET_SETQUOTA_APPLY_PARAMS ssp;
55 memset (&ssp, 0x00, sizeof(ssp));
56 ssp.lpiFileset = lpiFileset;
58 int rc = ModalDialogParam (IDD_SET_SETQUOTA, GetActiveWindow(), (DLGPROC)Filesets_SetQuota_DlgProc, (LPARAM)&ssp);
66 BOOL CALLBACK Filesets_SetQuota_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
68 static LPSET_SETQUOTA_APPLY_PARAMS lpp = NULL;
69 if (msg == WM_INITDIALOG)
70 lpp = (LPSET_SETQUOTA_APPLY_PARAMS)lp;
72 if (AfsAppLib_HandleHelp (IDD_SET_SETQUOTA, hDlg, msg, wp, lp))
80 Filesets_SetQuota_OnInitDialog (hDlg, lpp->lpiFileset);
81 StartTask (taskSET_SETQUOTA_INIT, hDlg, lpp->lpiFileset);
86 if ((ptp = (LPTASKPACKET)lp) != NULL)
88 if (ptp->idTask == taskSET_SETQUOTA_INIT)
89 Filesets_SetQuota_OnEndTask_InitDialog (hDlg, ptp, lpp);
99 EndDialog (hDlg, LOWORD(wp));
103 if (HIWORD(wp) == SPN_UPDATE)
105 lpp->ckQuota = SP_GetPos (GetDlgItem (hDlg, IDC_SET_QUOTA));
106 if (gr.cbQuotaUnits == cb1MB)
107 lpp->ckQuota *= ck1MB;
111 case IDC_SET_QUOTA_UNITS:
112 if (HIWORD(wp) == CBN_SELCHANGE)
114 lpp->ckQuota = SP_GetPos (GetDlgItem (hDlg, IDC_SET_QUOTA));
115 if (gr.cbQuotaUnits == cb1MB)
116 lpp->ckQuota *= ck1MB;
118 gr.cbQuotaUnits = (size_t)CB_GetSelectedData (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS));
119 StartTask (taskSET_SETQUOTA_INIT, hDlg, lpp->lpiFileset);
123 case IDC_AGG_PROPERTIES:
125 nAlerts = Alert_GetCount (lpp->lpiFileset->GetAggregate());
126 Aggregates_ShowProperties (lpp->lpiFileset->GetAggregate(), nAlerts, TRUE, hDlg);
141 void Filesets_SetQuota_OnInitDialog (HWND hDlg, LPIDENT lpi)
143 TCHAR szServer[ cchNAME ];
144 TCHAR szAggregate[ cchNAME ];
145 TCHAR szFileset[ cchNAME ];
146 lpi->GetServerName (szServer);
147 lpi->GetAggregateName (szAggregate);
148 lpi->GetFilesetName (szFileset);
150 TCHAR szText[ cchRESOURCE ];
151 GetDlgItemText (hDlg, IDC_SET_NAME, szText, cchRESOURCE);
152 LPTSTR pszNew = FormatString (szText, TEXT("%s"), szFileset);
153 SetDlgItemText (hDlg, IDC_SET_NAME, pszNew);
156 GetDlgItemText (hDlg, IDC_SET_AGGREGATE, szText, cchRESOURCE);
157 pszNew = FormatString (szText, TEXT("%s%s"), szServer, szAggregate);
158 SetDlgItemText (hDlg, IDC_SET_AGGREGATE, pszNew);
161 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), FALSE);
163 CB_StartChange (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), TRUE);
164 CB_AddItem (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), IDS_QUOTAUNITS_KB, (LPARAM)cb1KB);
165 CB_AddItem (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), IDS_QUOTAUNITS_MB, (LPARAM)cb1MB);
166 CB_EndChange (GetDlgItem (hDlg, IDC_SET_QUOTA_UNITS), (LPARAM)gr.cbQuotaUnits);
170 void Filesets_SetQuota_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp, LPSET_SETQUOTA_APPLY_PARAMS lpp)
174 TCHAR szSvrName[ cchNAME ];
175 TCHAR szAggName[ cchNAME ];
176 TCHAR szSetName[ cchNAME ];
177 lpp->lpiFileset->GetServerName (szSvrName);
178 lpp->lpiFileset->GetAggregateName (szAggName);
179 lpp->lpiFileset->GetFilesetName (szSetName);
180 ErrorDialog (ptp->status, IDS_ERROR_REFRESH_FILESET_STATUS, TEXT("%s%s%s"), szSvrName, szAggName, szSetName);
181 EndDialog (hDlg, IDCANCEL);
185 BOOL fBeenHereBefore = fHasSpinner (GetDlgItem (hDlg, IDC_SET_QUOTA));
187 size_t cMin = TASKDATA(ptp)->ckMin;
188 size_t cMax = TASKDATA(ptp)->ckMax;
189 size_t cNow = (fBeenHereBefore) ? lpp->ckQuota : TASKDATA(ptp)->fs.ckQuota;
191 if (gr.cbQuotaUnits == cb1MB)
198 EnableWindow (GetDlgItem (hDlg, IDC_SET_QUOTA), TRUE);
200 if (!fBeenHereBefore)
201 CreateSpinner (GetDlgItem (hDlg, IDC_SET_QUOTA), 10, FALSE, cMin, cNow, cMax);
204 SP_SetRange (GetDlgItem (hDlg, IDC_SET_QUOTA), cMin, cMax);
205 SP_SetPos (GetDlgItem (hDlg, IDC_SET_QUOTA), cNow);
207 Filesets_DisplayQuota (hDlg, &TASKDATA(ptp)->fs);
212 void Filesets_DisplayQuota (HWND hDlg, LPFILESETSTATUS lpfs)
214 double dUsed = 1024.0 * lpfs->ckUsed;
215 double dTotal = 1024.0 * lpfs->ckQuota;
217 if (lpfs->ckQuota != 0)
219 dwPer = (DWORD)( 100.0 * lpfs->ckUsed / lpfs->ckQuota );
220 dwPer = limit( 0, dwPer, 100 );
223 LPTSTR pszUsage = FormatString (IDS_USAGE_FILESET, TEXT("%.1B%.1B%lu"), dUsed, dTotal, dwPer);
224 SetDlgItemText (hDlg, IDC_SET_USAGE, pszUsage);
225 FreeString (pszUsage);
227 SendDlgItemMessage (hDlg, IDC_SET_USAGEBAR, PBM_SETRANGE, 0, MAKELPARAM(0,100));
228 SendDlgItemMessage (hDlg, IDC_SET_USAGEBAR, PBM_SETPOS, (WPARAM)dwPer, 0);