Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // RankContactsDlg.cpp : implementation file
- /**********************************************************************************************************************
- Mod Date Engineer ITN/DEFECT Comment
- --- -------- ----------- ------------- ---------------------------------------------------------------------
- 001 24/01/2018 AK050366 1-000000101258 Functionality to order and verify rank for primary contacts
- ***********************************************************************************************************************/
- #include "stdafx.h"
- #include "ctrolescrns.h"
- #include "RankContactsDlg.h"
- static const int COLUMN_ZERO = 0;
- static const int COLUMN_ONE = 1;
- static const int COLUMN_TWO = 2;
- static const int COLUMN_THREE = 3;
- static const int COLUMN_FOUR = 4;
- static const int COLUMN_FIVE = 5;
- /////////////////////////////////////////////////////////////////////////////
- // CRankContactsDlg dialog
- CRankContactsDlg::CRankContactsDlg(vector<CPrimaryContactData*>* vRankContact, CAssignmentList* pAssignList, CWnd* pParent)
- : CDialog(CRankContactsDlg::IDD, pParent), m_vRankContact(vRankContact), m_pAssignList(pAssignList), bDragValue(false), m_lCount(0), m_iFromIndex(0)
- {
- //{{AFX_DATA_INIT(CRankContactsDlg)
- m_btnFootPanel.Add(&m_btnOkCtrl);
- m_btnFootPanel.Add(&m_btnCancelCtrl);
- //}}AFX_DATA_INIT
- }
- void CRankContactsDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CRankContactsDlg)
- DDX_Control(pDX, IDC_BUTTON_RANK_OK, m_btnOkCtrl);
- DDX_Control(pDX, IDC_BUTTON_RANK_CANCEL, m_btnCancelCtrl);
- DDX_Control(pDX, IDC_PRIMARY_CONTACTS, m_treePrimaryContacts);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CRankContactsDlg, CDialog)
- //{{AFX_MSG_MAP(CRankContactsDlg)
- ON_BN_CLICKED(IDC_BUTTON_RANK_OK, OnButtonOk)
- ON_BN_CLICKED(IDC_BUTTON_RANK_CANCEL, OnButtonCancel)
- ON_SFTTREEN_LBUTTONDOWN_CELL(IDC_PRIMARY_CONTACTS, OnItemClickRankDlg)
- ON_SFTTREEN_ENDDRAG(IDC_PRIMARY_CONTACTS, AutoEndDraggingResult)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- BEGIN_EVENTSINK_MAP(CRankContactsDlg, CDialog)
- END_EVENTSINK_MAP()
- BOOL CRankContactsDlg::OnInitDialog()
- {
- //CDialog::OnInitDialog();
- //Create SftTree Control
- if (CreateTreeControl() == -1)
- {
- return FALSE;
- }
- LoadPrimaryContacts();
- return TRUE;
- }
- void CRankContactsDlg::OnButtonOk()
- {
- m_vRankContact->clear();
- CAssignment* pAssign = NULL;
- CPrimaryContactData* pPrimaryContactData = NULL;
- short rankValue = 0;
- for (int i = 0; i < m_lCount; i++)
- {
- rankValue++;
- pPrimaryContactData = (CPrimaryContactData*)m_treePrimaryContacts.GetItemData(i);
- if (pPrimaryContactData != NULL)
- {
- pPrimaryContactData->m_shPrimaryContactRank = rankValue;
- m_vRankContact->push_back(pPrimaryContactData);
- pAssign = (CAssignment*)(m_pAssignList->GetAt(m_pAssignList->GetPosition(pPrimaryContactData->m_dProtRoleID)));
- if (pAssign != NULL && pAssign->m_nPrimaryContact == 1)
- {
- pAssign->m_shPrimaryContactRank = rankValue;
- pAssign->m_action_ind = changeRecord;
- }
- }
- }
- EndDialog(0);
- }
- void CRankContactsDlg::LoadPrimaryContacts()
- {
- int index = 0;
- CAssignment* pAssign = NULL;
- m_treePrimaryContacts.ResetContent();
- for (vector<CPrimaryContactData*>::const_iterator iter = m_vRankContact->begin(); iter != m_vRankContact->end(); ++iter)
- {
- try
- {
- pAssign = (CAssignment*)(m_pAssignList->GetAt(m_pAssignList->GetPosition((*iter)->m_dProtRoleID)));
- if (pAssign != NULL && pAssign->m_prot_role_id != 0)
- {
- if (pAssign->m_nPrimaryContact != 1)
- continue;
- //SftTree's function AddItem() accepts string variable : LPCTSTR. Hence, passed the "" to avoid creation of additional variable.
- index = m_treePrimaryContacts.AddString("");
- AddNewRowPC(iter, index, pAssign);
- }
- }
- catch (exception &e)
- {
- MsgWrite(MSG_DEFAULT, eMsgLog_Commit, _T("CRankContactsDlg::LoadPrimaryContacts()"),
- eMsgLvl_Error, _T("LoadPrimaryContacts() failed to load Primary Contacts"));
- }
- }
- m_lCount = m_treePrimaryContacts.GetCount();
- OptimizeRankContactsColumns();
- }
- void CRankContactsDlg::AddNewRowPC(const vector<CPrimaryContactData*>::const_iterator iter, const int index, CAssignment* pAssign)
- {
- m_treePrimaryContacts.SetItemData(index, (SFTTREE_DWORD_PTR)(*iter));
- m_treePrimaryContacts.SetText(index, COLUMN_ZERO, pAssign->m_person_name);
- m_treePrimaryContacts.SetText(index, COLUMN_ONE, pAssign->m_role->display);
- m_treePrimaryContacts.SetText(index, COLUMN_TWO, pAssign->m_org_name);
- m_treePrimaryContacts.SetText(index, COLUMN_THREE, (*iter)->m_sPhoneNum);
- m_treePrimaryContacts.SetText(index, COLUMN_FOUR, (*iter)->m_sPagerNum);
- m_treePrimaryContacts.SetText(index, COLUMN_FIVE, (*iter)->m_sEmailAddr);
- }
- void CRankContactsDlg::OnButtonCancel()
- {
- vector<CPrimaryContactData*>::const_iterator iter = m_vRankContact->begin();
- while (iter != m_vRankContact->end())
- {
- //Since, the element was deleted, const_iterator needs to be re-assigned by the return type of vector's erase()- function
- (*iter)->m_shPrimaryContactRank == 0 ? iter = m_vRankContact->erase(iter) : iter++;
- }
- EndDialog(0);
- }
- void CRankContactsDlg::InternationalizeColumnsRankContacts(CString sColPCHeader[])
- {
- sColPCHeader[0].LoadString(IDS_COL_HEADER_CONTACT_NAME);
- m_treePrimaryContacts.SetHeader(COLUMN_ZERO, sColPCHeader[0]);
- sColPCHeader[1].LoadString(IDS_COL_HEADER_ROLE);
- m_treePrimaryContacts.SetHeader(COLUMN_ONE, sColPCHeader[1]);
- sColPCHeader[2].LoadString(IDS_COL_HEADER_ORG);
- m_treePrimaryContacts.SetHeader(COLUMN_TWO, sColPCHeader[2]);
- sColPCHeader[3].LoadString(IDS_COL_HEADER_PHONE);
- m_treePrimaryContacts.SetHeader(COLUMN_THREE, sColPCHeader[3]);
- sColPCHeader[4].LoadString(IDS_COL_HEADER_PAGER);
- m_treePrimaryContacts.SetHeader(COLUMN_FOUR, sColPCHeader[4]);
- sColPCHeader[5].LoadString(IDS_COL_HEADER_EMAIL);
- m_treePrimaryContacts.SetHeader(COLUMN_FIVE, sColPCHeader[5]);
- //To set Row/Col header
- CString sRowColHeader;
- sRowColHeader.LoadString(IDS_ROWCOL_HEADER_RANK);
- m_treePrimaryContacts.SetRowColHeaderText(sRowColHeader);
- }
- int CRankContactsDlg::CreateTreeControl()
- {
- if (!m_treePrimaryContacts.CreateEx(WS_EX_CLIENTEDGE,
- SFTTREESTYLE_NOTIFY | SFTTREE_TREELINE_SOLID | SFTTREESTYLE_SCROLL | SFTTREESTYLE_DRAGDROP |
- WS_HSCROLL | WS_VSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD,
- GetRectForTreeCtrl(),
- this,
- IDC_PRIMARY_CONTACTS))
- {
- //Add to log file
- //::AfxMessageBox("CTypeCommitteeDlg::OnInitDialog - Could not create sfttree");
- return -1;
- }
- m_treePrimaryContacts.ResetContent();
- //Set Properties
- m_treePrimaryContacts.SetShow3D(FALSE);
- m_treePrimaryContacts.SetShowButton0(FALSE);
- m_treePrimaryContacts.SetShowButtons(TRUE);
- m_treePrimaryContacts.SetShowGrid(TRUE);
- m_treePrimaryContacts.SetGridStyle(SFTTREE_GRID_BOTH);
- m_treePrimaryContacts.SetFlyby(FALSE);
- m_treePrimaryContacts.SetShowTruncated(TRUE);
- m_treePrimaryContacts.SetToolTipAlways(FALSE);
- m_treePrimaryContacts.SetItemPictureAlign(FALSE);
- m_treePrimaryContacts.SetNoSelection(FALSE);
- m_treePrimaryContacts.SetItemLines(1);
- //Set Left Button Only could not be found
- m_treePrimaryContacts.SetCalcVisibleOnly(FALSE);
- m_treePrimaryContacts.SetCalcLimit(0);
- m_treePrimaryContacts.EnableWindow(TRUE);
- m_treePrimaryContacts.SetSelectionStyle(SFTTREE_SELECTION_ALL | SFTTREE_SELECTION_OUTLINE);
- m_treePrimaryContacts.SetNoFocusStyle(SFTTREE_NOFOCUS_FRAME);
- m_treePrimaryContacts.SetScrollTips(FALSE);
- m_treePrimaryContacts.SetShowFocus(TRUE);
- m_treePrimaryContacts.SetCharSearchMode(SFTTREE_CHARSEARCH_ONECHAR);
- const int nCols = 6;
- CString sArrColumnHeaders[nCols];
- InternationalizeColumnsRankContacts(sArrColumnHeaders);
- SFTTREE_COLUMN_EX aCol[nCols] = {
- { //Column - 1
- 0,0, //reserved
- 100, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_CENTER, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[0], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- },
- { //Column - 2
- 0,0, //reserved
- 120, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_LEFT, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[1], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- },
- { //Column - 3
- 0,0, //reserved
- 100, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_LEFT, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[2], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- },
- { //Column - 4
- 0,0, //reserved
- 80, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_LEFT, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[3], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- },
- { //Column - 5
- 0,0, //reserved
- 80, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_LEFT, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[4], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- },
- { //Column - 6
- 0,0, //reserved
- 120, //width
- ES_LEFT | SFTTREE_TOOLTIP, //Cell Alignment
- ES_LEFT | SFTTREE_BMP_LEFT, //Header style
- (LPTSTR)(LPCTSTR)sArrColumnHeaders[5], //Column Header text
- NULL, NULL, //Reserved
- SFTTREE_BMP_LEFT //Picture Alignment
- }
- };
- m_treePrimaryContacts.SetColumns(nCols, aCol);
- m_treePrimaryContacts.SetShowHeader(TRUE);
- m_treePrimaryContacts.SetOpenEnded(TRUE);
- m_treePrimaryContacts.SetResizeHeader(TRUE);
- m_treePrimaryContacts.SetCrossColumnResize(TRUE);
- m_treePrimaryContacts.SetShowHeaderButtons(TRUE);
- m_treePrimaryContacts.SetReorderColumns(FALSE);
- m_treePrimaryContacts.SetMultilineHeader(FALSE);
- m_treePrimaryContacts.SetRowColHeaderStyle(ES_CENTER | SFTTREE_HEADER_UP);
- m_treePrimaryContacts.SetRowColHeaderPictureStyle(SFTTREE_BMP_LEFT);
- m_treePrimaryContacts.SetRowColHeaderButton(FALSE);
- m_treePrimaryContacts.SetDragType(SFTTREE_DRAG_PIXELIMM);
- m_treePrimaryContacts.SetDragBitmaps(FALSE);
- m_treePrimaryContacts.SetDropHighlightStyle(SFTTREE_DROPHIGHLIGHT_ONTOP);
- m_treePrimaryContacts.SetShowRowHeader(SFTTREE_ROWSTYLE_TITLECOUNT1); //To start the count of row's from 1
- m_treePrimaryContacts.SetRowHeaderStyle(ES_CENTER | SFTTREE_HEADER_UP);
- m_treePrimaryContacts.SetRowHeaderWidth(40);
- font.CreateFont(
- 8, // nHeight
- 0, // nWidth
- 0, // nEscapement
- 0, // nOrientation
- FW_NORMAL, // nWeight
- FALSE, // bItalic
- FALSE, // bUnderline
- 0, // cStrikeOut
- ANSI_CHARSET, // nCharSet
- OUT_DEFAULT_PRECIS, // nOutPrecision
- CLIP_DEFAULT_PRECIS, // nClipPrecision
- DEFAULT_QUALITY, // nQuality
- DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
- _T("MS Sans Serif")); // lpszFacename
- m_treePrimaryContacts.SetRowHeaderFont(&font);
- m_treePrimaryContacts.SetHeaderFont(&font);
- return TRUE;
- }
- RECT CRankContactsDlg::GetRectForTreeCtrl()
- {
- RECT dlgRect;
- GetWindowRect(&dlgRect);
- CWnd* pBtnCancel = GetDlgItem(IDC_BUTTON_RANK_CANCEL);
- RECT btnCancelRect;
- pBtnCancel->GetWindowRect(&btnCancelRect);
- CWnd* pStaticTxt = GetDlgItem(IDS_RANK_STATIC);
- RECT btnTextRect;
- pStaticTxt->GetWindowRect(&btnTextRect);
- int iGap = (btnTextRect.left - dlgRect.left);
- RECT treeRect;
- treeRect.left = btnTextRect.left;
- treeRect.top = btnTextRect.bottom + iGap;
- treeRect.right = btnCancelRect.right;
- treeRect.bottom = btnCancelRect.top - iGap;
- ScreenToClient(&treeRect);
- return treeRect;
- }
- void CRankContactsDlg::OnItemClickRankDlg()
- {
- if (!bDragValue)
- {
- // Get the DragBegin Index of SftTree-row
- m_iFromIndex = m_treePrimaryContacts.GetCaretIndex();
- bDragValue = true;
- }
- }
- void CRankContactsDlg::AutoEndDraggingResult()
- {
- // Get the DragEnd Index of SftTree & move the rows
- int index = m_treePrimaryContacts.GetDropHighlight();
- if (m_iFromIndex <= index)
- //For beginIndex less than endIndex of SftTree
- m_treePrimaryContacts.MoveItems(m_iFromIndex, 1, index == m_lCount - 1 ? -1 : index + 1);
- else
- //For beginIndex greater than endIndex of SftTree
- m_treePrimaryContacts.MoveItems(m_iFromIndex, 1, index);
- m_treePrimaryContacts.SetDropHighlight(-1, true);
- m_treePrimaryContacts.SetCaretIndex(index);
- //Setting the 'bDragValue = false' to re-hit the OnItemClickRankDlg() to fetch the latest m_iFromIndex
- bDragValue = false;
- }
- void CRankContactsDlg::OptimizeRankContactsColumns()
- {
- int nColCount = m_treePrimaryContacts.GetColumns();
- for (int nColIndex = 0; nColIndex < nColCount; nColIndex++)
- {
- m_treePrimaryContacts.MakeColumnOptimal(nColIndex);
- }
- // Should be used at the very end to avoid re-calculation of the individual elements of SftTree | Performance-intensive
- m_treePrimaryContacts.RecalcHorizontalExtent();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement