GetObjectsDlg.cpp
Upload User: kairuinn
Upload Date: 2009-02-07
Package Size: 2922k
Code Size: 6k
Category:

Graph program

Development Platform:

Visual C++

  1. // GetObjectsDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..//..//Solidgraph.h"
  5. #include "GetObjectsDlg.h"
  6. #include ".getobjectsdlg.h"
  7. // CGetObjectsDlg dialog
  8. IMPLEMENT_DYNAMIC(CGetObjectsDlg, CDialog)
  9. CGetObjectsDlg::CGetObjectsDlg(CWnd* pParent /*=NULL*/)
  10. : CDialog(CGetObjectsDlg::IDD, pParent)
  11. {
  12. m_fill_function = NULL;
  13. m_enable_history = NULL;
  14. m_was_diasabled = false;
  15. }
  16. CGetObjectsDlg::~CGetObjectsDlg()
  17. {
  18. m_objcts.clear();
  19. if (m_enable_history)
  20. delete[] m_enable_history;
  21. }
  22. void CGetObjectsDlg::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. DDX_Control(pDX, IDC_GET_OBJECTS_LIST, m_list);
  26. }
  27. BEGIN_MESSAGE_MAP(CGetObjectsDlg, CDialog)
  28. ON_WM_SIZE()
  29. ON_WM_ERASEBKGND()
  30. ON_NOTIFY(LVN_GETDISPINFO, IDC_GET_OBJECTS_LIST, OnLvnGetdispinfoGetObjectsList)
  31. ON_NOTIFY(NM_CLICK, IDC_GET_OBJECTS_LIST, OnNMClickGetObjectsList)
  32. ON_BN_CLICKED(IDC_GET_OBJECTS_FINISH_BUTTON, OnBnClickedGetObjectsFinishButton)
  33. END_MESSAGE_MAP()
  34. // CGetObjectsDlg message handlers
  35. void CGetObjectsDlg::OnOK()
  36. {
  37. // TODO: Add your specialized code here and/or call the base class
  38. //CDialog::OnOK();
  39. }
  40. void CGetObjectsDlg::OnCancel()
  41. {
  42. // TODO: Add your specialized code here and/or call the base class
  43. //CDialog::OnCancel();
  44. }
  45. IBaseInterfaceOfGetDialogs::DLG_TYPE CGetObjectsDlg::GetType()
  46. {
  47. return IBaseInterfaceOfGetDialogs::GET_OBJECTS_DLG;
  48. }
  49. CWnd*   CGetObjectsDlg::GetWindow()
  50. {
  51. return this;
  52. }
  53. void    CGetObjectsDlg::EnableControls(bool enbl)
  54. {
  55. if (m_enable_history==NULL)
  56. m_enable_history = new bool[2];
  57. if (enbl)
  58. {
  59. GetDlgItem(IDC_GET_OBJECTS_LIST)->EnableWindow(m_enable_history[0]);
  60. GetDlgItem(IDC_GET_OBJECTS_FINISH_BUTTON)->EnableWindow(m_enable_history[1]);
  61. m_was_diasabled = false;
  62. }
  63. else
  64. {
  65. if (!m_was_diasabled)
  66. {
  67. m_enable_history[0] = GetDlgItem(IDC_GET_OBJECTS_LIST)->IsWindowEnabled()!=0;
  68. m_enable_history[1] = GetDlgItem(IDC_GET_OBJECTS_FINISH_BUTTON)->IsWindowEnabled()!=0;
  69. }
  70. GetDlgItem(IDC_GET_OBJECTS_LIST)->EnableWindow(FALSE);
  71. GetDlgItem(IDC_GET_OBJECTS_FINISH_BUTTON)->EnableWindow(FALSE);
  72. m_was_diasabled = true;
  73. }
  74. Invalidate();
  75. }
  76. void CGetObjectsDlg::RemoveAllObjects()
  77. {
  78. m_list.DeleteAllItems();
  79. m_list.SetItemCount(0);
  80. m_objcts.clear();
  81. }
  82. void CGetObjectsDlg::SetMultiselectMode(bool msm)
  83. {
  84. m_list.SetMultiSelectMode(msm);
  85. }
  86. void CGetObjectsDlg::FillList(LPFUNC_FILL_OBJECTS_LIST isAdd)
  87. {
  88. if (isAdd)
  89. m_fill_function = isAdd;
  90. /*m_objcts.clear();
  91. m_list.SetItemCount(0);*/
  92. sgCObject*  curObj = sgGetScene()->GetObjectsList()->GetHead();
  93. while (curObj) 
  94. {
  95. if (!m_fill_function ||
  96. (m_fill_function && m_fill_function(curObj)))
  97. {
  98. OBJCTS tmpS;
  99. tmpS.objc = curObj;
  100. tmpS.obName = CString(curObj->GetName());
  101. m_objcts.push_back(tmpS);
  102. }
  103. curObj = sgGetScene()->GetObjectsList()->GetNext(curObj);
  104. }
  105. m_list.SetItemCount(m_objcts.size());
  106. }
  107. void  CGetObjectsDlg::AddObject(sgCObject* obj, bool sel)
  108. {
  109. OBJCTS tmpS;
  110. tmpS.objc = obj;
  111. tmpS.obName = CString(obj->GetName());
  112. m_objcts.push_back(tmpS);
  113. m_list.SetItemCount(m_objcts.size());
  114. if (sel)
  115. m_list.SetItemState(m_objcts.size()-1, LVIS_SELECTED, LVIS_SELECTED);
  116. else
  117. m_list.SetItemState(m_objcts.size()-1, 0, LVIS_SELECTED);
  118. }
  119. void  CGetObjectsDlg::RemoveObject(sgCObject* obj)
  120. {
  121. size_t sz = m_objcts.size();
  122. for (size_t i=0;i<sz;i++)
  123. if (m_objcts[i].objc==obj)
  124. {
  125. m_objcts.erase(m_objcts.begin()+i);
  126. m_list.SetItemCount(m_objcts.size());
  127. return;
  128. }
  129. }
  130. void  CGetObjectsDlg::SelectObject(sgCObject* obj, bool sel)
  131. {
  132. size_t sz = m_objcts.size();
  133. if (obj==NULL)
  134. {
  135. for (size_t i=0;i<sz;i++)
  136. m_list.SetItemState(i, 0, LVIS_SELECTED);
  137. return;
  138. }
  139. for (size_t i=0;i<sz;i++)
  140. if (m_objcts[i].objc==obj)
  141. {
  142. if (sel)
  143. m_list.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  144. else
  145. m_list.SetItemState(i, 0, LVIS_SELECTED);
  146. return;
  147. }
  148. }
  149. BOOL CGetObjectsDlg::OnInitDialog()
  150. {
  151. __super::OnInitDialog();
  152. m_list.InsertColumn(0,"");
  153. CRect rct;
  154. m_list.GetWindowRect(rct);
  155. m_list.SetColumnWidth(0,rct.Width());
  156. m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
  157. m_list.SetMultiSelectMode(true);
  158. return TRUE;  // return TRUE unless you set the focus to a control
  159. // EXCEPTION: OCX Property Pages should return FALSE
  160. }
  161. void CGetObjectsDlg::OnSize(UINT nType, int cx, int cy)
  162. {
  163. __super::OnSize(nType, cx, cy);
  164. if (::IsWindow(m_list.m_hWnd))
  165. {
  166. CRect rrr;
  167. m_list.GetWindowRect(rrr);
  168. ScreenToClient(rrr);
  169. m_list.MoveWindow(rrr.left,rrr.top,
  170. cx-2*rrr.left,rrr.Height());
  171. m_list.GetWindowRect(rrr);
  172. m_list.SetColumnWidth(0,rrr.Width()-5);
  173. }
  174. }
  175. BOOL CGetObjectsDlg::OnEraseBkgnd(CDC* pDC)
  176. {
  177. // TODO: Add your message handler code here and/or call default
  178. return  TRUE;//__super::OnEraseBkgnd(pDC);
  179. }
  180. void CGetObjectsDlg::OnLvnGetdispinfoGetObjectsList(NMHDR *pNMHDR, LRESULT *pResult)
  181. {
  182. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  183. LV_ITEM* pItem= &(pDispInfo)->item;
  184. DWORD n = pItem->iItem;
  185. if (n<0 || n>=m_objcts.size())
  186. return;
  187. if (pItem->mask & LVIF_TEXT) // 蝠遽箦蝰