PagesListCtrl.cpp
Upload User: zhout2004
Upload Date: 2007-01-02
Package Size: 218k
Code Size: 5k
Development Platform:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/8/98 5:46:48 PM
  5.   Comments: PagesListCtrl.cpp : implementation file
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "XFloorWnd.h"
  9. #include "PagesListCtrl.h"
  10. #include "XFloorWndPpg.h"
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CPagesListCtrl
  18. // Function name : CPagesListCtrl::CPagesListCtrl
  19. // Description     : Default constuctor
  20. // Return type : 
  21. CPagesListCtrl::CPagesListCtrl()
  22. {
  23. m_nNamePageCol = -1;
  24. m_nUserDataCol = NULL;
  25. m_nAutoAdd = -1;
  26. }
  27. // Function name : CPagesListCtrl::~CPagesListCtrl
  28. // Description     : virtual destructor
  29. // Return type : 
  30. CPagesListCtrl::~CPagesListCtrl()
  31. {
  32. }
  33. BEGIN_MESSAGE_MAP(CPagesListCtrl, CListCtrl)
  34. //{{AFX_MSG_MAP(CPagesListCtrl)
  35. ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndlabeledit)
  36. ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, OnBeginlabeledit)
  37. ON_NOTIFY_REFLECT(LVN_KEYDOWN, OnKeydown)
  38. //}}AFX_MSG_MAP
  39. END_MESSAGE_MAP()
  40. /////////////////////////////////////////////////////////////////////////////
  41. // CPagesListCtrl message handlers
  42. // Function name : CPagesListCtrl::Init
  43. // Description     : Call this once for init all variables
  44. // Return type : void 
  45. void CPagesListCtrl::Init()
  46. {
  47. ListView_SetExtendedListViewStyle(m_hWnd, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  48. m_nNamePageCol = InsertColumn(0, _T("Name"), LVCFMT_LEFT, 168);
  49. m_nUserDataCol = InsertColumn(1, _T("UserData"), LVCFMT_LEFT, 168);
  50. }
  51. // Function name : CPagesListCtrl::OnEndlabeledit
  52. // Description     : End the edit item. Notify all that needs
  53. // Return type : void 
  54. // Argument         : NMHDR* pNMHDR
  55. // Argument         : LRESULT* pResult
  56. void CPagesListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
  57. {
  58. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  59. CString item;
  60. GetEditControl()->GetWindowText(item);
  61. CString sItem, sUser;
  62. AfxExtractSubString(sItem, item, 0, TCHAR('\'));
  63. AfxExtractSubString(sUser, item, 1, TCHAR('\'));
  64. CString sUserX;
  65. sUserX.Format(_T("%i"),atoi((LPCTSTR)sUser));
  66. if (sUserX != sUser)
  67. sUser.Empty();
  68. SetItemText(pDispInfo->item.iItem,m_nNamePageCol, sItem);
  69. SetItemText(pDispInfo->item.iItem,m_nUserDataCol, sUser);
  70. if (pDispInfo->item.iItem == m_nAutoAdd)
  71. {
  72. if (!sItem.IsEmpty())
  73. m_nAutoAdd = InsertItem(GetItemCount(), _T(""));
  74. }
  75. else
  76. if (sItem.IsEmpty())
  77. {
  78. DeleteItem(m_nAutoAdd);
  79. m_nAutoAdd = pDispInfo->item.iItem;
  80. }
  81. NParent();
  82. *pResult = 0;
  83. }
  84. // Function name : CPagesListCtrl::OnBeginlabeledit
  85. // Description     : begin the edit item
  86. // Return type : void 
  87. // Argument         : NMHDR* pNMHDR
  88. // Argument         : LRESULT* pResult
  89. void CPagesListCtrl::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
  90. {
  91. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  92. if (GetItemText(pDispInfo->item.iItem,pDispInfo->item.iSubItem).IsEmpty())
  93. m_nAutoAdd = pDispInfo->item.iItem;
  94. else
  95. if (!GetItemText(pDispInfo->item.iItem,m_nUserDataCol).IsEmpty())
  96. GetEditControl()->SetWindowText(GetItemText(pDispInfo->item.iItem,m_nNamePageCol) + _T("\") + GetItemText(pDispInfo->item.iItem,m_nUserDataCol));
  97. *pResult = 0;
  98. }
  99. // Function name : CPagesListCtrl::NParent
  100. // Description     : Notify the OLE page, that something is happen
  101. // Return type : void 
  102. void CPagesListCtrl::NParent()
  103. {
  104. if (CXFloorWndPropPage* pOLEPage = (CXFloorWndPropPage*)GetParent())
  105. {
  106. pOLEPage->ConstructPagesAsString();
  107. pOLEPage->SetModifiedFlag();
  108. }
  109. }
  110. // Function name : CPagesListCtrl::Fill
  111. // Description     : Fill list with string lpszPages. Pag1nPag2...
  112. // Return type : void 
  113. // Argument         : LPCTSTR lpszPages
  114. void CPagesListCtrl::Fill(LPCTSTR lpszPages)
  115. {
  116. CString sItem, sName, sUser;
  117. int i = 0;
  118. do
  119. {
  120. AfxExtractSubString(sItem, lpszPages, i++, _cPagesSeparator);
  121. AfxExtractSubString(sName, sItem, 0, TCHAR('\'));
  122. AfxExtractSubString(sUser, sItem, 1, TCHAR('\'));
  123. if (!sName.IsEmpty())
  124. {
  125. int nItem = InsertItem(GetItemCount(), _T(""));
  126. SetItemText(nItem,m_nNamePageCol, sName);
  127. SetItemText(nItem,m_nUserDataCol, sUser);
  128. }
  129. } while (!sName.IsEmpty());
  130. InsertItem(GetItemCount(), _T(""));
  131. }
  132. // Function name : CPagesListCtrl::OnKeydown
  133. // Description     : If some keys is pressed treat separatly
  134. // Return type : void 
  135. // Argument         : NMHDR* pNMHDR
  136. // Argument         : LRESULT* pResult
  137. void CPagesListCtrl::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) 
  138. {
  139. LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
  140. int nFocused = GetNextItem(-1, LVNI_FOCUSED);
  141. if (nFocused >= 0)
  142. switch (pLVKeyDow->wVKey)
  143. {
  144. case VK_F2:
  145. case VK_F4:
  146. {
  147. // Edit only focused item
  148. EditLabel(nFocused);
  149. break;
  150. }
  151. case VK_DELETE:
  152. {
  153. // delete all selected items
  154. int nSelected = NULL;
  155. int nextItem = -1;
  156. while ((nSelected = GetNextItem(nextItem,LVNI_SELECTED))>=0)
  157. if (GetItemText(nSelected, m_nNamePageCol).IsEmpty())
  158. {
  159. m_nAutoAdd = nSelected;
  160. nextItem = m_nAutoAdd + 1;
  161. }
  162. else
  163. DeleteItem(nSelected);
  164. NParent();
  165. break;
  166. }
  167. }
  168. *pResult = 0;
  169. }