windows-nt/Source/XPSP1/NT/net/mmc/acssnap/pglimit.cpp
2020-09-26 16:20:57 +08:00

288 lines
7 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: pglimit.cpp
//
//--------------------------------------------------------------------------
// pglimit.cpp : implementation file
//
#include "stdafx.h"
#include "acsadmin.h"
#include "acsdata.h"
#include "pggen.h"
#include "pglimit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPgSubLimit property page
IMPLEMENT_DYNCREATE(CPgSubLimit, CACSDialog)
CPgSubLimit::CPgSubLimit(CServiceLevelLimitsRecord* pRecord, int *pAvailTypes, CWnd* pParent) : CACSDialog(CPgSubLimit::IDD, pParent)
{
ASSERT(pRecord != NULL && pAvailTypes != NULL);
m_pAvailTypes = pAvailTypes;
m_pLimitsRecord = pRecord;
DataInit();
}
void CPgSubLimit::DataInit()
{
//{{AFX_DATA_INIT(CPgSubLimit)
// unlimit is the default choice
m_nDataRateChoice = 0;
m_nPeakRateChoice = 0;
m_nTTDataRateChoice = 0;
m_nTTPeakDataRateChoice = 0;
m_uDataRate = 0;
m_uPeakRate = 0;
m_uTTDataRate = 0;
m_uTTPeakRate = 0;
m_bFlowDataChanged = FALSE;
m_nServiceType = -1;
//}}AFX_DATA_INIT
}
CPgSubLimit::CPgSubLimit() : CACSDialog(CPgSubLimit::IDD, NULL)
{
DataInit();
}
CPgSubLimit::~CPgSubLimit()
{
}
void CPgSubLimit::DoDataExchange(CDataExchange* pDX)
{
CACSDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPgSubLimit)
DDX_Control(pDX, IDC_COMBO_SUBNET_LIMIT_TYPES, m_comboTypes);
DDX_Control(pDX, IDC_EDIT_GEN_TT_PEAKRATE, m_editTTPeakRate);
DDX_Control(pDX, IDC_EDIT_GEN_TT_DATARATE, m_editTTDataRate);
DDX_Control(pDX, IDC_EDIT_GEN_PF_PEAKRATE, m_editPeakRate);
DDX_Control(pDX, IDC_EDIT_GEN_PF_DATARATE, m_editDataRate);
DDX_Radio(pDX, IDC_SUBNET_TRAFFIC_DATARATE_UNLIMITED, m_nDataRateChoice);
DDX_Radio(pDX, IDC_SUBNET_TRAFFIC_PEAKRATE_UNLIMITED, m_nPeakRateChoice);
DDX_Radio(pDX, IDC_SUBNET_TRAFFIC_TTDATARATE_UNLIMITED, m_nTTDataRateChoice);
DDX_Radio(pDX, IDC_SUBNET_TRAFFIC_TTPEAKRATE_UNLIMITED, m_nTTPeakDataRateChoice);
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_EDIT_GEN_PF_DATARATE, m_uDataRate);
if(m_nDataRateChoice == 1)
DDV_MinMaxUInt(pDX, m_uDataRate, 0, 4194300);
DDX_Text(pDX, IDC_EDIT_GEN_PF_PEAKRATE, m_uPeakRate);
if(m_nPeakRateChoice == 1)
DDV_MinMaxUInt(pDX, m_uPeakRate, 0, 4194300);
DDX_Text(pDX, IDC_EDIT_GEN_TT_DATARATE, m_uTTDataRate);
if(m_nTTDataRateChoice == 1)
DDV_MinMaxUInt(pDX, m_uTTDataRate, 0, 4194300);
DDX_Text(pDX, IDC_EDIT_GEN_TT_PEAKRATE, m_uTTPeakRate);
if(m_nTTPeakDataRateChoice == 1)
DDV_MinMaxUInt(pDX, m_uTTPeakRate, 0, 4194300);
}
BEGIN_MESSAGE_MAP(CPgSubLimit, CACSDialog)
//{{AFX_MSG_MAP(CPgSubLimit)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_DATARATE_LIMITED, OnSubnetTrafficDatarateLimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_DATARATE_UNLIMITED, OnSubnetTrafficDatarateUnlimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_PEAKRATE_LIMITED, OnSubnetTrafficPeakrateLimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_PEAKRATE_UNLIMITED, OnSubnetTrafficPeakrateUnlimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_TTDATARATE_LIMITED, OnSubnetTrafficTtdatarateLimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_TTDATARATE_UNLIMITED, OnSubnetTrafficTtdatarateUnlimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_TTPEAKRATE_LIMITED, OnSubnetTrafficTtpeakrateLimited)
ON_BN_CLICKED(IDC_SUBNET_TRAFFIC_TTPEAKRATE_UNLIMITED, OnSubnetTrafficTtpeakrateUnlimited)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPgSubLimit message handlers
BOOL CPgSubLimit::OnInitDialog()
{
CACSDialog::OnInitDialog();
// populate the strings in combo box
int* pTypes = m_pAvailTypes;
CString str;
UINT strId = 0;
if(!pTypes) return FALSE;
while (*pTypes != -1)
{
switch(*pTypes)
{
case ACS_SUBNET_LIMITS_SERVICETYPE_AGGREGATE:
strId = IDS_AGGREGATEPOLICY;
break;
case ACS_SUBNET_LIMITS_SERVICETYPE_GUARANTEEDSERVICE:
strId = IDS_GUARANTEEDSERVICE;
break;
case ACS_SUBNET_LIMITS_SERVICETYPE_CONTROLLEDLOAD:
strId = IDS_CONTROLLEDLOAD;
break;
}
str.LoadString(strId);
int index = m_comboTypes.AddString(str);
if(index != -1)
m_comboTypes.SetItemData(index, *pTypes);
pTypes++;
}
m_comboTypes.SetCurSel(0);
EnableEverything();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPgSubLimit::OnSubnetTrafficDatarateLimited()
{
m_editDataRate.EnableWindow(TRUE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficDatarateUnlimited()
{
m_editDataRate.EnableWindow(FALSE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficPeakrateLimited()
{
m_editPeakRate.EnableWindow(TRUE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficPeakrateUnlimited()
{
m_editPeakRate.EnableWindow(FALSE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficTtdatarateLimited()
{
m_editTTDataRate.EnableWindow(TRUE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficTtdatarateUnlimited()
{
m_editTTDataRate.EnableWindow(FALSE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficTtpeakrateLimited()
{
m_editTTPeakRate.EnableWindow(TRUE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::OnSubnetTrafficTtpeakrateUnlimited()
{
m_editTTPeakRate.EnableWindow(FALSE);
m_bFlowDataChanged = TRUE;
}
void CPgSubLimit::EnableEverything()
{
UpdateData();
m_editDataRate.EnableWindow(m_nDataRateChoice);
m_editPeakRate.EnableWindow(m_nPeakRateChoice);
m_editTTDataRate.EnableWindow(m_nTTDataRateChoice);
m_editTTPeakRate.EnableWindow(m_nTTPeakDataRateChoice);
if(m_nServiceType != -1) // being edited
m_comboTypes.EnableWindow(FALSE);
}
void CPgSubLimit::OnOK()
{
// TODO: Add extra validation here
UINT cId = 0;
UINT mId = 0;
if(m_nDataRateChoice && m_nPeakRateChoice && m_uDataRate > m_uPeakRate)
{
cId = IDC_EDIT_GEN_PF_PEAKRATE;
mId = IDS_ERR_PEAKRATE_LESS_RATE;
}
if(!cId && m_nTTDataRateChoice && m_nDataRateChoice && m_uDataRate > m_uTTDataRate)
{
cId = IDC_EDIT_GEN_TT_DATARATE;
mId = IDS_ERR_TOTALRATE_LESS_RATE;
}
#if 0 // 367760 1 a-leeb ACS: Snap-in performin incorrect boundary checking
if(!cId && m_nTTDataRateChoice && m_nPeakRateChoice && m_uPeakRate > m_uTTDataRate)
{
cId = IDC_EDIT_GEN_TT_DATARATE;
mId = IDS_ERR_TOTALRATE_LESS_PEAKRATE;
}
#endif
if(!cId && m_nTTPeakDataRateChoice && m_nPeakRateChoice && m_uPeakRate > m_uTTPeakRate)
{
cId = IDC_EDIT_GEN_TT_PEAKRATE;
mId = IDS_ERR_TOTALPEAK_LESS_PEAK;
}
if(!cId && m_nTTDataRateChoice && m_nTTPeakDataRateChoice && m_uTTDataRate > m_uTTPeakRate)
{
cId = IDC_EDIT_GEN_TT_PEAKRATE;
mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
}
if(cId)
{
CWnd* pWnd = GetDlgItem(cId);
ASSERT(pWnd);
GotoDlgCtrl( pWnd );
AfxMessageBox(mId);
return ;
}
else
{
int index = m_comboTypes.GetCurSel();
if( index != CB_ERR)
{
m_nServiceType = m_comboTypes.GetItemData(index);
}
CACSDialog::OnOK();
}
}