升龙物业 老版本 ocx IPO, 加密狗 转值班电话

ViewResBase.cpp 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. // ViewResBase.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "ViewResBase.h"
  5. #include "DisplayWnd.h"
  6. #include "ViewGroup.h"
  7. // CViewResBase
  8. IMPLEMENT_DYNAMIC(CViewResBase, VIEW_CONTROL_TYPE)
  9. CViewResBase::CViewResBase(void)
  10. {
  11. }
  12. CViewResBase::~CViewResBase(void)
  13. {
  14. RemoveAll();
  15. }
  16. /*****************************************************************
  17. **【函数名称】 _addRes
  18. **【函数功能】 添加资源处理函数
  19. **【参数】
  20. **【返回值】
  21. ****************************************************************/
  22. void CViewResBase::_addRes( DEV_RES_ID& ResId )
  23. {
  24. CString Name;
  25. // 查找或创建Dev
  26. PVIEW_ITEM_TYPE pDev = _getDev(ResId.NodeNo);
  27. if(pDev == NULL)
  28. {
  29. Name.Format(_T("%s%u"), UI_ITEM_NAME_DEV, ResId.NodeNo);
  30. pDev = new CMFCPropertyGridProperty(Name, ResId.NodeNo);
  31. ASSERT(pDev != NULL);
  32. AddProperty(pDev, FALSE, FALSE);
  33. }
  34. // 查找或创建Board
  35. CViewGroup* pBoard = _getResGroup(ResId);
  36. if(pBoard == NULL)
  37. {
  38. Name.Format(_T("%s%u"), UI_ITEM_NAME_BOARD, ResId.BoardNo);
  39. pBoard = new CViewGroup(Name, ResId.BoardNo);
  40. ASSERT(pBoard != NULL);
  41. pBoard->setResId(ResId);
  42. _addResGroup(pBoard);
  43. pDev->AddSubItem(pBoard);
  44. }
  45. // 创建资源
  46. Name.Format(_T("%u"), ResId.ChanNo);
  47. PVIEW_ITEM_TYPE pRes = new CMFCPropertyGridProperty(Name, ResId.ChanNo);
  48. ASSERT(pRes != NULL);
  49. pBoard->add(ResId.ChanNo, pRes);
  50. Name.Format(_T("%s"), UI_ITEM_NAME_STATE);
  51. PVIEW_ITEM_TYPE pState = new CMFCPropertyGridProperty(Name, _T("free"));
  52. ASSERT(pState != NULL);
  53. pState->AllowEdit(FALSE);
  54. pRes->AddSubItem(pState);
  55. }
  56. /*****************************************************************
  57. **【函数名称】 _delEmptyNode
  58. **【函数功能】 删除空节点
  59. **【参数】
  60. **【返回值】
  61. ****************************************************************/
  62. void CViewResBase::_delEmptyNode( PVIEW_ITEM_TYPE pItem )
  63. {
  64. ASSERT(pItem != NULL);
  65. if(pItem->GetSubItemsCount() == 0)
  66. {
  67. PVIEW_ITEM_TYPE pParent = pItem->GetParent();
  68. if(pParent != NULL)
  69. {
  70. pParent->RemoveSubItem(pItem);
  71. _delEmptyNode(pParent);
  72. }
  73. else
  74. DeleteProperty(pItem, FALSE, FALSE);
  75. }
  76. }
  77. /*****************************************************************
  78. **【函数名称】 _getDev
  79. **【函数功能】 查找dev节点
  80. **【参数】
  81. **【返回值】
  82. ****************************************************************/
  83. PVIEW_ITEM_TYPE CViewResBase::_getDev( UINT DevNo )
  84. {
  85. int Count = GetPropertyCount();
  86. PVIEW_ITEM_TYPE pDev = NULL;
  87. for(int i = 0; i < Count; ++i)
  88. {
  89. pDev = GetProperty(i);
  90. ASSERT(pDev != NULL);
  91. if(pDev->GetData() == DevNo)
  92. return pDev;
  93. }
  94. return NULL;
  95. }
  96. /*****************************************************************
  97. **【函数名称】 _getBoard
  98. **【函数功能】 查找board节点
  99. **【参数】
  100. **【返回值】
  101. ****************************************************************/
  102. PVIEW_ITEM_TYPE CViewResBase::_getBoard( PVIEW_ITEM_TYPE pDev, UINT BoardNo )
  103. {
  104. int Count = pDev->GetSubItemsCount();
  105. PVIEW_ITEM_TYPE pBoard = NULL;
  106. for(int i = 0; i < Count; ++i)
  107. {
  108. pBoard = pDev->GetSubItem(i);
  109. ASSERT(pBoard != NULL);
  110. if(pBoard->GetData() == BoardNo)
  111. return pBoard;
  112. }
  113. return NULL;
  114. }
  115. /*****************************************************************
  116. **【函数名称】 _getSpan
  117. **【函数功能】 查找span节点
  118. **【参数】
  119. **【返回值】
  120. ****************************************************************/
  121. PVIEW_ITEM_TYPE CViewResBase::_getSpan( PVIEW_ITEM_TYPE pBoard, UINT SpanNo )
  122. {
  123. int Count = pBoard->GetSubItemsCount();
  124. PVIEW_ITEM_TYPE pSpan = NULL;
  125. for(int i = 0; i < Count; ++i)
  126. {
  127. pBoard = pBoard->GetSubItem(i);
  128. ASSERT(pBoard != NULL);
  129. if(pSpan->GetData() == SpanNo)
  130. return pSpan;
  131. }
  132. return NULL;
  133. }
  134. /*****************************************************************
  135. **【函数名称】 _getResGroup
  136. **【函数功能】 查找资源组节点
  137. **【参数】
  138. **【返回值】
  139. ****************************************************************/
  140. CViewGroup* CViewResBase::_getResGroup( DEV_RES_ID& ResId )
  141. {
  142. POSITION Pos = m_ResGroupList.GetHeadPosition();
  143. while(Pos != NULL)
  144. {
  145. CViewGroup* pGroup = m_ResGroupList.GetNext(Pos);
  146. ASSERT(pGroup != NULL);
  147. if(pGroup->isThatU(ResId))
  148. return pGroup;
  149. }
  150. return NULL;
  151. }
  152. /*****************************************************************
  153. **【函数名称】 _addResGroup
  154. **【函数功能】 添加资源组节点
  155. **【参数】
  156. **【返回值】
  157. ****************************************************************/
  158. void CViewResBase::_addResGroup( CViewGroup* pGroup )
  159. {
  160. m_ResGroupList.AddTail(pGroup);
  161. }
  162. /*****************************************************************
  163. **【函数名称】 _delResGroup
  164. **【函数功能】 删除资源组节点
  165. **【参数】
  166. **【返回值】
  167. ****************************************************************/
  168. void CViewResBase::_delResGroup( CViewGroup* pGroup )
  169. {
  170. POSITION Pos = m_ResGroupList.Find(pGroup);
  171. ASSERT(Pos != NULL);
  172. if(Pos != NULL)
  173. m_ResGroupList.RemoveAt(Pos);
  174. }
  175. /*****************************************************************
  176. **【函数名称】 create
  177. **【函数功能】 控件初始化
  178. **【参数】
  179. **【返回值】
  180. ****************************************************************/
  181. bool CViewResBase::create( CDisplayWnd* pWnd, UINT PanId )
  182. {
  183. ASSERT(pWnd != NULL);
  184. CString Name;
  185. Name.LoadString(PanId);
  186. // 创建pane
  187. if (!m_Pane.Create(Name, pWnd, CRect(0, 0, 200, 200), TRUE, PanId,
  188. WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
  189. {
  190. TRACE0("创建设备资源窗口失败");
  191. return false;
  192. }
  193. m_Pane.EnableDocking(CBRS_ALIGN_ANY);
  194. //创建控件
  195. if(!_createControl())
  196. return false;
  197. EnableHeaderCtrl(FALSE);
  198. pWnd->OnNewPane(&m_Pane);
  199. return true;
  200. }
  201. /*****************************************************************
  202. **【函数名称】 newSize
  203. **【函数功能】 调整控件大小
  204. **【参数】
  205. **【返回值】
  206. ****************************************************************/
  207. void CViewResBase::newSize( int cx, int cy )
  208. {
  209. if(IsWindow(GetSafeHwnd()))
  210. SetWindowPos (this, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW);
  211. }
  212. /*****************************************************************
  213. **【函数名称】 showTogether
  214. **【函数功能】 Tab模式显示控件
  215. **【参数】
  216. **【返回值】
  217. ****************************************************************/
  218. void CViewResBase::showTogether( CViewResBase* pView )
  219. {
  220. ASSERT(pView != NULL);
  221. m_Pane.AttachToTabWnd(&pView->m_Pane, DM_SHOW, TRUE);
  222. }
  223. /*****************************************************************
  224. **【函数名称】 onResNew
  225. **【函数功能】 添加资源处理函数
  226. **【参数】
  227. **【返回值】
  228. ****************************************************************/
  229. void CViewResBase::onResNew( DEV_RES_ID& ResId )
  230. {
  231. CViewGroup* pGroup = _getResGroup(ResId);
  232. if(pGroup == NULL || !pGroup->isSubItemExisted(ResId.ChanNo))
  233. {
  234. _addRes(ResId);
  235. AdjustLayout();
  236. }
  237. }
  238. /*****************************************************************
  239. **【函数名称】 onResDel
  240. **【函数功能】 删除资源处理函数
  241. **【参数】
  242. **【返回值】
  243. ****************************************************************/
  244. void CViewResBase::onResDel( DEV_RES_ID& ResId )
  245. {
  246. CViewGroup* pGroup = _getResGroup(ResId);
  247. if (pGroup != NULL && pGroup->isSubItemExisted(ResId.ChanNo))
  248. {
  249. // 删除资源
  250. pGroup->remove(ResId.ChanNo);
  251. if(pGroup->GetSubItemsCount() == 0)
  252. {
  253. // 从List中删除该组
  254. _delResGroup(pGroup);
  255. _delEmptyNode(pGroup);
  256. }
  257. AdjustLayout();
  258. }
  259. }
  260. BEGIN_MESSAGE_MAP(CViewResBase, VIEW_CONTROL_TYPE)
  261. END_MESSAGE_MAP()
  262. // CViewResBase 消息处理程序