Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

673 lines
17 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. //
  5. // Copyright (C) Microsoft Corporation, 1997 - 1998
  6. //
  7. // File: traffic.cpp
  8. //
  9. //--------------------------------------------------------------------------
  10. // Traffic.cpp : implementation file
  11. //
  12. #include "stdafx.h"
  13. #include "helper.h"
  14. #include "acsadmin.h"
  15. #include "acsdata.h"
  16. #include "Traffic.h"
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CPgTraffic property page
  24. IMPLEMENT_DYNCREATE(CPgTraffic, CACSPage)
  25. CPgTraffic::CPgTraffic() : CACSPage(CPgTraffic::IDD)
  26. {
  27. DataInit();
  28. }
  29. CPgTraffic::CPgTraffic(CACSPolicyElement* pData) : CACSPage(CPgTraffic::IDD)
  30. {
  31. ASSERT(pData);
  32. m_spData = pData;
  33. DataInit();
  34. }
  35. void CPgTraffic::DataInit()
  36. {
  37. //{{AFX_DATA_INIT(CPgTraffic)
  38. m_dwPFDataRate = 0;
  39. m_dwPFDuration = 0;
  40. m_dwPFPeakRate = 0;
  41. m_dwTTDataRate = 0;
  42. m_dwTTFlows = 0;
  43. m_bPFDataRate = FALSE;
  44. m_bPFPeakRate = FALSE;
  45. m_bTTDataRate = FALSE;
  46. m_bTTFlows = FALSE;
  47. m_bPFDuration = FALSE;
  48. m_bTTPeakRate = FALSE;
  49. m_dwTTPeakRate = 0;
  50. //}}AFX_DATA_INIT
  51. m_pServiceType = NULL;
  52. m_pDirection = NULL;
  53. }
  54. CPgTraffic::~CPgTraffic()
  55. {
  56. delete m_pDirection;
  57. delete m_pServiceType;
  58. m_aDirections.DeleteAll();
  59. m_aServiceTypes.DeleteAll();
  60. }
  61. void CPgTraffic::DoDataExchange(CDataExchange* pDX)
  62. {
  63. CACSPage::DoDataExchange(pDX);
  64. //{{AFX_DATA_MAP(CPgTraffic)
  65. DDX_Check(pDX, IDC_CHECK_PF_DATARATE, m_bPFDataRate);
  66. DDX_Check(pDX, IDC_CHECK_PF_PEAKRATE, m_bPFPeakRate);
  67. DDX_Check(pDX, IDC_CHECK_TT_DATARATE, m_bTTDataRate);
  68. DDX_Check(pDX, IDC_CHECK_TT_FLOWS, m_bTTFlows);
  69. DDX_Check(pDX, IDC_CHECK_PF_DURATION, m_bPFDuration);
  70. DDX_Check(pDX, IDC_CHECK_TT_PEAKRATE, m_bTTPeakRate);
  71. if(m_bPFDataRate)
  72. {
  73. DDX_Text(pDX, IDC_EDIT_PF_DATARATE, m_dwPFDataRate);
  74. DDV_MinMaxDWord(pDX, m_dwPFDataRate, 0, DWORD_LIMIT/1024);
  75. }
  76. if(m_bPFDuration)
  77. {
  78. DDX_Text(pDX, IDC_EDIT_PF_DURATION, m_dwPFDuration);
  79. DDV_MinMaxDWord(pDX, m_dwPFDuration, 0, DWORD_LIMIT/60);
  80. }
  81. if(m_bPFPeakRate)
  82. {
  83. DDX_Text(pDX, IDC_EDIT_PF_PEAKRATE, m_dwPFPeakRate);
  84. DDV_MinMaxDWord(pDX, m_dwPFPeakRate, 0, DWORD_LIMIT/1024);
  85. }
  86. if(m_bTTDataRate)
  87. {
  88. DDX_Text(pDX, IDC_EDIT_TT_DATARATE, m_dwTTDataRate);
  89. DDV_MinMaxDWord(pDX, m_dwTTDataRate, 0, DWORD_LIMIT/1024);
  90. }
  91. if(m_bTTFlows)
  92. {
  93. DDX_Text(pDX, IDC_EDIT_TT_FLOWS, m_dwTTFlows);
  94. DDV_MinMaxDWord(pDX, m_dwTTFlows, 0, DWORD_LIMIT);
  95. }
  96. if(m_bTTPeakRate)
  97. {
  98. DDX_Text(pDX, IDC_EDIT_TT_PEAKRATE, m_dwTTPeakRate);
  99. DDV_MinMaxDWord(pDX, m_dwTTPeakRate, 0, DWORD_LIMIT/1024);
  100. }
  101. //}}AFX_DATA_MAP
  102. }
  103. BEGIN_MESSAGE_MAP(CPgTraffic, CACSPage)
  104. //{{AFX_MSG_MAP(CPgTraffic)
  105. ON_CBN_SELCHANGE(IDC_COMBODIRECTION, OnSelchangeCombodirectioin)
  106. ON_CBN_SELCHANGE(IDC_COMBOSERVICELEVEL, OnSelchangeComboservicelevel)
  107. ON_EN_CHANGE(IDC_EDIT_PF_DATARATE, OnChangeEditPfDatarate)
  108. ON_EN_CHANGE(IDC_EDIT_PF_DURATION, OnChangeEditPfDuration)
  109. ON_EN_CHANGE(IDC_EDIT_PF_PEAKRATE, OnChangeEditPfPeakrate)
  110. ON_EN_CHANGE(IDC_EDIT_TT_DATARATE, OnChangeEditTtDatarate)
  111. ON_EN_CHANGE(IDC_EDIT_TT_FLOWS, OnChangeEditTtFlows)
  112. ON_BN_CLICKED(IDC_CHECK_PF_DATARATE, OnCheckPfDatarate)
  113. ON_BN_CLICKED(IDC_CHECK_PF_PEAKRATE, OnCheckPfPeakrate)
  114. ON_BN_CLICKED(IDC_CHECK_TT_DATARATE, OnCheckTtDatarate)
  115. ON_BN_CLICKED(IDC_CHECK_TT_FLOWS, OnCheckTtFlows)
  116. ON_BN_CLICKED(IDC_CHECK_PF_DURATION, OnCheckPfDuration)
  117. ON_BN_CLICKED(IDC_CHECK_TT_PEAKRATE, OnCheckTtPeakrate)
  118. ON_EN_CHANGE(IDC_EDIT_TT_PEAKRATE, OnChangeEditTtPeakrate)
  119. //}}AFX_MSG_MAP
  120. END_MESSAGE_MAP()
  121. /////////////////////////////////////////////////////////////////////////////
  122. // CPgTraffic message handlers
  123. enum DirectionIndex
  124. {
  125. // DIRECTION_DEFAULT = 0,
  126. DIRECTION_SEND,
  127. DIRECTION_RECEIVE,
  128. DIRECTION_SENDRECEIVE
  129. };
  130. enum ServiceTypeIndex
  131. {
  132. // SERVICETYPE_DEFAULT = 0,
  133. SERVICETYPE_ALL,
  134. SERVICETYPE_BESTEFFORT,
  135. SERVICETYPE_CONTROLLEDLOAD,
  136. SERVICETYPE_GUARANTEEDSERVICE
  137. };
  138. BOOL CPgTraffic::OnApply()
  139. {
  140. CString* pStr = NULL;
  141. // check if the values input on the page is valid
  142. UINT cId = 0;
  143. UINT mId = 0;
  144. if(m_bPFPeakRate && m_bPFDataRate && m_dwPFDataRate > m_dwPFPeakRate)
  145. {
  146. cId = IDC_EDIT_PF_PEAKRATE;
  147. mId = IDS_ERR_PEAKRATE_LESS_RATE;
  148. }
  149. if(!cId && m_bTTDataRate && m_bPFDataRate && m_dwPFDataRate > m_dwTTDataRate)
  150. {
  151. cId = IDC_EDIT_TT_DATARATE;
  152. mId = IDS_ERR_TOTALRATE_LESS_RATE;
  153. }
  154. if(!cId && m_bTTDataRate && m_bPFPeakRate && m_dwPFPeakRate > m_dwTTDataRate)
  155. {
  156. cId = IDC_EDIT_TT_DATARATE;
  157. mId = IDS_ERR_TOTALRATE_LESS_PEAKRATE;
  158. }
  159. if(!cId && m_bTTDataRate && m_bTTPeakRate && m_dwTTPeakRate < m_dwTTDataRate)
  160. {
  161. cId = IDC_EDIT_TT_PEAKRATE;
  162. mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
  163. }
  164. if(!cId && m_bTTPeakRate && m_bPFPeakRate && m_dwTTPeakRate < m_dwPFPeakRate)
  165. {
  166. cId = IDC_EDIT_TT_PEAKRATE;
  167. mId = IDS_ERR_TOTALPEAK_LESS_PEAK;
  168. }
  169. if(cId)
  170. {
  171. CWnd* pWnd = GetDlgItem(cId);
  172. ASSERT(pWnd);
  173. GotoDlgCtrl( pWnd );
  174. AfxMessageBox(mId);
  175. return FALSE;
  176. }
  177. // direction
  178. if(m_pDirection)
  179. {
  180. switch(m_pDirection->GetSelected())
  181. {
  182. case DIRECTION_SEND:
  183. m_spData->m_dwDirection = ACS_DIRECTION_SEND;
  184. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
  185. break;
  186. case DIRECTION_RECEIVE:
  187. m_spData->m_dwDirection = ACS_DIRECTION_RECEIVE;
  188. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
  189. break;
  190. case DIRECTION_SENDRECEIVE:
  191. m_spData->m_dwDirection = ACS_DIRECTION_BOTH;
  192. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
  193. break;
  194. default:
  195. // no valid value should come here
  196. ASSERT(0);
  197. }
  198. }
  199. else // save what ever is loaded
  200. {
  201. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_DIRECTION))
  202. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
  203. else
  204. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, false);
  205. }
  206. // service type
  207. if(m_pServiceType)
  208. {
  209. switch(m_pServiceType->GetSelected())
  210. {
  211. case SERVICETYPE_BESTEFFORT:
  212. m_spData->m_dwServiceType = ACS_SERVICETYPE_BESTEFFORT;
  213. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
  214. break;
  215. case SERVICETYPE_CONTROLLEDLOAD:
  216. m_spData->m_dwServiceType = ACS_SERVICETYPE_CONTROLLEDLOAD;
  217. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
  218. break;
  219. case SERVICETYPE_GUARANTEEDSERVICE:
  220. m_spData->m_dwServiceType = ACS_SERVICETYPE_GUARANTEEDSERVICE;
  221. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
  222. break;
  223. case SERVICETYPE_ALL:
  224. m_spData->m_dwServiceType = ACS_SERVICETYPE_ALL;
  225. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
  226. break;
  227. default:
  228. // no valid value should come here
  229. ASSERT(0);
  230. }
  231. }
  232. else // save what ever is loaded
  233. {
  234. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_SERVICETYPE))
  235. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
  236. else
  237. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, false);
  238. }
  239. //------------------
  240. // per flow
  241. // data rate
  242. if(m_bPFDataRate)
  243. {
  244. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_TOKENRATE, true);
  245. m_spData->m_ddPFTokenRate.LowPart = FROMKBS(m_dwPFDataRate);
  246. m_spData->m_ddPFTokenRate.HighPart = 0;
  247. }
  248. else
  249. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_TOKENRATE, false);
  250. // Peak data rate
  251. if(m_bPFPeakRate)
  252. {
  253. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_PEAKBANDWIDTH, true);
  254. m_spData->m_ddPFPeakBandWidth.LowPart = FROMKBS(m_dwPFPeakRate);
  255. m_spData->m_ddPFPeakBandWidth.HighPart = 0;
  256. }
  257. else
  258. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_PEAKBANDWIDTH, false);
  259. // duration
  260. if(m_bPFDuration)
  261. {
  262. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_DURATION, true);
  263. m_spData->m_dwPFDuration = MIN2SEC(m_dwPFDuration);
  264. }
  265. else
  266. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_DURATION, false);
  267. //------------------
  268. // total
  269. // data rate
  270. if(m_bTTDataRate)
  271. {
  272. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_TOKENRATE, true);
  273. m_spData->m_ddTTTokenRate.LowPart = FROMKBS(m_dwTTDataRate);
  274. m_spData->m_ddTTTokenRate.HighPart = 0;
  275. }
  276. else
  277. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_TOKENRATE, false);
  278. // total peak bandwidth
  279. if(m_bTTPeakRate)
  280. {
  281. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_PEAKBANDWIDTH, true);
  282. m_spData->m_ddTTPeakBandWidth.LowPart = FROMKBS(m_dwTTPeakRate);
  283. m_spData->m_ddTTPeakBandWidth.HighPart = 0;
  284. }
  285. else
  286. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_PEAKBANDWIDTH, false);
  287. // flows
  288. if(m_bTTFlows)
  289. {
  290. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_FLOWS, true);
  291. m_spData->m_dwTTFlows = m_dwTTFlows;
  292. }
  293. else
  294. m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_FLOWS, false);
  295. // persist the data into DS
  296. DWORD dwAttrFlags = ATTR_FLAGS_NONE;
  297. dwAttrFlags |= (ACS_PAF_SERVICETYPE | ACS_PAF_DIRECTION);
  298. dwAttrFlags |= (ACS_PAF_PF_DURATION | ACS_PAF_PF_PEAKBANDWIDTH | ACS_PAF_PF_TOKENRATE);
  299. dwAttrFlags |= (ACS_PAF_TT_FLOWS | ACS_PAF_TT_TOKENRATE | ACS_PAF_TT_PEAKBANDWIDTH);
  300. HRESULT hr = m_spData->Save(dwAttrFlags);
  301. if(FAILED(hr)) ReportError(hr, IDS_ERR_SAVEPOLICY, NULL);
  302. return CACSPage::OnApply();
  303. }
  304. BOOL CPgTraffic::OnInitDialog()
  305. {
  306. CString* pStr = NULL;
  307. // direction
  308. // fillin the list box
  309. try{
  310. // removed based on bug: 156787
  311. // pStr = new CString();
  312. // pStr->LoadString(IDS_DEFAULT);
  313. // m_aDirections.Add(pStr);
  314. pStr = new CString();
  315. pStr->LoadString(IDS_SEND);
  316. m_aDirections.Add(pStr);
  317. pStr = new CString();
  318. pStr->LoadString(IDS_RECEIVE);
  319. m_aDirections.Add(pStr);
  320. pStr = new CString();
  321. pStr->LoadString(IDS_SENDRECEIVE);
  322. m_aDirections.Add(pStr);
  323. m_pDirection = new CStrBox<CComboBox>(this, IDC_COMBODIRECTION, m_aDirections);
  324. m_pDirection->Fill();
  325. // decide which one to select
  326. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_DIRECTION))
  327. {
  328. int current = -1;
  329. switch(m_spData->m_dwDirection)
  330. {
  331. case ACS_DIRECTION_SEND:
  332. current = DIRECTION_SEND;
  333. break;
  334. case ACS_DIRECTION_RECEIVE:
  335. current = DIRECTION_RECEIVE;
  336. break;
  337. case ACS_DIRECTION_BOTH:
  338. current = DIRECTION_SENDRECEIVE;
  339. break;
  340. default:
  341. // invalid value
  342. ASSERT(0);
  343. // message box
  344. }
  345. m_pDirection->Select(current);
  346. }
  347. else
  348. {
  349. m_pDirection->Select(DIRECTION_SENDRECEIVE); // default
  350. }
  351. }catch(CMemoryException&){};
  352. // service type
  353. try{
  354. pStr = new CString();
  355. pStr->LoadString(IDS_ALL);
  356. m_aServiceTypes.Add(pStr);
  357. pStr = new CString();
  358. pStr->LoadString(IDS_BESTEFFORT);
  359. m_aServiceTypes.Add(pStr);
  360. pStr = new CString();
  361. pStr->LoadString(IDS_CONTROLLEDLOAD);
  362. m_aServiceTypes.Add(pStr);
  363. pStr = new CString();
  364. pStr->LoadString(IDS_GUARANTEEDSERVICE);
  365. m_aServiceTypes.Add(pStr);
  366. m_pServiceType = new CStrBox<CComboBox>(this, IDC_COMBOSERVICELEVEL, m_aServiceTypes);
  367. m_pServiceType->Fill();
  368. // decide which one to select
  369. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_SERVICETYPE))
  370. {
  371. int current = -1;
  372. switch(m_spData->m_dwServiceType)
  373. {
  374. case ACS_SERVICETYPE_BESTEFFORT:
  375. current = SERVICETYPE_BESTEFFORT;
  376. break;
  377. case ACS_SERVICETYPE_CONTROLLEDLOAD:
  378. current = SERVICETYPE_CONTROLLEDLOAD;
  379. break;
  380. case ACS_SERVICETYPE_GUARANTEEDSERVICE:
  381. current = SERVICETYPE_GUARANTEEDSERVICE;
  382. break;
  383. case ACS_SERVICETYPE_ALL:
  384. current = SERVICETYPE_ALL;
  385. break;
  386. default:
  387. // invalid value
  388. ASSERT(0);
  389. // message box
  390. }
  391. m_pServiceType->Select(current);
  392. }
  393. else
  394. {
  395. m_pServiceType->Select(SERVICETYPE_ALL); // default
  396. }
  397. }catch(CMemoryException&){};
  398. //------------------
  399. // per flow
  400. // data rate
  401. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_TOKENRATE))
  402. {
  403. m_bPFDataRate = TRUE;
  404. m_dwPFDataRate = TOKBS(m_spData->m_ddPFTokenRate.LowPart);
  405. }
  406. else
  407. m_bPFDataRate = FALSE;
  408. // Peak data rate
  409. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_PEAKBANDWIDTH))
  410. {
  411. m_bPFPeakRate = TRUE;
  412. m_dwPFPeakRate = TOKBS(m_spData->m_ddPFPeakBandWidth.LowPart);
  413. }
  414. else
  415. m_bPFPeakRate = FALSE;
  416. // duration
  417. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_DURATION))
  418. {
  419. m_bPFDuration = TRUE;
  420. m_dwPFDuration = SEC2MIN(m_spData->m_dwPFDuration);
  421. }
  422. else
  423. m_bPFDuration = FALSE;
  424. //------------------
  425. // total
  426. // data rate
  427. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_TOKENRATE))
  428. {
  429. m_bTTDataRate = TRUE;
  430. m_dwTTDataRate = TOKBS(m_spData->m_ddTTTokenRate.LowPart);
  431. }
  432. else
  433. m_bTTDataRate = FALSE;
  434. // Peak data rate
  435. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_PEAKBANDWIDTH))
  436. {
  437. m_bTTPeakRate = TRUE;
  438. m_dwTTPeakRate = TOKBS(m_spData->m_ddTTPeakBandWidth.LowPart);
  439. }
  440. else
  441. m_bTTPeakRate = FALSE;
  442. // flows
  443. if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_FLOWS))
  444. {
  445. m_bTTFlows = TRUE;
  446. m_dwTTFlows = m_spData->m_dwTTFlows;
  447. }
  448. else
  449. m_bTTFlows = FALSE;
  450. CACSPage::OnInitDialog();
  451. GetDlgItem(IDC_EDIT_PF_DATARATE)->EnableWindow(m_bPFDataRate);
  452. GetDlgItem(IDC_EDIT_PF_PEAKRATE)->EnableWindow(m_bPFPeakRate);
  453. GetDlgItem(IDC_EDIT_PF_DURATION)->EnableWindow(m_bPFDuration);
  454. GetDlgItem(IDC_EDIT_TT_DATARATE)->EnableWindow(m_bTTDataRate);
  455. GetDlgItem(IDC_EDIT_TT_PEAKRATE)->EnableWindow(m_bTTPeakRate);
  456. GetDlgItem(IDC_EDIT_TT_FLOWS)->EnableWindow(m_bTTFlows);
  457. // TODO: Add extra initialization here
  458. return TRUE; // return TRUE unless you set the focus to a control
  459. // EXCEPTION: OCX Property Pages should return FALSE
  460. }
  461. void CPgTraffic::OnSelchangeCombodirectioin()
  462. {
  463. // TODO: Add your control notification handler code here
  464. SetModified();
  465. }
  466. void CPgTraffic::OnSelchangeComboservicelevel()
  467. {
  468. // TODO: Add your control notification handler code here
  469. SetModified();
  470. }
  471. void CPgTraffic::OnChangeEditPfDatarate()
  472. {
  473. // TODO: If this is a RICHEDIT control, the control will not
  474. // send this notification unless you override the CACSPage::OnInitDialog()
  475. // function to send the EM_SETEVENTMASK message to the control
  476. // with the ENM_CHANGE flag ORed into the lParam mask.
  477. // TODO: Add your control notification handler code here
  478. SetModified();
  479. }
  480. void CPgTraffic::OnChangeEditPfDuration()
  481. {
  482. // TODO: If this is a RICHEDIT control, the control will not
  483. // send this notification unless you override the CACSPage::OnInitDialog()
  484. // function to send the EM_SETEVENTMASK message to the control
  485. // with the ENM_CHANGE flag ORed into the lParam mask.
  486. // TODO: Add your control notification handler code here
  487. SetModified();
  488. }
  489. void CPgTraffic::OnChangeEditPfPeakrate()
  490. {
  491. // TODO: If this is a RICHEDIT control, the control will not
  492. // send this notification unless you override the CACSPage::OnInitDialog()
  493. // function to send the EM_SETEVENTMASK message to the control
  494. // with the ENM_CHANGE flag ORed into the lParam mask.
  495. // TODO: Add your control notification handler code here
  496. SetModified();
  497. }
  498. void CPgTraffic::OnChangeEditTtDatarate()
  499. {
  500. // TODO: If this is a RICHEDIT control, the control will not
  501. // send this notification unless you override the CACSPage::OnInitDialog()
  502. // function to send the EM_SETEVENTMASK message to the control
  503. // with the ENM_CHANGE flag ORed into the lParam mask.
  504. // TODO: Add your control notification handler code here
  505. SetModified();
  506. }
  507. void CPgTraffic::OnChangeEditTtPeakrate()
  508. {
  509. // TODO: If this is a RICHEDIT control, the control will not
  510. // send this notification unless you override the CACSPage::OnInitDialog()
  511. // function to send the EM_SETEVENTMASK message to the control
  512. // with the ENM_CHANGE flag ORed into the lParam mask.
  513. // TODO: Add your control notification handler code here
  514. SetModified();
  515. }
  516. void CPgTraffic::OnChangeEditTtFlows()
  517. {
  518. // TODO: If this is a RICHEDIT control, the control will not
  519. // send this notification unless you override the CACSPage::OnInitDialog()
  520. // function to send the EM_SETEVENTMASK message to the control
  521. // with the ENM_CHANGE flag ORed into the lParam mask.
  522. // TODO: Add your control notification handler code here
  523. SetModified();
  524. }
  525. void CPgTraffic::OnCheckPfDatarate()
  526. {
  527. // TODO: Add your control notification handler code here
  528. SetModified();
  529. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_PF_DATARATE);
  530. GetDlgItem(IDC_EDIT_PF_DATARATE)->EnableWindow(pButton->GetCheck());
  531. }
  532. void CPgTraffic::OnCheckPfPeakrate()
  533. {
  534. // TODO: Add your control notification handler code here
  535. SetModified();
  536. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_PF_PEAKRATE);
  537. GetDlgItem(IDC_EDIT_PF_PEAKRATE)->EnableWindow(pButton->GetCheck());
  538. }
  539. void CPgTraffic::OnCheckPfDuration()
  540. {
  541. // TODO: Add your control notification handler code here
  542. SetModified();
  543. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_PF_DURATION);
  544. GetDlgItem(IDC_EDIT_PF_DURATION)->EnableWindow(pButton->GetCheck());
  545. }
  546. void CPgTraffic::OnCheckTtDatarate()
  547. {
  548. // TODO: Add your control notification handler code here
  549. SetModified();
  550. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_TT_DATARATE);
  551. GetDlgItem(IDC_EDIT_TT_DATARATE)->EnableWindow(pButton->GetCheck());
  552. }
  553. void CPgTraffic::OnCheckTtFlows()
  554. {
  555. // TODO: Add your control notification handler code here
  556. SetModified();
  557. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_TT_FLOWS);
  558. GetDlgItem(IDC_EDIT_TT_FLOWS)->EnableWindow(pButton->GetCheck());
  559. }
  560. void CPgTraffic::OnCheckTtPeakrate()
  561. {
  562. // TODO: Add your control notification handler code here
  563. SetModified();
  564. CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_TT_PEAKRATE);
  565. GetDlgItem(IDC_EDIT_TT_PEAKRATE)->EnableWindow(pButton->GetCheck());
  566. }