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 "afs_shl_ext.h"
17 #include "volume_info.h"
18 #include "partition_info_dlg.h"
19 #include "volume_inf.h"
27 static char THIS_FILE[] = __FILE__;
30 /////////////////////////////////////////////////////////////////////////////
34 CVolumeInfo::CVolumeInfo(CWnd* pParent /*=NULL*/)
37 InitModalIndirect (TaLocale_GetDialogResource (CVolumeInfo::IDD), pParent);
39 //{{AFX_DATA_INIT(CVolumeInfo)
47 CVolumeInfo::~CVolumeInfo()
53 void CVolumeInfo::DoDataExchange(CDataExchange* pDX)
55 CDialog::DoDataExchange(pDX);
56 //{{AFX_DATA_MAP(CVolumeInfo)
57 DDX_Control(pDX, IDC_QUOTA_SPIN, m_QuotaSpin);
58 DDX_Control(pDX, IDOK, m_Ok);
59 DDX_Control(pDX, IDC_PARTITION_INFO, m_ShowPartInfo);
60 DDX_Control(pDX, IDC_LIST, m_List);
61 DDX_Text(pDX, IDC_NEW_QUOTA, m_nNewQuota);
65 BEGIN_MESSAGE_MAP(CVolumeInfo, CDialog)
66 //{{AFX_MSG_MAP(CVolumeInfo)
67 ON_LBN_SELCHANGE(IDC_LIST, OnSelChangeList)
68 ON_BN_CLICKED(IDC_PARTITION_INFO, OnPartitionInfo)
69 ON_EN_CHANGE(IDC_NEW_QUOTA, OnChangeNewQuota)
70 ON_NOTIFY(UDN_DELTAPOS, IDC_QUOTA_SPIN, OnDeltaPosQuotaSpin)
71 ON_BN_CLICKED(IDHELP, OnHelp)
75 /////////////////////////////////////////////////////////////////////////////
76 // CVolumeInfo message handlers
78 BOOL CVolumeInfo::OnInitDialog()
80 ASSERT(m_Files.GetSize() > 0);
82 CDialog::OnInitDialog();
84 int tabs[] = { 79, 164, 214, 260, 301 };
86 m_List.SetTabStops(sizeof(tabs) / sizeof(int), tabs);
88 m_pVolInfo = new CVolInfo[m_Files.GetSize()];
90 for (int i = 0; i < m_Files.GetSize(); i++) {
91 GetVolumeInfo(m_Files[i], m_pVolInfo[i]);
92 // Check if this is a duplicate entry (same volume as earlier entry)
93 for (int j = 0; j < i; j++) {
94 if (m_pVolInfo[j].m_nID == m_pVolInfo[i].m_nID)
95 m_pVolInfo[i].m_nDup = j;
102 m_QuotaSpin.SetRange(UD_MINVAL, UD_MAXVAL);
103 m_QuotaSpin.SetPos(0);
105 return TRUE; // return TRUE unless you set the focus to a control
106 // EXCEPTION: OCX Property Pages should return FALSE
109 int CVolumeInfo::GetCurVolInfoIndex()
111 int nListIndex = m_List.GetCurSel();
112 ASSERT(nListIndex >= 0);
114 int nIndex = m_List.GetItemData(nListIndex);
117 if (m_pVolInfo[nIndex].m_nDup != -1)
118 return m_pVolInfo[nIndex].m_nDup;
123 void CVolumeInfo::OnSelChangeList()
125 m_nCurIndex = GetCurVolInfoIndex();
129 m_nNewQuota = m_pVolInfo[m_nCurIndex].m_nNewQuota;
131 m_ShowPartInfo.EnableWindow(TRUE);
132 CWnd *pNewQuota = GetDlgItem(IDC_NEW_QUOTA);
133 pNewQuota->EnableWindow(TRUE);
135 m_QuotaSpin.EnableWindow(TRUE);
136 m_QuotaSpin.SetPos(0);
141 void CVolumeInfo::OnPartitionInfo()
143 CPartitionInfoDlg dlg;
145 ASSERT(m_nCurIndex >= 0);
147 dlg.SetValues(m_pVolInfo[m_nCurIndex].m_nPartSize, m_pVolInfo[m_nCurIndex].m_nPartFree);
152 void CVolumeInfo::SetFiles(const CStringArray& files)
159 void CVolumeInfo::OnChangeNewQuota()
161 if (m_List.m_hWnd == 0)
165 GetDlgItem(IDC_NEW_QUOTA)->GetWindowText(strQuota);
167 if (strQuota.IsEmpty())
170 if (!UpdateData(TRUE))
173 ASSERT(m_nCurIndex >= 0);
175 m_pVolInfo[m_nCurIndex].m_nNewQuota = m_nNewQuota;
177 if (m_pVolInfo[m_nCurIndex].m_nNewQuota != m_pVolInfo[m_nCurIndex].m_nQuota)
178 m_Ok.EnableWindow(TRUE);
183 void CVolumeInfo::OnOK()
185 for (int i = 0; i < m_Files.GetSize(); i++) {
186 if ((m_pVolInfo[i].m_nDup == -1) && (m_pVolInfo[i].m_nQuota != m_pVolInfo[i].m_nNewQuota)) {
188 // strQuota.Format("= %ld", m_pVolInfo[i].m_nNewQuota);
189 // AfxMessageBox("Setting quota for volume: " + m_pVolInfo[i].m_strName + strQuota);
190 SetVolInfo(m_pVolInfo[i]);
197 void CVolumeInfo::OnDeltaPosQuotaSpin(NMHDR* pNMHDR, LRESULT* pResult)
199 NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
201 LONG nNewQuota = m_nNewQuota + pNMUpDown->iDelta * 1024;
205 m_nNewQuota = nNewQuota;
214 void CVolumeInfo::ShowInfo()
216 m_List.ResetContent();
218 for (int i = 0; i < m_Files.GetSize(); i++) {
221 if (m_pVolInfo[i].m_strErrorMsg.GetLength() > 0)
222 strEntry = m_pVolInfo[i].m_strFileName + "\t(Error: " + m_pVolInfo[i].m_strErrorMsg + ")";
226 if (m_pVolInfo[i].m_nDup == -1)
227 nQuota = m_pVolInfo[i].m_nNewQuota;
229 nQuota = m_pVolInfo[m_pVolInfo[i].m_nDup].m_nNewQuota;
232 LONG nPercentUsed = (m_pVolInfo[i].m_nUsed * 100) / nQuota;
233 strEntry.Format("%s\t%s\t%ld\t%ldK\t%ldK\t%ld%%", m_pVolInfo[i].m_strFileName, m_pVolInfo[i].m_strName,
234 m_pVolInfo[i].m_nID, nQuota, m_pVolInfo[i].m_nUsed, nPercentUsed);
236 strEntry.Format("%s\t%s\t%ld\tUnlimited\t%ldK", m_pVolInfo[i].m_strFileName, m_pVolInfo[i].m_strName,
237 m_pVolInfo[i].m_nID, m_pVolInfo[i].m_nUsed);
241 int nListIndex = m_List.AddString(strEntry);
242 ASSERT(nListIndex >= 0);
243 VERIFY(m_List.SetItemData(nListIndex, i) != LB_ERR);
247 void CVolumeInfo::OnHelp()
249 ShowHelp(m_hWnd, VOLUME_INFO_HELP_ID);