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

332 lines
8.3 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
pgmulnk.cpp
Definition of CPgMultilink -- property page to edit
profile attributes related to multiple connections
FILE HISTORY:
*/
// PgMulnk.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "PgMulnk.h"
#include "hlptable.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPgMultilinkMerge property page
IMPLEMENT_DYNCREATE(CPgMultilinkMerge, CPropertyPage)
CPgMultilinkMerge::CPgMultilinkMerge(CRASProfileMerge* profile)
: CManagedPage(CPgMultilinkMerge::IDD),
m_pProfile(profile)
{
//{{AFX_DATA_INIT(CPgMultilinkMerge)
m_nTime = 0;
m_Unit = -1;
m_bRequireBAP = FALSE;
m_nMultilinkPolicy = -1;
//}}AFX_DATA_INIT
if(m_pProfile->m_dwBapRequired == RAS_BAP_REQUIRE)
m_bRequireBAP = TRUE;
m_nTime = m_pProfile->m_dwBapLineDnTime;
if(!(m_nTime % 60)) // can user min to represent
{
m_nTime /= 60;
m_Unit = 1;
}
else
m_Unit = 0;
if(!(m_pProfile->m_dwAttributeFlags & PABF_msRADIUSPortLimit))
{
m_nMultilinkPolicy = 0; // value not set
}
else if(m_pProfile->m_dwPortLimit == 1)
{
m_nMultilinkPolicy = 1; // multilink not allowed
}
else
{
m_nMultilinkPolicy = 2; // multilink
}
SetHelpTable(g_aHelpIDs_IDD_MULTILINK_MERGE);
m_bInited = false;
}
CPgMultilinkMerge::~CPgMultilinkMerge()
{
}
void CPgMultilinkMerge::DoDataExchange(CDataExchange* pDX)
{
ASSERT(m_pProfile);
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPgMultilinkMerge)
DDX_Control(pDX, IDC_CHECKREQUIREBAP, m_CheckRequireBAP);
DDX_Control(pDX, IDC_EDITTIME, m_EditTime);
DDX_Control(pDX, IDC_EDITMAXPORTS, m_EditPorts);
DDX_Control(pDX, IDC_EDITPERCENT, m_EditPercent);
DDX_Control(pDX, IDC_SPINTIME, m_SpinTime);
DDX_Control(pDX, IDC_SPINPERCENT, m_SpinPercent);
DDX_Control(pDX, IDC_SPINMAXPORTS, m_SpinMaxPorts);
DDX_Control(pDX, IDC_COMBOUNIT, m_CBUnit);
DDX_CBIndex(pDX, IDC_COMBOUNIT, m_Unit);
DDX_Check(pDX, IDC_CHECKREQUIREBAP, m_bRequireBAP);
DDX_Radio(pDX, IDC_RADIO_MULNK_NOTDEFINED, m_nMultilinkPolicy);
DDX_Text(pDX, IDC_EDITTIME, m_nTime);
if(m_nMultilinkPolicy != 1)
DDV_MinMaxUInt(pDX, m_nTime, 1, MAX_TIME);
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_EDITPERCENT, m_pProfile->m_dwBapLineDnLimit);
if(m_nMultilinkPolicy != 1)
DDV_MinMaxUInt(pDX, m_pProfile->m_dwBapLineDnLimit, 1, 100);
DDX_Text(pDX, IDC_EDITMAXPORTS, m_pProfile->m_dwPortLimit);
if(m_nMultilinkPolicy == 2)
DDV_MinMaxUInt(pDX, m_pProfile->m_dwPortLimit, 2, MAX_PORTLIMIT);
}
BEGIN_MESSAGE_MAP(CPgMultilinkMerge, CPropertyPage)
//{{AFX_MSG_MAP(CPgMultilinkMerge)
ON_EN_CHANGE(IDC_EDITMAXPORTS, OnChangeEditmaxports)
ON_EN_CHANGE(IDC_EDITPERCENT, OnChangeEditpercent)
ON_EN_CHANGE(IDC_EDITTIME, OnChangeEdittime)
ON_WM_HELPINFO()
ON_WM_CONTEXTMENU()
ON_CBN_SELCHANGE(IDC_COMBOUNIT, OnSelchangeCombounit)
ON_BN_CLICKED(IDC_CHECKREQUIREBAP, OnCheckrequirebap)
ON_BN_CLICKED(IDC_RADIO_MULNK_MULTI, OnRadioMulnkMulti)
ON_BN_CLICKED(IDC_RADIO_MULNK_NOTDEFINED, OnRadioMulnkNotdefined)
ON_BN_CLICKED(IDC_RADIO_MULNK_SINGLE, OnRadioMulnkSingle)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPgMultilinkMerge message handlers
BOOL CPgMultilinkMerge::OnApply()
{
if(!GetModified()) return TRUE;
// # of ports
switch (m_nMultilinkPolicy)
{
case 0: // remove attribute
m_pProfile->m_dwAttributeFlags &= (~PABF_msRADIUSPortLimit);
break;
case 1: // 1
m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSPortLimit;
m_pProfile->m_dwPortLimit = 1;
break;
case 2: // port limits
m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSPortLimit;
break;
};
if(m_nMultilinkPolicy == 1) // single link
// remove all the bap attributes
{
m_pProfile->m_dwAttributeFlags &= ~PABF_msRASBapRequired;
m_pProfile->m_dwAttributeFlags &= ~PABF_msRASBapLinednLimit;
m_pProfile->m_dwAttributeFlags &= ~PABF_msRASBapLinednTime;
}
else
{
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapLinednLimit;
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapLinednTime;
if(m_Unit == 1) // minutes is selected as the unit
m_pProfile->m_dwBapLineDnTime = m_nTime * 60; // change to second
else
m_pProfile->m_dwBapLineDnTime = m_nTime;
if(m_bRequireBAP)
{
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapRequired;
m_pProfile->m_dwBapRequired = RAS_BAP_REQUIRE;
}
else // remove the attribute from the data store
{
m_pProfile->m_dwAttributeFlags &= (~PABF_msRASBapRequired);
m_pProfile->m_dwBapRequired = RAS_DEF_BAPREQUIRED;
}
}
return CManagedPage::OnApply();
}
BOOL CPgMultilinkMerge::OnInitDialog()
{
// populate the units
CString str;
CPropertyPage::OnInitDialog();
str.LoadString(IDS_SEC);
m_CBUnit.InsertString(0, str);
str.LoadString(IDS_MIN);
m_CBUnit.InsertString(1, str);
UpdateData(FALSE);
// set spin range
m_SpinMaxPorts.SetRange(2, MAX_PORTLIMIT);
m_SpinPercent.SetRange(1, MAX_PERCENT);
m_SpinTime.SetRange(1, MAX_TIME);
// settings -- d
EnableSettings();
m_bInited = true;
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPgMultilinkMerge::OnChangeEditmaxports()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPage::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
if (m_bInited)
{
SetModified();
m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSPortLimit;
};
}
void CPgMultilinkMerge::OnChangeEditpercent()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPage::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here
if (m_bInited)
{
SetModified();
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapLinednLimit;
};
}
void CPgMultilinkMerge::OnChangeEdittime()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPage::OnInitDialog()
// function to send the EM_SETEVENTMASK message to the control
// with the ENM_CHANGE flag ORed into the lParam mask.
// TODO: Add your control notification handler code here
if (m_bInited)
{
SetModified();
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapLinednTime;
};
}
void CPgMultilinkMerge::EnableSettings()
{
EnablePorts();
EnableBAP();
}
void CPgMultilinkMerge::EnableBAP()
{
CButton *pBtn = (CButton*)GetDlgItem(IDC_RADIO_MULNK_SINGLE);
ASSERT(pBtn);
BOOL b = (pBtn->GetCheck() == 0); // only enable when Single is not selected
m_CheckRequireBAP.EnableWindow(b);
// the other BAP info is not affected by the state of the check box
m_EditPercent.EnableWindow(b);
m_SpinPercent.EnableWindow(b);
m_EditTime.EnableWindow(b);
m_SpinTime.EnableWindow(b);
GetDlgItem(IDC_COMBOUNIT)->EnableWindow(b);
}
void CPgMultilinkMerge::EnablePorts()
{
CButton *pBtn = (CButton*)GetDlgItem(IDC_RADIO_MULNK_MULTI);
ASSERT(pBtn);
BOOL b = pBtn->GetCheck();
m_EditPorts.EnableWindow(b);
m_SpinMaxPorts.EnableWindow(b);
}
BOOL CPgMultilinkMerge::OnHelpInfo(HELPINFO* pHelpInfo)
{
return CManagedPage::OnHelpInfo(pHelpInfo);
}
void CPgMultilinkMerge::OnContextMenu(CWnd* pWnd, CPoint point)
{
CManagedPage::OnContextMenu(pWnd, point);
}
void CPgMultilinkMerge::OnSelchangeCombounit()
{
SetModified();
m_pProfile->m_dwAttributeFlags |= PABF_msRASBapLinednTime;
}
void CPgMultilinkMerge::OnCheckrequirebap()
{
SetModified();
}
void CPgMultilinkMerge::OnRadioMulnkMulti()
{
SetModified();
EnablePorts();
EnableBAP();
if(m_pProfile->m_dwPortLimit == 1)
{
m_pProfile->m_dwPortLimit =2;
CString str = _T("2");
m_EditPorts.SetWindowText(str);
}
}
void CPgMultilinkMerge::OnRadioMulnkNotdefined()
{
SetModified();
EnablePorts();
EnableBAP();
}
void CPgMultilinkMerge::OnRadioMulnkSingle()
{
SetModified();
EnablePorts();
EnableBAP();
}