Advertisement
cooltoad51

RankContactsDlg.cpp

Aug 9th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.32 KB | None | 0 0
  1. // RankContactsDlg.cpp : implementation file
  2.  
  3. /**********************************************************************************************************************
  4. Mod Date Engineer ITN/DEFECT Comment
  5. --- -------- ----------- ------------- ---------------------------------------------------------------------
  6. 001 24/01/2018 AK050366 1-000000101258 Functionality to order and verify rank for primary contacts
  7. ***********************************************************************************************************************/
  8. #include "stdafx.h"
  9. #include "ctrolescrns.h"
  10. #include "RankContactsDlg.h"
  11.  
  12. static const int COLUMN_ZERO = 0;
  13. static const int COLUMN_ONE = 1;
  14. static const int COLUMN_TWO = 2;
  15. static const int COLUMN_THREE = 3;
  16. static const int COLUMN_FOUR = 4;
  17. static const int COLUMN_FIVE = 5;
  18.  
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CRankContactsDlg dialog
  21.  
  22. CRankContactsDlg::CRankContactsDlg(vector<CPrimaryContactData*>* vRankContact, CAssignmentList* pAssignList, CWnd* pParent)
  23. : CDialog(CRankContactsDlg::IDD, pParent), m_vRankContact(vRankContact), m_pAssignList(pAssignList), bDragValue(false), m_lCount(0), m_iFromIndex(0)
  24. {
  25. //{{AFX_DATA_INIT(CRankContactsDlg)
  26. m_btnFootPanel.Add(&m_btnOkCtrl);
  27. m_btnFootPanel.Add(&m_btnCancelCtrl);
  28. //}}AFX_DATA_INIT
  29. }
  30.  
  31. void CRankContactsDlg::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CDialog::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(CRankContactsDlg)
  35. DDX_Control(pDX, IDC_BUTTON_RANK_OK, m_btnOkCtrl);
  36. DDX_Control(pDX, IDC_BUTTON_RANK_CANCEL, m_btnCancelCtrl);
  37. DDX_Control(pDX, IDC_PRIMARY_CONTACTS, m_treePrimaryContacts);
  38. //}}AFX_DATA_MAP
  39. }
  40.  
  41. BEGIN_MESSAGE_MAP(CRankContactsDlg, CDialog)
  42. //{{AFX_MSG_MAP(CRankContactsDlg)
  43. ON_BN_CLICKED(IDC_BUTTON_RANK_OK, OnButtonOk)
  44. ON_BN_CLICKED(IDC_BUTTON_RANK_CANCEL, OnButtonCancel)
  45. ON_SFTTREEN_LBUTTONDOWN_CELL(IDC_PRIMARY_CONTACTS, OnItemClickRankDlg)
  46. ON_SFTTREEN_ENDDRAG(IDC_PRIMARY_CONTACTS, AutoEndDraggingResult)
  47. //}}AFX_MSG_MAP
  48. END_MESSAGE_MAP()
  49.  
  50. BEGIN_EVENTSINK_MAP(CRankContactsDlg, CDialog)
  51. END_EVENTSINK_MAP()
  52.  
  53. BOOL CRankContactsDlg::OnInitDialog()
  54. {
  55. //CDialog::OnInitDialog();
  56. //Create SftTree Control
  57. if (CreateTreeControl() == -1)
  58. {
  59. return FALSE;
  60. }
  61. LoadPrimaryContacts();
  62. return TRUE;
  63. }
  64.  
  65. void CRankContactsDlg::OnButtonOk()
  66. {
  67. m_vRankContact->clear();
  68. CAssignment* pAssign = NULL;
  69. CPrimaryContactData* pPrimaryContactData = NULL;
  70. short rankValue = 0;
  71. for (int i = 0; i < m_lCount; i++)
  72. {
  73. rankValue++;
  74. pPrimaryContactData = (CPrimaryContactData*)m_treePrimaryContacts.GetItemData(i);
  75. if (pPrimaryContactData != NULL)
  76. {
  77. pPrimaryContactData->m_shPrimaryContactRank = rankValue;
  78. m_vRankContact->push_back(pPrimaryContactData);
  79. pAssign = (CAssignment*)(m_pAssignList->GetAt(m_pAssignList->GetPosition(pPrimaryContactData->m_dProtRoleID)));
  80. if (pAssign != NULL && pAssign->m_nPrimaryContact == 1)
  81. {
  82. pAssign->m_shPrimaryContactRank = rankValue;
  83. pAssign->m_action_ind = changeRecord;
  84. }
  85. }
  86. }
  87. EndDialog(0);
  88. }
  89.  
  90. void CRankContactsDlg::LoadPrimaryContacts()
  91. {
  92. int index = 0;
  93. CAssignment* pAssign = NULL;
  94. m_treePrimaryContacts.ResetContent();
  95. for (vector<CPrimaryContactData*>::const_iterator iter = m_vRankContact->begin(); iter != m_vRankContact->end(); ++iter)
  96. {
  97. try
  98. {
  99. pAssign = (CAssignment*)(m_pAssignList->GetAt(m_pAssignList->GetPosition((*iter)->m_dProtRoleID)));
  100. if (pAssign != NULL && pAssign->m_prot_role_id != 0)
  101. {
  102. if (pAssign->m_nPrimaryContact != 1)
  103. continue;
  104. //SftTree's function AddItem() accepts string variable : LPCTSTR. Hence, passed the "" to avoid creation of additional variable.
  105. index = m_treePrimaryContacts.AddString("");
  106. AddNewRowPC(iter, index, pAssign);
  107. }
  108. }
  109. catch (exception &e)
  110. {
  111. MsgWrite(MSG_DEFAULT, eMsgLog_Commit, _T("CRankContactsDlg::LoadPrimaryContacts()"),
  112. eMsgLvl_Error, _T("LoadPrimaryContacts() failed to load Primary Contacts"));
  113. }
  114. }
  115. m_lCount = m_treePrimaryContacts.GetCount();
  116. OptimizeRankContactsColumns();
  117. }
  118.  
  119. void CRankContactsDlg::AddNewRowPC(const vector<CPrimaryContactData*>::const_iterator iter, const int index, CAssignment* pAssign)
  120. {
  121. m_treePrimaryContacts.SetItemData(index, (SFTTREE_DWORD_PTR)(*iter));
  122. m_treePrimaryContacts.SetText(index, COLUMN_ZERO, pAssign->m_person_name);
  123. m_treePrimaryContacts.SetText(index, COLUMN_ONE, pAssign->m_role->display);
  124. m_treePrimaryContacts.SetText(index, COLUMN_TWO, pAssign->m_org_name);
  125. m_treePrimaryContacts.SetText(index, COLUMN_THREE, (*iter)->m_sPhoneNum);
  126. m_treePrimaryContacts.SetText(index, COLUMN_FOUR, (*iter)->m_sPagerNum);
  127. m_treePrimaryContacts.SetText(index, COLUMN_FIVE, (*iter)->m_sEmailAddr);
  128. }
  129.  
  130. void CRankContactsDlg::OnButtonCancel()
  131. {
  132. vector<CPrimaryContactData*>::const_iterator iter = m_vRankContact->begin();
  133. while (iter != m_vRankContact->end())
  134. {
  135. //Since, the element was deleted, const_iterator needs to be re-assigned by the return type of vector's erase()- function
  136. (*iter)->m_shPrimaryContactRank == 0 ? iter = m_vRankContact->erase(iter) : iter++;
  137. }
  138. EndDialog(0);
  139. }
  140.  
  141. void CRankContactsDlg::InternationalizeColumnsRankContacts(CString sColPCHeader[])
  142. {
  143.  
  144. sColPCHeader[0].LoadString(IDS_COL_HEADER_CONTACT_NAME);
  145. m_treePrimaryContacts.SetHeader(COLUMN_ZERO, sColPCHeader[0]);
  146.  
  147. sColPCHeader[1].LoadString(IDS_COL_HEADER_ROLE);
  148. m_treePrimaryContacts.SetHeader(COLUMN_ONE, sColPCHeader[1]);
  149.  
  150. sColPCHeader[2].LoadString(IDS_COL_HEADER_ORG);
  151. m_treePrimaryContacts.SetHeader(COLUMN_TWO, sColPCHeader[2]);
  152.  
  153. sColPCHeader[3].LoadString(IDS_COL_HEADER_PHONE);
  154. m_treePrimaryContacts.SetHeader(COLUMN_THREE, sColPCHeader[3]);
  155.  
  156. sColPCHeader[4].LoadString(IDS_COL_HEADER_PAGER);
  157. m_treePrimaryContacts.SetHeader(COLUMN_FOUR, sColPCHeader[4]);
  158.  
  159. sColPCHeader[5].LoadString(IDS_COL_HEADER_EMAIL);
  160. m_treePrimaryContacts.SetHeader(COLUMN_FIVE, sColPCHeader[5]);
  161.  
  162. //To set Row/Col header
  163. CString sRowColHeader;
  164. sRowColHeader.LoadString(IDS_ROWCOL_HEADER_RANK);
  165. m_treePrimaryContacts.SetRowColHeaderText(sRowColHeader);
  166. }
  167.  
  168. int CRankContactsDlg::CreateTreeControl()
  169. {
  170. if (!m_treePrimaryContacts.CreateEx(WS_EX_CLIENTEDGE,
  171. SFTTREESTYLE_NOTIFY | SFTTREE_TREELINE_SOLID | SFTTREESTYLE_SCROLL | SFTTREESTYLE_DRAGDROP |
  172. WS_HSCROLL | WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD,
  173. GetRectForTreeCtrl(),
  174. this,
  175. IDC_PRIMARY_CONTACTS))
  176. {
  177. //Add to log file
  178. //::AfxMessageBox("CTypeCommitteeDlg::OnInitDialog - Could not create sfttree");
  179. return -1;
  180. }
  181.  
  182. m_treePrimaryContacts.ResetContent();
  183. //Set Properties
  184. m_treePrimaryContacts.SetShow3D(FALSE);
  185. m_treePrimaryContacts.SetShowButton0(FALSE);
  186. m_treePrimaryContacts.SetShowButtons(TRUE);
  187. m_treePrimaryContacts.SetShowGrid(TRUE);
  188. m_treePrimaryContacts.SetGridStyle(SFTTREE_GRID_BOTH);
  189. m_treePrimaryContacts.SetFlyby(FALSE);
  190. m_treePrimaryContacts.SetShowTruncated(TRUE);
  191. m_treePrimaryContacts.SetToolTipAlways(FALSE);
  192. m_treePrimaryContacts.SetItemPictureAlign(FALSE);
  193. m_treePrimaryContacts.SetNoSelection(FALSE);
  194. m_treePrimaryContacts.SetItemLines(1);
  195. //Set Left Button Only could not be found
  196. m_treePrimaryContacts.SetCalcVisibleOnly(FALSE);
  197. m_treePrimaryContacts.SetCalcLimit(0);
  198. m_treePrimaryContacts.EnableWindow(TRUE);
  199.  
  200. m_treePrimaryContacts.SetSelectionStyle(SFTTREE_SELECTION_ALL | SFTTREE_SELECTION_OUTLINE);
  201. m_treePrimaryContacts.SetNoFocusStyle(SFTTREE_NOFOCUS_FRAME);
  202. m_treePrimaryContacts.SetScrollTips(FALSE);
  203. m_treePrimaryContacts.SetShowFocus(TRUE);
  204. m_treePrimaryContacts.SetCharSearchMode(SFTTREE_CHARSEARCH_ONECHAR);
  205.  
  206. const int nCols = 6;
  207. CString sArrColumnHeaders[nCols];
  208. InternationalizeColumnsRankContacts(sArrColumnHeaders);
  209. SFTTREE_COLUMN_EX aCol[nCols] = {
  210. { //Column - 1
  211. 0,0, //reserved
  212. 100, //width
  213. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  214. ES_LEFT | SFTTREE_BMP_CENTER, //Header style
  215. (LPTSTR)(LPCTSTR)sArrColumnHeaders[0], //Column Header text
  216. NULL, NULL, //Reserved
  217. SFTTREE_BMP_LEFT //Picture Alignment
  218. },
  219. { //Column - 2
  220. 0,0, //reserved
  221. 120, //width
  222. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  223. ES_LEFT | SFTTREE_BMP_LEFT, //Header style
  224. (LPTSTR)(LPCTSTR)sArrColumnHeaders[1], //Column Header text
  225. NULL, NULL, //Reserved
  226. SFTTREE_BMP_LEFT //Picture Alignment
  227. },
  228. { //Column - 3
  229. 0,0, //reserved
  230. 100, //width
  231. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  232. ES_LEFT | SFTTREE_BMP_LEFT, //Header style
  233. (LPTSTR)(LPCTSTR)sArrColumnHeaders[2], //Column Header text
  234. NULL, NULL, //Reserved
  235. SFTTREE_BMP_LEFT //Picture Alignment
  236. },
  237. { //Column - 4
  238. 0,0, //reserved
  239. 80, //width
  240. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  241. ES_LEFT | SFTTREE_BMP_LEFT, //Header style
  242. (LPTSTR)(LPCTSTR)sArrColumnHeaders[3], //Column Header text
  243. NULL, NULL, //Reserved
  244. SFTTREE_BMP_LEFT //Picture Alignment
  245. },
  246. { //Column - 5
  247. 0,0, //reserved
  248. 80, //width
  249. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  250. ES_LEFT | SFTTREE_BMP_LEFT, //Header style
  251. (LPTSTR)(LPCTSTR)sArrColumnHeaders[4], //Column Header text
  252. NULL, NULL, //Reserved
  253. SFTTREE_BMP_LEFT //Picture Alignment
  254. },
  255. { //Column - 6
  256. 0,0, //reserved
  257. 120, //width
  258. ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
  259. ES_LEFT | SFTTREE_BMP_LEFT, //Header style
  260. (LPTSTR)(LPCTSTR)sArrColumnHeaders[5], //Column Header text
  261. NULL, NULL, //Reserved
  262. SFTTREE_BMP_LEFT //Picture Alignment
  263. }
  264. };
  265.  
  266. m_treePrimaryContacts.SetColumns(nCols, aCol);
  267. m_treePrimaryContacts.SetShowHeader(TRUE);
  268. m_treePrimaryContacts.SetOpenEnded(TRUE);
  269.  
  270. m_treePrimaryContacts.SetResizeHeader(TRUE);
  271. m_treePrimaryContacts.SetCrossColumnResize(TRUE);
  272. m_treePrimaryContacts.SetShowHeaderButtons(TRUE);
  273. m_treePrimaryContacts.SetReorderColumns(FALSE);
  274. m_treePrimaryContacts.SetMultilineHeader(FALSE);
  275.  
  276. m_treePrimaryContacts.SetRowColHeaderStyle(ES_CENTER | SFTTREE_HEADER_UP);
  277. m_treePrimaryContacts.SetRowColHeaderPictureStyle(SFTTREE_BMP_LEFT);
  278. m_treePrimaryContacts.SetRowColHeaderButton(FALSE);
  279.  
  280. m_treePrimaryContacts.SetDragType(SFTTREE_DRAG_PIXELIMM);
  281. m_treePrimaryContacts.SetDragBitmaps(FALSE);
  282. m_treePrimaryContacts.SetDropHighlightStyle(SFTTREE_DROPHIGHLIGHT_ONTOP);
  283.  
  284. m_treePrimaryContacts.SetShowRowHeader(SFTTREE_ROWSTYLE_TITLECOUNT1); //To start the count of row's from 1
  285. m_treePrimaryContacts.SetRowHeaderStyle(ES_CENTER | SFTTREE_HEADER_UP);
  286. m_treePrimaryContacts.SetRowHeaderWidth(40);
  287.  
  288. font.CreateFont(
  289. 8, // nHeight
  290. 0, // nWidth
  291. 0, // nEscapement
  292. 0, // nOrientation
  293. FW_NORMAL, // nWeight
  294. FALSE, // bItalic
  295. FALSE, // bUnderline
  296. 0, // cStrikeOut
  297. ANSI_CHARSET, // nCharSet
  298. OUT_DEFAULT_PRECIS, // nOutPrecision
  299. CLIP_DEFAULT_PRECIS, // nClipPrecision
  300. DEFAULT_QUALITY, // nQuality
  301. DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
  302. _T("MS Sans Serif")); // lpszFacename
  303. m_treePrimaryContacts.SetRowHeaderFont(&font);
  304. m_treePrimaryContacts.SetHeaderFont(&font);
  305. return TRUE;
  306. }
  307.  
  308. RECT CRankContactsDlg::GetRectForTreeCtrl()
  309. {
  310. RECT dlgRect;
  311. GetWindowRect(&dlgRect);
  312.  
  313. CWnd* pBtnCancel = GetDlgItem(IDC_BUTTON_RANK_CANCEL);
  314. RECT btnCancelRect;
  315. pBtnCancel->GetWindowRect(&btnCancelRect);
  316.  
  317. CWnd* pStaticTxt = GetDlgItem(IDS_RANK_STATIC);
  318. RECT btnTextRect;
  319. pStaticTxt->GetWindowRect(&btnTextRect);
  320.  
  321. int iGap = (btnTextRect.left - dlgRect.left);
  322.  
  323. RECT treeRect;
  324. treeRect.left = btnTextRect.left;
  325. treeRect.top = btnTextRect.bottom + iGap;
  326. treeRect.right = btnCancelRect.right;
  327. treeRect.bottom = btnCancelRect.top - iGap;
  328. ScreenToClient(&treeRect);
  329. return treeRect;
  330. }
  331.  
  332. void CRankContactsDlg::OnItemClickRankDlg()
  333. {
  334. if (!bDragValue)
  335. {
  336. // Get the DragBegin Index of SftTree-row
  337. m_iFromIndex = m_treePrimaryContacts.GetCaretIndex();
  338. bDragValue = true;
  339. }
  340. }
  341.  
  342. void CRankContactsDlg::AutoEndDraggingResult()
  343. {
  344. // Get the DragEnd Index of SftTree & move the rows
  345. int index = m_treePrimaryContacts.GetDropHighlight();
  346. if (m_iFromIndex <= index)
  347. //For beginIndex less than endIndex of SftTree
  348. m_treePrimaryContacts.MoveItems(m_iFromIndex, 1, index == m_lCount - 1 ? -1 : index + 1);
  349. else
  350. //For beginIndex greater than endIndex of SftTree
  351. m_treePrimaryContacts.MoveItems(m_iFromIndex, 1, index);
  352. m_treePrimaryContacts.SetDropHighlight(-1, true);
  353. m_treePrimaryContacts.SetCaretIndex(index);
  354.  
  355. //Setting the 'bDragValue = false' to re-hit the OnItemClickRankDlg() to fetch the latest m_iFromIndex
  356. bDragValue = false;
  357. }
  358.  
  359. void CRankContactsDlg::OptimizeRankContactsColumns()
  360. {
  361. int nColCount = m_treePrimaryContacts.GetColumns();
  362.  
  363. for (int nColIndex = 0; nColIndex < nColCount; nColIndex++)
  364. {
  365. m_treePrimaryContacts.MakeColumnOptimal(nColIndex);
  366. }
  367. // Should be used at the very end to avoid re-calculation of the individual elements of SftTree | Performance-intensive
  368. m_treePrimaryContacts.RecalcHorizontalExtent();
  369. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement