windows-build-updates-20030314
[openafs.git] / src / WINNT / afssvrmgr / agg_col.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_col.h"
17
18
19 /*
20  * AGGREGATE-VIEW COLUMNS _____________________________________________________
21  *
22  */
23
24 void Aggregates_SetDefaultView (LPVIEWINFO lpvi)
25 {
26    lpvi->lvsView = FLS_VIEW_LIST;
27    lpvi->nColsAvail = nAGGREGATECOLUMNS;
28
29    for (size_t iCol = 0; iCol < nAGGREGATECOLUMNS; ++iCol)
30       {
31       lpvi->cxColumns[ iCol ]  = AGGREGATECOLUMNS[ iCol ].cxWidth;
32       lpvi->idsColumns[ iCol ] = AGGREGATECOLUMNS[ iCol ].idsColumn;
33       }
34
35    lpvi->iSort = aggcolNAME;
36
37    lpvi->nColsShown = 7;
38    lpvi->aColumns[0] = (int)aggcolNAME;
39    lpvi->aColumns[1] = (int)aggcolID;
40    lpvi->aColumns[2] = (int)aggcolDEVICE;
41    lpvi->aColumns[3] = (int)aggcolUSED;
42    lpvi->aColumns[4] = (int)aggcolTOTAL;
43    lpvi->aColumns[5] = (int)aggcolUSED_PER;
44    lpvi->aColumns[6] = (int)aggcolSTATUS;
45 }
46
47
48 size_t Aggregates_GetAlertCount (LPAGGREGATE lpAggregate)
49 {
50    return Alert_GetCount (lpAggregate->GetIdentifier());
51 }
52
53
54 LPTSTR Aggregates_GetColumnText (LPIDENT lpi, AGGREGATECOLUMN aggcol, BOOL fShowServerName)
55 {
56    static TCHAR aszBuffer[ nAGGREGATECOLUMNS ][ cchRESOURCE ];
57    static size_t iBufferNext = 0;
58    LPTSTR pszBuffer = aszBuffer[ iBufferNext++ ];
59    if (iBufferNext == nAGGREGATECOLUMNS)
60       iBufferNext = 0;
61    pszBuffer[0] = TEXT('\0');
62
63    LPAGGREGATE_PREF lpap;
64    LPAGGREGATESTATUS lpas = NULL;
65    LPTSTR pszDevice = NULL;
66    if ((lpap = (LPAGGREGATE_PREF)lpi->GetUserParam()) != NULL)
67       {
68       lpas = &lpap->asLast;
69       pszDevice = lpap->szDevice;
70       }
71
72    switch (aggcol)
73       {
74       case aggcolNAME:
75          if (!fShowServerName)
76             lpi->GetAggregateName (pszBuffer);
77          else
78             {
79             TCHAR szNameSvr[ cchNAME ];
80             TCHAR szNameAgg[ cchNAME ];
81             lpi->GetServerName (szNameSvr);
82             lpi->GetAggregateName (szNameAgg);
83             LPTSTR pszName = FormatString (IDS_SERVER_AGGREGATE, TEXT("%s%s"), szNameSvr, szNameAgg);
84             lstrcpy (pszBuffer, pszName);
85             FreeString (pszName);
86             }
87          break;
88
89       case aggcolID:
90          if (lpas)
91             wsprintf (pszBuffer, TEXT("%lu"), lpas->dwID);
92          break;
93
94       case aggcolDEVICE:
95          if (pszDevice)
96             lstrcpy (pszBuffer, pszDevice);
97          break;
98
99       case aggcolUSED:
100          if (lpas)
101             {
102             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * (lpas->ckStorageTotal - lpas->ckStorageFree));
103             lstrcpy (pszBuffer, psz);
104             FreeString (psz);
105             }
106          break;
107
108       case aggcolUSED_PER:
109          if (lpas)
110             {
111             DWORD dwPer = 100;
112             if (lpas->ckStorageTotal != 0)
113                dwPer = (DWORD)( 100.0 * (lpas->ckStorageTotal - lpas->ckStorageFree) / lpas->ckStorageTotal );
114
115             dwPer = limit( 0, dwPer, 100 );
116
117             LPTSTR psz = FormatString (IDS_PERCENTAGE, TEXT("%lu"), dwPer);
118             lstrcpy (pszBuffer, psz);
119             FreeString (psz);
120             }
121          break;
122
123       case aggcolALLOCATED:
124          if (lpas)
125             {
126             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * lpas->ckStorageAllocated);
127             lstrcpy (pszBuffer, psz);
128             FreeString (psz);
129             }
130          break;
131
132       case aggcolFREE:
133          if (lpas)
134             {
135             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * lpas->ckStorageFree);
136             lstrcpy (pszBuffer, psz);
137             FreeString (psz);
138             }
139          break;
140
141       case aggcolTOTAL:
142          if (lpas)
143             {
144             LPTSTR psz = FormatString (TEXT("%1"), TEXT("%.1B"), 1024.0 * lpas->ckStorageTotal);
145             lstrcpy (pszBuffer, psz);
146             FreeString (psz);
147             }
148          break;
149
150       case aggcolSTATUS:
151          LPTSTR pszDesc;
152          if ((pszDesc = Alert_GetQuickDescription (lpi)) == NULL)
153             GetString (pszBuffer, IDS_STATUS_NOALERTS);
154          else
155             {
156             lstrcpy (pszBuffer, pszDesc);
157             FreeString (pszDesc);
158             }
159          break;
160       }
161
162    return pszBuffer;
163 }
164