GroupTree.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. // GroupTree.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "cp_main.h"
  5. #include "GroupTree.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CGroupTree
  13. CGroupTree::CGroupTree()
  14. {
  15. m_bHide = true;
  16. m_selectedFolderID = -1;
  17. m_bSendAllready = false;
  18. }
  19. CGroupTree::~CGroupTree()
  20. {
  21. }
  22. BEGIN_MESSAGE_MAP(CGroupTree, CTreeCtrl)
  23. //{{AFX_MSG_MAP(CGroupTree)
  24. ON_WM_CREATE()
  25. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
  26. ON_WM_KILLFOCUS()
  27. ON_WM_ACTIVATE()
  28. ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
  29. ON_NOTIFY_REFLECT(TVN_KEYDOWN, OnKeydown)
  30. //}}AFX_MSG_MAP
  31. END_MESSAGE_MAP()
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CGroupTree message handlers
  34. BOOL CGroupTree::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
  35. {
  36. // TODO: Add your specialized code here and/or call the base class
  37. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  38. }
  39. int CGroupTree::OnCreate(LPCREATESTRUCT lpCreateStruct)
  40. {
  41. if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
  42. return -1;
  43. CImageList iml;
  44. iml.Create(18, 16, ILC_COLOR8, 0, 1);
  45. m_bmClosedFolder.LoadBitmap(IDB_CLOSED_FOLDER);
  46. iml.Add(&m_bmClosedFolder, RGB(255, 0, 0));
  47. m_bmOpenFolder.LoadBitmap(IDB_OPEN_FOLDER);
  48. iml.Add(&m_bmOpenFolder, RGB(255, 0, 0));
  49. SetImageList(&iml, TVSIL_NORMAL);
  50. iml.Detach();
  51. return 0;
  52. }
  53. void CGroupTree::FillTree()
  54. {
  55. DeleteAllItems();
  56. m_bSendAllready = false;
  57. HTREEITEM hItem = InsertItem(_T("-No Group-"), TVI_ROOT);
  58. SetItemData(hItem, -1);
  59. SetItemState(hItem, TVIS_EXPANDED, TVIS_EXPANDED);
  60. if(m_selectedFolderID < 0)
  61. SelectItem(hItem);
  62. FillTree(-1, hItem);
  63. }
  64. void CGroupTree::FillTree(int parentID, HTREEITEM hParent)
  65. {
  66. try
  67. {
  68. CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID, mText FROM Main WHERE bIsGroup = 1 AND lParentID = %d"), parentID);
  69. if(q.eof() == false)
  70. {
  71. HTREEITEM hItem;
  72. while(!q.eof())
  73. {
  74. if(q.getIntField(_T("lID")) == m_selectedFolderID)
  75. {
  76. hItem = InsertItem(q.getStringField(_T("mText")), 1, 1, hParent);
  77. SelectItem(hItem);
  78. }
  79. else
  80. {
  81. hItem = InsertItem(q.getStringField(_T("mText")), 0, 0, hParent);
  82. }
  83. SetItemData(hItem, q.getIntField(_T("lID")));
  84. FillTree(q.getIntField(_T("lID")), hItem);
  85. q.nextRow();
  86. }
  87. }
  88. }
  89. CATCH_SQLITE_EXCEPTION
  90. }
  91. void CGroupTree::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
  92. {
  93. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  94. // TODO: Add your control notification handler code here
  95. // if(m_bHide == true)
  96. // {
  97. // ::SendMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, GetItemData(pNMTreeView->itemNew.hItem), 0);
  98. // }
  99. *pResult = 0;
  100. }
  101. void CGroupTree::OnKillFocus(CWnd* pNewWnd)
  102. {
  103. CTreeCtrl::OnKillFocus(pNewWnd);
  104. }
  105. void CGroupTree::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
  106. {
  107. CTreeCtrl::OnActivate(nState, pWndOther, bMinimized);
  108. if(m_bHide)
  109. {
  110. if (nState == WA_INACTIVE)
  111. {
  112. SendToParent(-1);
  113. }
  114. }
  115. }
  116. void CGroupTree::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
  117. {
  118. HTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_CARET);
  119. if(hItem)
  120. SendToParent((int)GetItemData(hItem));
  121. *pResult = 1;
  122. }
  123. int CGroupTree::GetSelectedTree()
  124. {
  125. HTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_CARET);
  126. if(hItem)
  127. return (int)GetItemData(hItem);
  128. return -1;
  129. }
  130. void CGroupTree::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult)
  131. {
  132. TV_KEYDOWN* pTVKeyDown = (TV_KEYDOWN*)pNMHDR;
  133. switch(pTVKeyDown->wVKey)
  134. {
  135. case VK_RETURN:
  136. {
  137. HTREEITEM hItem = GetNextItem(TVI_ROOT, TVGN_CARET);
  138. if(hItem)
  139. SendToParent((int)GetItemData(hItem));
  140. break;
  141. }
  142. case VK_ESCAPE:
  143. {
  144. SendToParent(-1);
  145. break;
  146. }
  147. }
  148. *pResult = 1;
  149. }
  150. void CGroupTree::SendToParent(int parentId)
  151. {
  152. if(m_bSendAllready == false)
  153. {
  154. m_bSendAllready = true;
  155. ::PostMessage(m_NotificationWnd, NM_GROUP_TREE_MESSAGE, parentId, 0);
  156. }
  157. }
  158. bool CGroupTree::AddNode(CString csText, int id)
  159. {
  160. HTREEITEM hItem;
  161. HTREEITEM hParent = GetNextItem(TVI_ROOT, TVGN_CARET);
  162. if(hParent == NULL)
  163. return false;
  164. hItem = InsertItem(csText, 1, 1, hParent);
  165. SelectItem(hItem);
  166. SetItemData(hItem, id);
  167. return true;
  168. }