FrmGisSearchF.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "WindowMsgF.h"
  8. #include "CDSCodeF.h"
  9. #include "CDSNodeF.h"
  10. #include "CDSLinkF.h"
  11. #include "CDSIfscF.h"
  12. #include "CDSRoadF.h"
  13. #include "ITSLangTransF.h"
  14. #pragma hdrstop
  15. #include "FrmGisSearchF.h"
  16. #include "ITS0000MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalc"
  21. #pragma link "cxClasses"
  22. #pragma link "cxContainer"
  23. #pragma link "cxControls"
  24. #pragma link "cxCustomData"
  25. #pragma link "cxData"
  26. #pragma link "cxDataStorage"
  27. #pragma link "cxDropDownEdit"
  28. #pragma link "cxEdit"
  29. #pragma link "cxFilter"
  30. #pragma link "cxGraphics"
  31. #pragma link "cxGrid"
  32. #pragma link "cxGridCustomTableView"
  33. #pragma link "cxGridCustomView"
  34. #pragma link "cxGridLevel"
  35. #pragma link "cxGridTableView"
  36. #pragma link "cxLabel"
  37. #pragma link "cxLookAndFeelPainters"
  38. #pragma link "cxLookAndFeels"
  39. #pragma link "cxMaskEdit"
  40. #pragma link "cxStyles"
  41. #pragma link "cxTextEdit"
  42. #pragma link "dxSkinBlack"
  43. #pragma link "dxSkinBlue"
  44. #pragma link "dxSkinsCore"
  45. #pragma link "dxSkinscxPCPainter"
  46. #pragma resource "*.dfm"
  47. TFrmGisSearch *FrmGisSearch = NULL;
  48. //---------------------------------------------------------------------------
  49. __fastcall TFrmGisSearch::TFrmGisSearch(TComponent* Owner)
  50. : TForm(Owner)
  51. {
  52. LangTrans->Translate(this, ITSDb_GetConnection());
  53. ITSSkin_Load(this);
  54. CMM_LoadForm(g_sFormsDir, this);
  55. m_pGDC = TvList->DataController;
  56. m_bClose = false;
  57. }
  58. //---------------------------------------------------------------------------
  59. void __fastcall TFrmGisSearch::FormClose(TObject *Sender, TCloseAction &Action)
  60. {
  61. m_bClose = true;
  62. try
  63. {
  64. if (TmrClear->Enabled == true)
  65. {
  66. TmrClear->Enabled = false;
  67. //ITS00MAP->xclntMap->ClearPathInfo();
  68. //ITS00MAP->xclntMap->ReDraw();
  69. }
  70. //if (m_bClose == false)
  71. {
  72. if (ITS0000M) ITS0000M->ChkGisSearch->Checked = false;
  73. }
  74. }
  75. catch(...)
  76. {
  77. }
  78. CMM_SaveForm(g_sFormsDir, this);
  79. Action = caFree;
  80. }
  81. //---------------------------------------------------------------------------
  82. void __fastcall TFrmGisSearch::FormDestroy(TObject *Sender)
  83. {
  84. FrmGisSearch = NULL;
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TFrmGisSearch::TmrShowTimer(TObject *Sender)
  88. {
  89. Enabled = true;
  90. EdSearch->Enabled = true;
  91. EdSearch->BringToFront();
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TFrmGisSearch::BtnSearchClick(TObject *Sender)
  95. {
  96. Application->ProcessMessages();
  97. TSqlCursor sqlCrs((TControl*)BtnSearch);
  98. SelList();
  99. }
  100. //---------------------------------------------------------------------------
  101. void __fastcall TFrmGisSearch::EdSearchKeyPress(TObject *Sender, wchar_t &Key)
  102. {
  103. if (Key == VK_RETURN)
  104. {
  105. Key = 0;
  106. BtnSearchClick(NULL);
  107. }
  108. }
  109. //---------------------------------------------------------------------------
  110. void __fastcall TFrmGisSearch::SelList()
  111. {
  112. TSqlCursor crs;
  113. String sParam = "";
  114. m_nType = CbType->ItemIndex;
  115. sParam = EdSearch->Text.Trim();
  116. switch(m_nType)
  117. {
  118. case 0: SelNode(sParam); break;
  119. case 1: SelLink(sParam); break;
  120. case 2: SelServiceLink(sParam); break;
  121. case 3: SelRoad(sParam); break;
  122. }
  123. TvList->ApplyBestFit(NULL, false, false);
  124. }
  125. //---------------------------------------------------------------------------
  126. void __fastcall TFrmGisSearch::SelNode(String AParam)
  127. {
  128. Column01->Caption = "ID";
  129. Column02->Caption = lblNode1->Caption;//"노드명";
  130. Column03->Caption = lblNode2->Caption;//"노드유형";
  131. Column04->Visible = false;
  132. Column05->Visible = false;
  133. Column06->Visible = false;
  134. Column07->Visible = false;
  135. TItsSubCode *pSubCode;
  136. TItsCode *FCodeNodeT = ItsCodeManager->FLists.Find("NDT"); //노드유형
  137. CMM_ClearGridTableView(TvList);
  138. int nRow = 0;
  139. try
  140. {
  141. TvList->BeginUpdate();
  142. try
  143. {
  144. ItsNodeManager->FLists.Lock();
  145. FOR_STL(TItsNode *, pNode, ItsNodeManager->FLists)
  146. {
  147. if (AParam == "" || pNode->NODE_ID.Pos(AParam) ||
  148. pNode->NODE_NAME.Pos(AParam) )
  149. {
  150. nRow = m_pGDC->AppendRecord();
  151. m_pGDC->Values[nRow][Column01->Index] = pNode->NODE_ID; //노드ID
  152. m_pGDC->Values[nRow][Column02->Index] = pNode->NODE_NAME; //교차로명칭
  153. String sNodeType = "[" + pNode->NODE_TYPE + "] ";
  154. if (FCodeNodeT)
  155. {
  156. pSubCode = FCodeNodeT->FSubLists.Find(pNode->NODE_TYPE);
  157. if (pSubCode) sNodeType = sNodeType + pSubCode->CMMN_CD_KOR_NM;
  158. }
  159. m_pGDC->Values[nRow][Column03->Index] = sNodeType; //노드유형
  160. m_pGDC->Values[nRow][Column04->Index] = String(pNode->X_CRDN); //X 좌표
  161. m_pGDC->Values[nRow][Column05->Index] = String(pNode->Y_CRDN); //Y 좌표
  162. m_pGDC->Values[nRow][Column99->Index] = (int)pNode;
  163. }
  164. }
  165. }
  166. __finally
  167. {
  168. ItsNodeManager->FLists.UnLock();
  169. }
  170. }
  171. __finally
  172. {
  173. TvList->EndUpdate();
  174. TvList->DataController->GotoFirst();
  175. TvList->DataController->FocusedRecordIndex = 0;
  176. CxList->SetFocus();
  177. }
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TFrmGisSearch::SelLink(String AParam)
  181. {
  182. Column01->Caption = "ID";
  183. Column02->Caption = lblLink1->Caption;//"도로명";
  184. Column03->Caption = lblLink2->Caption;//"시작노드";
  185. Column04->Caption = lblLink3->Caption;//"종료노드";
  186. Column04->Visible = true;
  187. Column05->Visible = false;
  188. Column06->Visible = false;
  189. Column07->Visible = false;
  190. TItsNode *pNode;
  191. CMM_ClearGridTableView(TvList);
  192. int nRow = 0;
  193. try
  194. {
  195. TvList->BeginUpdate();
  196. try
  197. {
  198. ItsLinkManager->FLists.Lock();
  199. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  200. {
  201. if (AParam == "" || pLink->LINK_ID.Pos(AParam) ||
  202. pLink->ROAD_NAME.Pos(AParam) )
  203. {
  204. nRow = m_pGDC->AppendRecord();
  205. m_pGDC->Values[nRow][Column01->Index] = pLink->LINK_ID;
  206. m_pGDC->Values[nRow][Column02->Index] = pLink->ROAD_NAME; //'도로명';
  207. String sFNodeName = "[" + pLink->F_NODE_ID + "] ";
  208. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  209. if (pNode)
  210. sFNodeName = sFNodeName + pNode->NODE_NAME;
  211. m_pGDC->Values[nRow][Column03->Index] = sFNodeName; //'시작노드ID';
  212. String sTNodeName = "[" + pLink->T_NODE_ID + "] ";
  213. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  214. if (pNode)
  215. sTNodeName = sTNodeName + pNode->NODE_NAME;
  216. m_pGDC->Values[nRow][Column04->Index] = sTNodeName; //'종료노드ID';
  217. m_pGDC->Values[nRow][Column99->Index] = (int)pLink;
  218. }
  219. }
  220. }
  221. __finally
  222. {
  223. ItsLinkManager->FLists.UnLock();
  224. }
  225. }
  226. __finally
  227. {
  228. TvList->EndUpdate();
  229. TvList->DataController->GotoFirst();
  230. TvList->DataController->FocusedRecordIndex = 0;
  231. CxList->SetFocus();
  232. }
  233. }
  234. //---------------------------------------------------------------------------
  235. void __fastcall TFrmGisSearch::SelServiceLink(String AParam)
  236. {
  237. Column01->Caption = "ID";
  238. Column02->Caption = lblIfsc1->Caption;//"명칭";
  239. Column03->Caption = lblIfsc2->Caption;//"방향";
  240. Column04->Caption = lblIfsc3->Caption;//"시점명";
  241. Column05->Caption = lblIfsc4->Caption;//"종점명";
  242. Column04->Visible = true;
  243. Column05->Visible = true;
  244. Column06->Visible = false;
  245. Column07->Visible = false;
  246. TItsSubCode *pSubCode;
  247. TItsCode *FCodeIFD = ItsCodeManager->FLists.Find("IFD"); // 방향코드
  248. CMM_ClearGridTableView(TvList);
  249. int nRow = 0;
  250. try
  251. {
  252. TvList->BeginUpdate();
  253. try
  254. {
  255. ItsIfscManager->FLists.Lock();
  256. FOR_STL(TItsIfsc*, pIfsc, ItsIfscManager->FLists)
  257. {
  258. if (AParam == "" || pIfsc->IFSC_ID.Pos(AParam) ||
  259. pIfsc->IFSC_NM.Pos(AParam) )
  260. {
  261. nRow = m_pGDC->AppendRecord();
  262. m_pGDC->Values[nRow][Column01->Index] = pIfsc->IFSC_ID; //'정보제공구간 ID'
  263. m_pGDC->Values[nRow][Column02->Index] = pIfsc->IFSC_NM; //'정보제공구간 명'
  264. String sIFD = "[" + pIfsc->DRCT_CD + "] ";
  265. pSubCode = FCodeIFD->FSubLists.Find(pIfsc->DRCT_CD); // 방향코드
  266. if (pSubCode) sIFD = sIFD + pSubCode->CMMN_CD_KOR_NM;
  267. m_pGDC->Values[nRow][Column03->Index] = sIFD; //'방향 코드'
  268. m_pGDC->Values[nRow][Column04->Index] = pIfsc->STRT_NM; //'시점 명'
  269. m_pGDC->Values[nRow][Column05->Index] = pIfsc->END_NM; //'종점 명'
  270. m_pGDC->Values[nRow][Column99->Index] = (int)pIfsc;
  271. }
  272. }
  273. }
  274. __finally
  275. {
  276. ItsIfscManager->FLists.UnLock();
  277. }
  278. }
  279. __finally
  280. {
  281. TvList->EndUpdate();
  282. TvList->DataController->GotoFirst();
  283. TvList->DataController->FocusedRecordIndex = 0;
  284. CxList->SetFocus();
  285. }
  286. }
  287. //---------------------------------------------------------------------------
  288. void __fastcall TFrmGisSearch::SelRoad(String AParam)
  289. {
  290. Column01->Caption = "ID";
  291. Column02->Caption = lblIfsc1->Caption;//"명칭";
  292. Column03->Caption = lblIfsc2->Caption;//"방향";
  293. Column04->Caption = lblIfsc3->Caption;//"시점명";
  294. Column05->Caption = lblIfsc4->Caption;//"종점명";
  295. Column04->Visible = true;
  296. Column05->Visible = true;
  297. Column06->Visible = false;
  298. Column07->Visible = false;
  299. TItsSubCode *pSubCode;
  300. TItsCode *FCodeIFD = ItsCodeManager->FLists.Find("IFD"); // 방향코드
  301. CMM_ClearGridTableView(TvList);
  302. int nRow = 0;
  303. try
  304. {
  305. TvList->BeginUpdate();
  306. try
  307. {
  308. ItsRoadManager->FLists.Lock();
  309. FOR_STL(TItsRoad*, pRoad, ItsRoadManager->FLists)
  310. {
  311. if (AParam == "" || pRoad->ROAD_ID.Pos(AParam) ||
  312. pRoad->ROAD_NM.Pos(AParam) )
  313. {
  314. nRow = m_pGDC->AppendRecord();
  315. m_pGDC->Values[nRow][Column01->Index] = pRoad->ROAD_ID; //'도로 ID'
  316. m_pGDC->Values[nRow][Column02->Index] = pRoad->ROAD_NM; //'도로명'
  317. String sIFD = "[" + pRoad->DRCT_CD + "] ";
  318. pSubCode = FCodeIFD->FSubLists.Find(pRoad->DRCT_CD); // 방향코드
  319. if (pSubCode) sIFD = sIFD + pSubCode->CMMN_CD_KOR_NM;
  320. m_pGDC->Values[nRow][Column03->Index] = sIFD; //'방향 코드'
  321. m_pGDC->Values[nRow][Column04->Index] = pRoad->STRT_NM; //'시점 명'
  322. m_pGDC->Values[nRow][Column05->Index] = pRoad->END_NM; //'종점 명'
  323. m_pGDC->Values[nRow][Column99->Index] = (int)pRoad;
  324. }
  325. }
  326. }
  327. __finally
  328. {
  329. ItsRoadManager->FLists.UnLock();
  330. }
  331. }
  332. __finally
  333. {
  334. TvList->EndUpdate();
  335. TvList->DataController->GotoFirst();
  336. TvList->DataController->FocusedRecordIndex = 0;
  337. CxList->SetFocus();
  338. }
  339. }
  340. //---------------------------------------------------------------------------
  341. void __fastcall TFrmGisSearch::SelGisItem()
  342. {
  343. try
  344. {
  345. int nIndex = m_pGDC->FocusedRecordIndex;
  346. if (nIndex < 0) return;
  347. String sId = VarToStr(m_pGDC->Values[nIndex][Column01->Index]);
  348. TmrClear->Enabled = false;
  349. ITS0000M->SelGisItem(m_nType, sId);
  350. TmrClear->Enabled = true;
  351. }
  352. catch(...)
  353. {
  354. }
  355. }
  356. //---------------------------------------------------------------------------
  357. void __fastcall TFrmGisSearch::TmrClearTimer(TObject *Sender)
  358. {
  359. try {
  360. //TXiMapUtil::ClearPath(ITS00MAP->xclntMap);
  361. } catch(...) {}
  362. }
  363. //---------------------------------------------------------------------------
  364. void __fastcall TFrmGisSearch::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  365. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  366. {
  367. if (ACellViewInfo)
  368. {
  369. SelGisItem();
  370. }
  371. }
  372. //---------------------------------------------------------------------------
  373. void __fastcall TFrmGisSearch::TvListDataControllerFilterChanged(TObject *Sender)
  374. {
  375. CMM_SetFilterLike(TvList);
  376. }
  377. //---------------------------------------------------------------------------