TreeForGrpSend.cpp
上传用户:maryhy001
上传日期:2007-05-02
资源大小:2317k
文件大小:9k
源码类别:

网格计算

开发平台:

Visual C++

  1. // TreeForGrpSend.cpp : implementation file
  2. #include "stdafx.h"
  3. #include "trfAgent.h"
  4. #include "variantex.h"
  5. #include "TreeForGrpSend.h"
  6. /////////////////////////////////////////////////////////////////////////////
  7. CTreeForGrpSend::CTreeForGrpSend()
  8. {
  9. }
  10. CTreeForGrpSend::~CTreeForGrpSend()
  11. {
  12. }
  13. BEGIN_MESSAGE_MAP(CTreeForGrpSend, CTreeCtrl)
  14. //{{AFX_MSG_MAP(CTreeForGrpSend)
  15. ON_WM_CREATE()
  16. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
  17. //}}AFX_MSG_MAP
  18. END_MESSAGE_MAP()
  19. //////////////////////////////////////////////////////////////////////////
  20. int CTreeForGrpSend::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  21. {
  22. lpCreateStruct->style |= TVS_SHOWSELALWAYS;
  23. lpCreateStruct->style |= TVS_DISABLEDRAGDROP;
  24. if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
  25. return -1;
  26. if(!this->m_imgTree.Create(IDB_WORKSPACE, 16, 3, RGB(255, 255, 255)))
  27. {
  28. TRACE0("Failed to create the m_imgTree for historyn");
  29. return -1;
  30. }
  31. this->SetImageList(&m_imgTree, TVSIL_NORMAL);
  32. return 0;
  33. }
  34. //add group node.
  35. BOOL CTreeForGrpSend::AddGroup(const char *lpszGroupName)
  36. {
  37. CGuiRecordSet rs;
  38. CVariantEx   varex;
  39. char sql[MAX_SQL_SIZE];
  40. try
  41. {
  42. int groupid = 1;
  43. //////////////////////////////////////////////////////////////////////////
  44. //get new group id.
  45. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GRPSND_GETCNTOFSNDGRP);
  46. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  47. {
  48. return FALSE;
  49. }
  50. rs.GetCollect("SNDGRPCNT", varex.get_variant_t());
  51. rs.Close();
  52. if(varex.AsInteger() != 0)
  53. {
  54. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GRPSND_GETNEXTSNDGRPID);
  55. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  56. {
  57. return FALSE;
  58. }
  59. rs.GetCollect("NEXTID", varex.get_variant_t());
  60. rs.Close();
  61. groupid = varex.AsInteger();
  62. }
  63. //////////////////////////////////////////////////////////////////////////
  64. //insert group record into database.
  65. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GRPSND_ADDSNDGRP, groupid, lpszGroupName);
  66. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  67. {
  68. return FALSE;
  69. }
  70. rs.Close();
  71. //////////////////////////////////////////////////////////////////////////
  72. HTREEITEM hitem = this->InsertItem(lpszGroupName, 0, 0);
  73. this->SetItemData(hitem, MAKELONG(groupid, NT_DEPART));
  74. this->SelectItem(hitem);
  75. //////////////////////////////////////////////////////////////////////////
  76. return TRUE;
  77. }
  78. catch (...) 
  79. {
  80. return FALSE;
  81. }
  82. }
  83. //delete group node.
  84. BOOL CTreeForGrpSend::DelGroup(const int nGroupId)
  85. {
  86. CGuiRecordSet rs;
  87. char sql[MAX_SQL_SIZE];
  88. try
  89. {
  90. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GRPSND_DELSNDGRP, nGroupId);
  91. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  92. {
  93. return FALSE;
  94. }
  95. rs.Close();
  96. return TRUE;
  97. }
  98. catch (...)
  99. {
  100. return FALSE;
  101. }
  102. }
  103. //rename group node.
  104. BOOL CTreeForGrpSend::RenameGroup(const int nGroupId, const char *lpszNewGroupName)
  105. {
  106. CGuiRecordSet rs;
  107. char sql[MAX_SQL_SIZE];
  108. try
  109. {
  110. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GRPSND_EDTSNDGRPNAME, nGroupId, lpszNewGroupName);
  111. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  112. {
  113. return FALSE;
  114. }
  115. rs.Close();
  116. return TRUE;
  117. }
  118. catch (...) 
  119. {
  120. return FALSE;
  121. }
  122. }
  123. //add one user under someone group item.
  124. BOOL CTreeForGrpSend::AddGroupUser(const int nGroupId, const int nGroupUserId)
  125. {
  126. CGuiRecordSet rs;
  127. char sql[MAX_SQL_SIZE];
  128. try
  129. {
  130. //insert send group user info.
  131. _snprintf(sql, MAX_SQL_SIZE - 1, SQL::CLIENT_GRPSNDUSR_ADDSNDGRPUSR, nGroupUserId, nGroupId);
  132. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  133. {
  134. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  135. return FALSE;
  136. }
  137. rs.Close();
  138. return TRUE;
  139. }
  140. catch (...) 
  141. {
  142. return FALSE;
  143. }
  144. }
  145. //delete one user under someone group item.
  146. BOOL CTreeForGrpSend::DelGroupUser(const int nGroupId, const int nGroupUserId)
  147. {
  148. CGuiRecordSet rs;
  149. char sql[MAX_SQL_SIZE];
  150. try
  151. {
  152. //insert send group user info.
  153. _snprintf(sql, MAX_SQL_SIZE - 1, SQL::CLIENT_GRPSNDUSR_DELSNDGRPUSR, nGroupUserId, nGroupId);
  154. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  155. {
  156. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  157. return FALSE;
  158. }
  159. rs.Close();
  160. return TRUE;
  161. }
  162. catch (...) 
  163. {
  164. return FALSE;
  165. }
  166. }
  167. //update user tree's data.
  168. void CTreeForGrpSend::UpdateTreeForUserDatas()
  169. {
  170. CGuiRecordSet rsd, rsu;
  171. DWORD olddata = 0;
  172. CVariantEx varex;
  173. char sql[MAX_SQL_SIZE];
  174. try
  175. {
  176. //find all first level departs' info
  177. _snprintf(sql, MAX_SQL_SIZE - 1, SQL::CLIENT_GRPSND_GETALLSNDGRPS);
  178. if(!rsd.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  179. {
  180. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  181. return ;
  182. }
  183. //enter departs looping
  184. this->DeleteAllItems();
  185. if(rsd.GetRecordCount() > 0)
  186. {
  187. for(rsd.MoveFirst(); !rsd.IsEof(); rsd.MoveNext())
  188. {
  189. //get depart.db table's field value.
  190. int departid = 0;
  191. string departname("");
  192. rsd.GetCollect("departid", varex.get_variant_t());
  193. departid = varex.AsInteger();
  194. rsd.GetCollect("departname", varex.get_variant_t());
  195. departname = varex.AsString();
  196. HTREEITEM departnode = this->InsertItem(departname.c_str(), 0, 0);
  197. this->SetItemData(departnode, MAKELONG(departid, NT_DEPART));
  198. //get all user list for specialed depart
  199. _snprintf(sql, MAX_SQL_SIZE - 1, SQL::CLIENT_GRPSND_GETUSRSOFSNDGRP, departid);
  200. if(!rsu.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  201. {
  202. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  203. return ;
  204. }
  205. //enter users looping
  206. if(rsu.GetRecordCount() > 0)
  207. {
  208. for(rsu.MoveFirst(); !rsu.IsEof(); rsu.MoveNext())
  209. {
  210. int userid = 0, state = 0, imgindex = 1;
  211. string username("");
  212. rsu.GetCollect("id", varex.get_variant_t());
  213. userid = varex.AsInteger();
  214. rsu.GetCollect("name", varex.get_variant_t());
  215. username = varex.AsString();
  216. HTREEITEM usernode = this->InsertItem(username.c_str(), 1, 1, departnode);
  217. this->SetItemData(usernode, MAKELONG(userid, NT_AGENT));
  218. }
  219. }
  220. rsu.Close();
  221. }
  222. }
  223. rsd.Close();
  224. }
  225. catch (_com_error e) 
  226. {
  227. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED));
  228. return ;
  229. }
  230. }
  231. bool CTreeForGrpSend::GetAGInfoOfItem(HTREEITEM hitem, AGINFO &aginfo)
  232. {
  233. HTREEITEM hselected = hitem;
  234. if(NULL == hselected)
  235. {
  236. MSGBOX_INFO(_LoadString(IDS_NOSELECTNODE).GetBuffer(0));
  237. return false;
  238. }
  239. else
  240. {
  241. CGuiRecordSet rs;
  242. CVariantEx varex;
  243. CString stemp;
  244. char sql[MAX_SQL_SIZE];
  245. try
  246. {
  247. if(HIWORD(this->GetItemData(hselected)) == NT_AGENT)
  248. {
  249. WORD agentid = LOWORD(this->GetItemData(hselected));
  250. _snprintf(sql, MAX_SQL_SIZE-1, SQL::CLIENT_GETSPECEAGENT_FROM_ID, agentid);
  251. if(!rs.Open(theApp.m_oAppInstance.m_adoconn.GetConecction(), sql))
  252. {
  253. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  254. return false;
  255. }
  256. if(rs.GetRecordCount() == 0) return false;
  257. rs.GetCollect("ipaddr", varex.get_variant_t());
  258. aginfo.shostip = varex.AsString();
  259. rs.GetCollect("hostname", varex.get_variant_t());
  260. aginfo.shostname = varex.AsString();
  261. rs.Close();
  262. return true;
  263. }
  264. else return false;
  265. }
  266. catch (_com_error e) 
  267. {
  268. //MSGBOX_ERROR(_LoadString(IDS_DBOPERFAILED).GetBuffer(0));
  269. return false;
  270. }
  271. }
  272. }
  273. void CTreeForGrpSend::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
  274. {
  275. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  276. *pResult = 0;
  277. HTREEITEM hitem = pNMTreeView->itemNew.hItem;
  278. if(hitem == NULL) return ;
  279. DWORD dwdata = this->GetItemData(hitem);
  280. if(HIWORD(dwdata) == NT_DEPART) return ;
  281. AGINFO aginfo;
  282. if(this->GetAGInfoOfItem(pNMTreeView->itemNew.hItem, aginfo))
  283. {
  284. CString stemp;
  285. stemp.Format("%s / %s", aginfo.shostname.c_str(), aginfo.shostip.c_str());
  286. char *puretxt = new char[stemp.GetLength()+1];
  287. _snprintf(puretxt, stemp.GetLength()+1, "%s", stemp.GetBuffer(0));
  288. stemp.Empty();
  289. ::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), UWM_UPDATESTATUSBAR, MAKEWORD(0, 1), (LPARAM)puretxt);
  290. }
  291. else
  292. {
  293. ::SendMessage(theApp.m_pMainWnd->GetSafeHwnd(), UWM_UPDATESTATUSBAR, MAKEWORD(0, 1), (LPARAM)NULL);
  294. }
  295. }