windows-64-bit-type-safety-20051105
[openafs.git] / src / WINNT / afssvrmgr / agg_prop.cpp
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 extern "C" {
11 #include <afs/param.h>
12 #include <afs/stds.h>
13 }
14
15 #include "svrmgr.h"
16 #include "agg_prop.h"
17 #include "agg_general.h"
18 #include "svr_general.h"
19 #include "propcache.h"
20 #include "problems.h"
21
22
23 /*
24  * PROTOTYPES _________________________________________________________________
25  *
26  */
27
28 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp);
29
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);
35
36
37 /*
38  * ROUTINES ___________________________________________________________________
39  *
40  */
41
42 void Aggregates_ShowProperties (LPIDENT lpiAggregate, size_t nAlerts, BOOL fJumpToThreshold, HWND hParentModal)
43 {
44    HWND hCurrent;
45
46    if ((hCurrent = PropCache_Search (pcAGG_PROP, lpiAggregate)) != NULL)
47       {
48       SetFocus (hCurrent);
49
50       if (fJumpToThreshold)
51          {
52          HWND hTab;
53          if ((hTab = GetDlgItem (hCurrent, IDC_PROPSHEET_TABCTRL)) != NULL)
54             {
55             int nTabs = TabCtrl_GetItemCount (hTab);
56             TabCtrl_SetCurSel (hTab, nTabs-1);
57
58             NMHDR nm;
59             nm.hwndFrom = hTab;
60             nm.idFrom = IDC_PROPSHEET_TABCTRL;
61             nm.code = TCN_SELCHANGE;
62             SendMessage (hCurrent, WM_NOTIFY, 0, (LPARAM)&nm);
63             }
64          }
65       }
66    else
67       {
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);
73
74       LPPROPSHEET psh = PropSheet_Create (pszTitle, FALSE);
75       psh->fMadeCaption = TRUE;
76       psh->sh.hwndParent = hParentModal;
77
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))
80          {
81          if (fJumpToThreshold)
82             psh->sh.nStartPage = psh->sh.nPages-1;
83
84          if (hParentModal)
85             PropSheet_ShowModal (psh, PumpMessage);
86          else
87             PropSheet_ShowModeless (psh);
88          }
89       }
90 }
91
92
93 BOOL CALLBACK Aggregates_General_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
94 {
95    if (AfsAppLib_HandleHelp (IDD_AGG_GENERAL, hDlg, msg, wp, lp))
96       return TRUE;
97
98    if (msg == WM_INITDIALOG)
99       SetWindowLongPtr (hDlg, DWLP_USER, ((LPPROPSHEETPAGE)lp)->lParam);
100
101    LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
102
103    switch (msg)
104       {
105       case WM_INITDIALOG_SHEET:
106          PropCache_Add (pcAGG_PROP, (LPIDENT)lp, hDlg);
107          break;
108
109       case WM_DESTROY_SHEET:
110          PropCache_Delete (hDlg);
111          break;
112
113       case WM_INITDIALOG:
114          Aggregates_General_OnInitDialog (hDlg);
115          StartTask (taskAGG_PROP_INIT, hDlg, lpi);
116          break;
117
118       case WM_ENDTASK:
119          LPTASKPACKET ptp;
120          if ((ptp = (LPTASKPACKET)lp) != NULL)
121             {
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);
127             }
128          break;
129
130       case WM_COMMAND:
131          switch (LOWORD(wp))
132             {
133             case IDOK:
134             case IDCANCEL:
135                break;
136
137             case IDAPPLY:
138                Aggregates_General_OnApply (hDlg);
139                break;
140
141             case IDC_AGG_WARNALLOC:
142                PropSheetChanged (hDlg);
143                break;
144
145             case IDC_AGG_WARN:
146             case IDC_AGG_WARN_AGGFULL:
147             case IDC_AGG_WARN_AGGFULL_DEF:
148                Aggregates_General_OnWarnings (hDlg);
149                PropSheetChanged (hDlg);
150                break;
151
152             case IDC_AGG_WARN_AGGFULL_PERCENT:
153                PropSheetChanged (hDlg);
154                break;
155             }
156          break;
157       }
158
159    return FALSE;
160 }
161
162
163 void Aggregates_General_OnInitDialog (HWND hDlg)
164 {
165    LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
166
167    TCHAR szSvrName[ cchNAME ];
168    TCHAR szAggName[ cchNAME ];
169    lpi->GetServerName (szSvrName);
170    lpi->GetAggregateName (szAggName);
171
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);
177
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);
183 }
184
185
186 void Aggregates_General_OnApply (HWND hDlg)
187 {
188    LPAGG_PROP_APPLY_PACKET lpp;
189    if ((lpp = New (AGG_PROP_APPLY_PACKET)) != NULL)
190       {
191       lpp->lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_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));
196
197       StartTask (taskAGG_PROP_APPLY, hDlg, lpp);
198       }
199 }
200
201
202 void Aggregates_General_OnWarnings (HWND hDlg)
203 {
204    if (!IsDlgButtonChecked (hDlg, IDC_AGG_WARN))
205       {
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);
210       }
211    else if (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL))
212       {
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);
217       }
218    else // (IsDlgButtonChecked (hDlg, IDC_AGG_WARN_AGGFULL_DEF))
219       {
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);
225       }
226 }
227
228
229 void Aggregates_General_OnEndTask_InitDialog (HWND hDlg, LPTASKPACKET ptp)
230 {
231    LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
232
233    if (!ptp->rc)
234       {
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);
241
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);
247       }
248    else
249       {
250       TCHAR szText[ cchRESOURCE ];
251       wsprintf (szText, TEXT("%lu"), TASKDATA(ptp)->as.dwID);
252       SetDlgItemText (hDlg, IDC_AGG_ID, szText);
253
254       SetDlgItemText (hDlg, IDC_AGG_DEVICE, TASKDATA(ptp)->pszText1);
255
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);
259
260       double dUsed  = 1024.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree);
261       double dTotal = 1024.0 * TASKDATA(ptp)->as.ckStorageTotal;
262       DWORD dwPer   = 100;
263       if (TASKDATA(ptp)->as.ckStorageTotal != 0)
264          {
265          dwPer = (DWORD)( 100.0 * (TASKDATA(ptp)->as.ckStorageTotal - TASKDATA(ptp)->as.ckStorageFree) / TASKDATA(ptp)->as.ckStorageTotal );
266          dwPer = limit( 0, dwPer, 100 );
267          }
268
269       LPTSTR pszUsage = FormatString (IDS_USAGE_AGGREGATE, TEXT("%.1B%.1B%lu"), dUsed, dTotal, dwPer);
270       SetDlgItemText (hDlg, IDC_AGG_USAGE, pszUsage);
271       FreeString (pszUsage);
272
273       SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETRANGE, 0, MAKELPARAM(0,100));
274       SendDlgItemMessage (hDlg, IDC_AGG_USAGEBAR, PBM_SETPOS, (WPARAM)dwPer, 0);
275
276       if (TASKDATA(ptp)->lpsp->fWarnAggAlloc)
277          {
278          EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARNALLOC), TRUE);
279          CheckDlgButton (hDlg, IDC_AGG_WARNALLOC, TASKDATA(ptp)->lpap->fWarnAggAlloc);
280          }
281
282       EnableWindow (GetDlgItem (hDlg, IDC_AGG_WARN), TRUE);
283
284       if (TASKDATA(ptp)->lpsp->perWarnAggFull == 0)
285          {
286          GetString (szText, IDS_AGGFULL_WARN_OFF);
287          SetDlgItemText (hDlg, IDC_AGG_WARN_AGGFULL_DEF, szText);
288          }
289       else
290          {
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);
294          }
295
296       CheckDlgButton (hDlg, IDC_AGG_WARN, (TASKDATA(ptp)->lpap->perWarnAggFull != 0));
297       if (TASKDATA(ptp)->lpap->perWarnAggFull != 0)
298          {
299          if (TASKDATA(ptp)->lpap->perWarnAggFull != -1)
300             CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL, TRUE);
301          else
302             CheckDlgButton (hDlg, IDC_AGG_WARN_AGGFULL_DEF, TRUE);
303          }
304
305       CreateSpinner (GetDlgItem (hDlg, IDC_AGG_WARN_AGGFULL_PERCENT),
306                      10, FALSE,   // base, signed
307                      1,
308                      (TASKDATA(ptp)->lpap->perWarnAggFull == 0 || TASKDATA(ptp)->lpap->perWarnAggFull == -1) ? perDEFAULT_AGGFULL_WARNING : TASKDATA(ptp)->lpap->perWarnAggFull,
309                      100); // min, default, max
310
311       Aggregates_General_OnWarnings (hDlg);
312       }
313 }
314
315
316 void Aggregates_General_OnEndTask_Apply (HWND hDlg, LPTASKPACKET ptp)
317 {
318    if (!ptp->rc)
319       {
320       LPIDENT lpi = (LPIDENT)GetWindowLongPtr (hDlg, DWLP_USER);
321
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);
327       }
328 }
329