CDSNodeF.cpp 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSNodeF.h"
  4. #include "AppGlobalF.h"
  5. //---------------------------------------------------------------------------
  6. #pragma package(smart_init)
  7. TItsNode::TItsNode()
  8. {
  9. TItsNode("");
  10. }
  11. //---------------------------------------------------------------------------
  12. TItsNode::TItsNode(String AId)
  13. {
  14. FNODE_ID = AId;
  15. Clear();
  16. FModified = false;
  17. FCompleted= false;
  18. }
  19. //---------------------------------------------------------------------------
  20. void TItsNode::Clear()
  21. {
  22. #if 0
  23. FNODE_TYPE = "";
  24. FNODE_NAME = "";
  25. FTURN_P = "";
  26. FRMRK = "";
  27. FX_CRDN = "0";
  28. FY_CRDN = "0";
  29. #endif
  30. }
  31. //---------------------------------------------------------------------------
  32. TItsNode::~TItsNode()
  33. {
  34. }
  35. //---------------------------------------------------------------------------
  36. void TItsNode::SetValue(String &AOrgValue, String AValue)
  37. {
  38. if (AOrgValue != AValue)
  39. {
  40. AOrgValue = AValue;
  41. if (FCompleted) FModified = true;
  42. }
  43. }
  44. //---------------------------------------------------------------------------
  45. void TItsNode::SetFNODE_ID(String AValue)
  46. {
  47. SetValue(FNODE_ID, AValue);
  48. }
  49. //---------------------------------------------------------------------------
  50. void TItsNode::SetFNODE_TYPE(String AValue)
  51. {
  52. SetValue(FNODE_TYPE, AValue);
  53. }
  54. //---------------------------------------------------------------------------
  55. void TItsNode::SetFNODE_NAME(String AValue)
  56. {
  57. SetValue(FNODE_NAME, AValue);
  58. }
  59. //---------------------------------------------------------------------------
  60. void TItsNode::SetFTURN_P(String AValue)
  61. {
  62. SetValue(FTURN_P, AValue);
  63. }
  64. //---------------------------------------------------------------------------
  65. void TItsNode::SetFRMRK(String AValue)
  66. {
  67. SetValue(FRMRK, AValue);
  68. }
  69. //---------------------------------------------------------------------------
  70. void TItsNode::SetFX_CRDN(String AValue)
  71. {
  72. SetValue(FX_CRDN, AValue);
  73. }
  74. //---------------------------------------------------------------------------
  75. void TItsNode::SetFY_CRDN(String AValue)
  76. {
  77. SetValue(FY_CRDN, AValue);
  78. }
  79. //---------------------------------------------------------------------------
  80. TItsNodeList::TItsNodeList()
  81. {
  82. FList = new TList();
  83. }
  84. //---------------------------------------------------------------------------
  85. TItsNodeList::~TItsNodeList()
  86. {
  87. ReleaseAll();
  88. delete FList;
  89. }
  90. //---------------------------------------------------------------------------
  91. void TItsNodeList::ReleaseAll()
  92. {
  93. for(int ii = 0; ii < Count; ii++)
  94. Release(ii);
  95. FList->Clear();
  96. }
  97. //---------------------------------------------------------------------------
  98. void TItsNodeList::Release(int AIndex)
  99. {
  100. if (AIndex >= 0 && AIndex < Count)
  101. delete (TItsNode*)FList->Items[AIndex];
  102. }
  103. //---------------------------------------------------------------------------
  104. TItsNode *TItsNodeList::GetNode(int AIndex)
  105. {
  106. if (AIndex >= 0 && AIndex < Count)
  107. return (TItsNode*)FList->Items[AIndex];
  108. return NULL;
  109. }
  110. //---------------------------------------------------------------------------
  111. int TItsNodeList::GetCount()
  112. {
  113. return FList->Count;
  114. }
  115. //---------------------------------------------------------------------------
  116. void TItsNodeList::Clear()
  117. {
  118. ReleaseAll();
  119. }
  120. //---------------------------------------------------------------------------
  121. int TItsNodeList::Add(TItsNode *AItsNode)
  122. {
  123. int nRes;
  124. nRes = FList->Add(AItsNode);
  125. return nRes;
  126. }
  127. //---------------------------------------------------------------------------
  128. void TItsNodeList::Delete(int AIndex)
  129. {
  130. if (AIndex >= 0 && AIndex < Count)
  131. {
  132. Release(AIndex);
  133. FList->Delete(AIndex);
  134. }
  135. }
  136. //---------------------------------------------------------------------------
  137. void TItsNodeList::Insert(int AIndex, TItsNode *AItsNode)
  138. {
  139. if (AIndex >= 0 && AIndex < Count)
  140. FList->Insert(AIndex, AItsNode);
  141. }
  142. //---------------------------------------------------------------------------
  143. TCDSNode::TCDSNode(TItsNodeList *AList)
  144. {
  145. FNodes = AList;
  146. }
  147. //---------------------------------------------------------------------------
  148. void *__fastcall TCDSNode::AppendRecord(void)
  149. {
  150. TItsNode *ANode = new TItsNode();
  151. TcxDataRecordHandle *Result = (TcxDataRecordHandle*)FNodes->Add(ANode);
  152. DataChanged();
  153. if (!Modified) FModified = true;
  154. return Result;
  155. }
  156. //---------------------------------------------------------------------------
  157. void *__fastcall TCDSNode::InsertRecord(void * ARecordHandle)
  158. {
  159. TItsNode *ANode = new TItsNode();
  160. FNodes->Insert((int)ARecordHandle, ANode);
  161. TcxDataRecordHandle *Result = (TcxDataRecordHandle*)ARecordHandle;
  162. DataChanged();
  163. if (!Modified) FModified = true;
  164. return Result;
  165. }
  166. //---------------------------------------------------------------------------
  167. void __fastcall TCDSNode::DeleteRecord(void * ARecordHandle)
  168. {
  169. FNodes->Delete((int)ARecordHandle);
  170. DataChanged();
  171. if (!Modified) FModified = true;
  172. }
  173. //---------------------------------------------------------------------------
  174. int __fastcall TCDSNode::GetRecordCount(void)
  175. {
  176. return FNodes->Count;
  177. }
  178. //---------------------------------------------------------------------------
  179. Variant __fastcall TCDSNode::GetValue(void * ARecordHandle, void * AItemHandle)
  180. {
  181. int AColumnId = GetDefaultItemID((int)AItemHandle);
  182. TItsNode *ANode = FNodes->Node[(int)ARecordHandle];
  183. Variant Result;
  184. #if 0
  185. switch (AColumnId)
  186. {
  187. case IndexOfID:
  188. Result = ACustomer->ID; break;
  189. case IndexOfName:
  190. Result = ACustomer->Name; break;
  191. case IndexOfDescription:
  192. Result = ACustomer->Description; break;
  193. }
  194. #else
  195. Result = ANode->NODE_ID;
  196. #endif
  197. return (Result);
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TCDSNode::SetValue(void * ARecordHandle, void * AItemHandle, const Variant &AValue)
  201. {
  202. int AColumnId = GetDefaultItemID((int)AItemHandle);
  203. TItsNode *ANode = FNodes->Node[(int)ARecordHandle];
  204. #if 0
  205. switch (AColumnId)
  206. {
  207. case IndexOfID:
  208. if (VarIsNull(AValue))
  209. ACustomer->ID = 0;
  210. else
  211. ACustomer->ID = AValue;
  212. break;
  213. case IndexOfName:
  214. ACustomer->Name = VarToStr(AValue);
  215. break;
  216. case IndexOfDescription:
  217. ACustomer->Description = VarToStr(AValue);
  218. break;
  219. }
  220. #else
  221. #endif
  222. if (!Modified) FModified = true;
  223. }
  224. //---------------------------------------------------------------------------
  225. //---------------------------------------------------------------------------
  226. //---------------------------------------------------------------------------
  227. TItsNodeManager *ItsNodeManager = NULL;
  228. //---------------------------------------------------------------------------
  229. /*
  230. * Link Manager
  231. */
  232. TItsNodeManager::TItsNodeManager()
  233. {
  234. }
  235. //---------------------------------------------------------------------------
  236. TItsNodeManager::~TItsNodeManager()
  237. {
  238. }
  239. //---------------------------------------------------------------------------
  240. bool TItsNodeManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  241. {
  242. String sQry;
  243. TADOQuery *pADO = NULL;
  244. sQry = "SELECT A.NODE_ID, A.NODE_TYPE, A.NODE_NAME, \r\n"
  245. " A.TURN_P, A.RMRK, A.X_CRDN, A.Y_CRDN \r\n"
  246. " FROM TB_NODE A \r\n";
  247. // " ORDER BY A.NODE_ID \r\n";
  248. try
  249. {
  250. FLists.Lock();
  251. FLists.RemoveAll();
  252. try
  253. {
  254. pADO = new TADOQuery(NULL);
  255. pADO->Close();
  256. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  257. pADO->SQL->Clear();
  258. pADO->SQL->Text = sQry;
  259. pADO->Open();
  260. //int nRows = pADO->RecordCount;
  261. for( ; !pADO->Eof; pADO->Next())
  262. {
  263. TItsNode *pNode = new TItsNode();
  264. pNode->FNODE_ID = pADO->FieldByName("NODE_ID")->AsString; //노드ID
  265. pNode->FNODE_TYPE = pADO->FieldByName("NODE_TYPE")->AsString; //노드유형
  266. pNode->FNODE_NAME = pADO->FieldByName("NODE_NAME")->AsString.Trim(); //교차로명칭
  267. pNode->FTURN_P = pADO->FieldByName("TURN_P")->AsString; //회전제한유무
  268. pNode->FRMRK = pADO->FieldByName("RMRK")->AsString.Trim(); //비고
  269. pNode->FX_CRDN = pADO->FieldByName("X_CRDN")->AsString; //X 좌표
  270. pNode->FY_CRDN = pADO->FieldByName("Y_CRDN")->AsString; //Y 좌표
  271. FLists.Push(pNode->NODE_ID, pNode);
  272. pNode->Completed = true;
  273. }
  274. }
  275. catch(EDatabaseError &E)
  276. {
  277. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  278. DBERRORMSG("TItsNodeManager::LoadFromDb", String(E.ClassName()), E.Message, sQry);
  279. throw Exception(String(E.ClassName()) + E.Message);
  280. }
  281. catch(Exception &exception)
  282. {
  283. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  284. DBERRORMSG("TItsNodeManager::LoadFromDb", String(exception.ClassName()), exception.Message, sQry);
  285. throw Exception(String(exception.ClassName()) + exception.Message);
  286. }
  287. }
  288. __finally
  289. {
  290. if (pADO)
  291. {
  292. pADO->Close();
  293. delete pADO;
  294. }
  295. FLists.UnLock();
  296. }
  297. return true;
  298. }
  299. //---------------------------------------------------------------------------