EVSP000MF.cpp 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #include "ITSMapF.h"
  8. #include "WindowMsgF.h"
  9. #include "CDSSgnlCtlrF.h"
  10. #include "ITS_OPLibF.h"
  11. #include "CDSLayerF.h"
  12. #include "FrmCctvImgF.h"
  13. #include "FrmVmsMsgF.h"
  14. #include "FrmStreamPlayerF.h"
  15. #pragma hdrstop
  16. #include "EVSP000MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxClasses"
  21. #pragma link "cxContainer"
  22. #pragma link "cxControls"
  23. #pragma link "cxCustomData"
  24. #pragma link "cxData"
  25. #pragma link "cxDataStorage"
  26. #pragma link "cxDropDownEdit"
  27. #pragma link "cxEdit"
  28. #pragma link "cxFilter"
  29. #pragma link "cxGraphics"
  30. #pragma link "cxGrid"
  31. #pragma link "cxGridCustomTableView"
  32. #pragma link "cxGridCustomView"
  33. #pragma link "cxGridLevel"
  34. #pragma link "cxGridTableView"
  35. #pragma link "cxGroupBox"
  36. #pragma link "cxLabel"
  37. #pragma link "cxLookAndFeelPainters"
  38. #pragma link "cxLookAndFeels"
  39. #pragma link "cxMaskEdit"
  40. #pragma link "cxSpinEdit"
  41. #pragma link "cxSplitter"
  42. #pragma link "cxStyles"
  43. #pragma link "cxTextEdit"
  44. #pragma link "dxSkinBlue"
  45. #pragma link "dxSkinsCore"
  46. #pragma link "dxSkinscxPCPainter"
  47. #pragma link "FRAME_OpenMapF"
  48. #pragma link "FRAME_SgnlCtlrListF"
  49. #pragma link "dxSkinBlack"
  50. #pragma link "dxSkinMcSkin"
  51. #pragma link "cxPC"
  52. #pragma link "cxPCdxBarPopupMenu"
  53. #pragma link "cxCalc"
  54. #pragma link "cxCheckBox"
  55. #pragma resource "*.dfm"
  56. TEVSP000M *EVSP000M = NULL;
  57. //---------------------------------------------------------------------------
  58. void TEVSP000M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  59. {
  60. try
  61. {
  62. if (!EVSP000M) return;
  63. EVSP000M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  64. }
  65. catch(Exception &exception)
  66. {
  67. }
  68. }
  69. //---------------------------------------------------------------------------
  70. __fastcall TEVSP000M::TEVSP000M(TComponent* Owner)
  71. : TForm(Owner)
  72. {
  73. LangTrans->Translate(this, ITSDb_GetConnection());
  74. ITSSkin_Load(this);
  75. CMM_LoadForm(g_sFormsDir, this);
  76. FUpdate= false;
  77. FTitle = Caption;
  78. FLayerIdx = LyrTp_Evsp;
  79. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  80. FRAMEOpenMap1->MapCallbackFunc = TEVSP000M_MapCallback;
  81. //FRAMEOpenMap1->ChkShowNmbr->Caption = "교차로 번호";
  82. FRAMEOpenMap1->ChkShowNmbr->Visible = false;
  83. ChkCctv->Parent = FRAMEOpenMap1->PnlGisTool;
  84. ChkCctv->Align = alLeft;
  85. ChkVms->Parent = FRAMEOpenMap1->PnlGisTool;
  86. ChkVms->Align = alLeft;
  87. ChkCctv->Visible = true;
  88. ChkVms->Visible = true;
  89. EditMode = false;
  90. PgRunInfo->Properties->ActivePage = TsSgnlIxr;
  91. }
  92. //---------------------------------------------------------------------------
  93. void __fastcall TEVSP000M::CommClose()
  94. {
  95. try {
  96. CMM_SaveForm(g_sFormsDir, this);
  97. } catch(...) {
  98. }
  99. }
  100. //---------------------------------------------------------------------------
  101. void __fastcall TEVSP000M::FormShow(TObject *Sender)
  102. {
  103. APP_FillCode(CbType, "VHCL");
  104. Refresh();
  105. FRAMEOpenMap1->OpenMap();
  106. FormInit();
  107. TmrShow->Enabled = true;
  108. }
  109. //---------------------------------------------------------------------------
  110. void __fastcall TEVSP000M::FormInit()
  111. {
  112. FNewDb = false;
  113. }
  114. //---------------------------------------------------------------------------
  115. void __fastcall TEVSP000M::TmrShowTimer(TObject *Sender)
  116. {
  117. TmrShow->Enabled = false;
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TEVSP000M::BtnCloseClick(TObject *Sender)
  121. {
  122. Close();
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TEVSP000M::FormClose(TObject *Sender, TCloseAction &Action)
  126. {
  127. CommClose();
  128. EVSP000M = NULL;
  129. Action = caFree;
  130. }
  131. //---------------------------------------------------------------------------
  132. void __fastcall TEVSP000M::FormCloseQuery(TObject *Sender, bool &CanClose)
  133. {
  134. FRAMEOpenMap1->OnCloseQuery(CanClose);
  135. }
  136. //---------------------------------------------------------------------------
  137. void __fastcall TEVSP000M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  138. {
  139. try
  140. {
  141. if (AFirst)
  142. {
  143. sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_Evsp, 24, 24);
  144. FRAMEOpenMap1->ExecScript(sJs);
  145. FRAMEOpenMap1->ExecScript("showTrafficLayer(0)");
  146. //sJs.printf(L"setEditMode(%d, 1)", LyrTp_Link);
  147. //FRAMEOpenMap1->ExecScript(sJs);
  148. //FRAMEOpenMap1->ExecScript("initEditLayer()");
  149. //FRAMEOpenMap1->ExecScript("setEditArrow(1)");
  150. //FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  151. FRAMEOpenMap1->ExecScript("setNormalMode(1)");
  152. FRAMEOpenMap1->ExecScript("initTrafficLayer()");
  153. FRAMEOpenMap1->ExecScript("showTrafficTooltip(0)");
  154. sJs.printf(L"setTrafficLayerZoomVisible(%d, '1^2^3^4^5^6^7^8^9^10^11^12')", LyrTp_Link);
  155. FRAMEOpenMap1->ExecScript(sJs);
  156. sJs.printf(L"showHideTooltip(%d, 0)", LyrTp_Pos);
  157. FRAMEOpenMap1->ExecScript(sJs);
  158. sJs.printf(L"setMapImagePath(%d, 'facility/carPos_')", LyrTp_Pos);
  159. FRAMEOpenMap1->ExecScript(sJs);
  160. sJs.printf(L"setTrafficLayerZoomVisible(%d, '1^2^3^4^5^6^7^8^9^10^11^12')", LyrTp_Pos);
  161. FRAMEOpenMap1->ExecScript(sJs);
  162. sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_Pos, 48, 48);
  163. FRAMEOpenMap1->ExecScript(sJs);
  164. sJs.printf(L"setMapImageSize(%d, %d, %d)", LyrTp_MoveCar, 48, 48);
  165. FRAMEOpenMap1->ExecScript(sJs);
  166. sJs.printf(L"showLayer(%d, %d)", LyrTp_MoveCar, 1);
  167. FRAMEOpenMap1->ExecScript(sJs);
  168. Application->ProcessMessages();
  169. TmrInitGis->Enabled = true;
  170. return;
  171. }
  172. if (AFunc.Pos("onfacilityrightclick")) {
  173. int nLyrType;
  174. String sFID;
  175. //int X, Y;
  176. TStringList *pStringList = new TStringList;
  177. pStringList->CommaText = AArgs;
  178. try
  179. {
  180. nLyrType = pStringList->Strings[0].ToIntDef(0);
  181. sFID = pStringList->Strings[1];
  182. //X = pStringList->Strings[4].ToIntDef(0);
  183. //Y = pStringList->Strings[5].ToIntDef(0);
  184. //if (nLyrType != LyrTp_Vds)
  185. {
  186. OnMapPopupMenu(nLyrType, sFID, false);
  187. }
  188. }
  189. catch(Exception &e)
  190. {
  191. }
  192. delete pStringList;
  193. }
  194. } catch(Exception &exception) {
  195. }
  196. }
  197. //---------------------------------------------------------------------------
  198. void __fastcall TEVSP000M::InitGisFacility()
  199. {
  200. String sTemp;
  201. TCDSObject *pObj;
  202. TItsLayer *pLayer;
  203. ItsFacilityManager->FLists.Lock();
  204. try
  205. {
  206. FOR_STL(TItsFacility*, pFacility, ItsFacilityManager->FLists) {
  207. pObj = pFacility->Object;
  208. if (pObj == NULL) {
  209. continue;
  210. }
  211. if (pFacility->FCLT_TYPE != "VMS" && pFacility->FCLT_TYPE != "CCTV") {
  212. continue;
  213. }
  214. pLayer = ItsLayerManager->FLists.Find(pFacility->FCLT_TYPE);
  215. if (pLayer) {
  216. if (pLayer->arrObj != "") pLayer->arrObj += "|";
  217. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,%d,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_ID.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN, 0);
  218. pLayer->arrObj += sTemp;
  219. }
  220. }
  221. } __finally {
  222. ItsFacilityManager->FLists.UnLock();
  223. }
  224. FOR_STL(TItsLayer*, pLayer, ItsLayerManager->FLists) {
  225. pLayer->Visible = false;
  226. if (pLayer->arrObj != "") {
  227. sJs.printf(L"addFacility(%d, '%s')", pLayer->Index, pLayer->arrObj.c_str());
  228. FRAMEOpenMap1->ExecScript(sJs);
  229. pLayer->arrObj = "";
  230. sJs.printf(L"showLayer(%d, %d)", pLayer->Index, 1);
  231. FRAMEOpenMap1->ExecScript(sJs);
  232. }
  233. }
  234. }
  235. //---------------------------------------------------------------------------
  236. void __fastcall TEVSP000M::TmrInitGisTimer(TObject *Sender)
  237. {
  238. TmrInitGis->Enabled = false;
  239. if (!FRAMEOpenMap1->MapStart) return;
  240. InitGisFacility();
  241. LoadEvspVehicleRunInfo();
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TEVSP000M::LoadEvspVehicleRunInfo()
  245. {
  246. if (LoadPrioSgnlReqInfr()) {
  247. LoadPrioSgnlOperIxr();
  248. LoadPrioSgnlPath();
  249. }
  250. LoadEmrgVhclOperHs();
  251. }
  252. //---------------------------------------------------------------------------
  253. void __fastcall TEVSP000M::OnMapPopupMenu(int ALayerType, String AFID, bool AOnList)
  254. {
  255. FSelId = AFID;
  256. POINT p;
  257. GetCursorPos(&p);
  258. switch(ALayerType)
  259. {
  260. case LyrTp_Cctv:
  261. pmuCctv->Popup(p.x, p.y);
  262. break;
  263. case LyrTp_Vms:
  264. pmuVms->Popup(p.x, p.y);
  265. break;
  266. }
  267. }
  268. //---------------------------------------------------------------------------
  269. void __fastcall TEVSP000M::ShowStrmCamera(String AId, TPoint pt)
  270. {
  271. TItsFacility *pFacility = ItsFacilityManager->FLists.Find(AId);
  272. if (!pFacility) return;
  273. TCDSObject *pObj = (TCDSObject*)pFacility->Object;
  274. if (!pObj) return;
  275. try {
  276. if (pObj->FData3)
  277. {
  278. TFrmStreamPlayer *pForm = (TFrmStreamPlayer *)pObj->FData3;
  279. pForm->SetFocus();
  280. }
  281. else
  282. {
  283. TFrmStreamPlayer *pForm = new TFrmStreamPlayer(EVSP000M);
  284. pForm->FObj.ID = pObj->CTLR_ID;
  285. pForm->FObj.NAME = pObj->NAME;
  286. pForm->FObj.STRM_ADDR = pObj->STRM_ADDR;
  287. pForm->FObj.FULL_STRM_ADDR = pObj->FULL_STRM_ADDR;
  288. pForm->FObj.Data = (TCDSObject*)pObj;
  289. pForm->FObj.FCLT_TYPE = pObj->TYPE_CD;
  290. pForm->FObj.Installed = true;
  291. pForm->Parent = EVSP000M;
  292. if ((pt.x + pForm->Width + 5) > this->Width)
  293. {
  294. pt.x = this->Width - pForm->Width - 5;
  295. }
  296. if ((pt.y + pForm->Height + 5) > this->Height)
  297. {
  298. pt.y = this->Height - pForm->Height - 5;
  299. }
  300. //pForm->Left = Left + pt.x;
  301. //pForm->Top = Top + pt.y;
  302. pForm->Left = pt.x;
  303. pForm->Top = pt.y;
  304. pObj->FData3 = (void*)pForm;
  305. pForm->Show();
  306. }
  307. } catch(...) {}
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TEVSP000M::ShowVmsMessage(String AId, TPoint pt)
  311. {
  312. TItsFacility *pFacility = ItsFacilityManager->FLists.Find(AId);
  313. if (!pFacility) return;
  314. TVmsCtlr *pObj = (TVmsCtlr*)pFacility->Object;
  315. if (!pObj) return;
  316. try {
  317. if (pObj->FData3)
  318. {
  319. TFrmVmsMsg *pForm = (TFrmVmsMsg *)pObj->FData3;
  320. pForm->SetFocus();
  321. }
  322. else
  323. {
  324. TFrmVmsMsg *pForm = new TFrmVmsMsg(EVSP000M, pObj);
  325. pForm->Parent = EVSP000M;
  326. int nHG = pForm->ClientHeight - pForm->PnlVmsMsgDisp->Height;
  327. int nWG = pForm->ClientWidth - pForm->PnlVmsMsgDisp->Width;
  328. if ((pt.x + pForm->Width + 5) > this->Width)
  329. {
  330. pt.x = this->Width - pForm->Width - 5;
  331. }
  332. if ((pt.y + pForm->Height + 5) > this->Height)
  333. {
  334. pt.y = this->Height - pForm->Height - 5;
  335. }
  336. //pForm->Left = Left + pt.x;
  337. //pForm->Top = Top + pt.y;
  338. pForm->Left = pt.x;
  339. pForm->Top = pt.y;
  340. pObj->FData3 = (void*)pForm;
  341. pForm->Show();
  342. }
  343. } catch(...) {}
  344. }
  345. //---------------------------------------------------------------------------
  346. void __fastcall TEVSP000M::mnuVmsCamClick(TObject *Sender)
  347. {
  348. Application->ProcessMessages();
  349. TPoint pt;
  350. GetCursorPos(&pt);
  351. pt = EVSP000M->ScreenToClient(pt);
  352. ShowStrmCamera(FSelId, pt);
  353. }
  354. //---------------------------------------------------------------------------
  355. void __fastcall TEVSP000M::mnuVmsMsgClick(TObject *Sender)
  356. {
  357. Application->ProcessMessages();
  358. TPoint pt;
  359. GetCursorPos(&pt);
  360. pt = EVSP000M->ScreenToClient(pt);
  361. ShowVmsMessage(FSelId, pt);
  362. }
  363. //---------------------------------------------------------------------------
  364. void __fastcall TEVSP000M::mnuCctvCamClick(TObject *Sender)
  365. {
  366. Application->ProcessMessages();
  367. TPoint pt;
  368. GetCursorPos(&pt);
  369. pt = EVSP000M->ScreenToClient(pt);
  370. ShowStrmCamera(FSelId, pt);
  371. }
  372. //---------------------------------------------------------------------------
  373. void __fastcall TEVSP000M::pmuFacilityPopup(TObject *Sender)
  374. {
  375. TPopupMenu *pPopup = (TPopupMenu*)Sender;
  376. TItsFacility *pFacility = ItsFacilityManager->FLists.Find(FSelId);
  377. if (!pFacility) return;
  378. String sLayerType = ItsLayerManager->GetLayerName(pFacility->FCLT_TYPE);
  379. if (sLayerType == "") return;
  380. TCDSObject *pObj = pFacility->Object;
  381. if (!pObj) return;
  382. pPopup->Items->Items[0]->Caption = "[" + sLayerType + "] " + pObj->NAME;
  383. }
  384. //---------------------------------------------------------------------------
  385. void __fastcall TEVSP000M::TvListCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  386. bool &ADone)
  387. {
  388. if (AViewInfo) {
  389. String sRunInfo = AViewInfo->GridRecord->DisplayTexts[Col06->Index];
  390. if (sRunInfo.Pos("N")) {
  391. ACanvas->Brush->Color = clYellow;
  392. ACanvas->Font->Color = clRed;
  393. }
  394. }
  395. }
  396. //---------------------------------------------------------------------------
  397. void __fastcall TEVSP000M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  398. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  399. {
  400. TcxDataController *pGDC = TvList->DataController;
  401. int nRow = pGDC->FocusedRecordIndex;
  402. if( nRow <= -1 )
  403. return;
  404. String sVehicleId = pGDC->Values[nRow][Col01->Index];
  405. String sRunInfo = pGDC->Values[nRow][Col06->Index];
  406. String sServiceId = pGDC->Values[nRow][Col05->Index];
  407. GrpOprInfo->Caption = "▶ 운영정보 - " + sVehicleId;
  408. LoadEvspVehicleOprIxrInfo(sVehicleId);
  409. LoadEvspVehicleOprPathInfo(sVehicleId);
  410. TReqVhcl *pObj = FReqLists.Find(sVehicleId);
  411. if (pObj != NULL) {
  412. FRAMEOpenMap1->SelectObjectByPos(pObj->X_CRDN, pObj->Y_CRDN, true);
  413. }
  414. }
  415. //---------------------------------------------------------------------------
  416. void __fastcall TEVSP000M::LoadEvspVehicleOprIxrInfo(String AVehicleId)
  417. {
  418. String sQry;
  419. TADOQuery *pADO = NULL;
  420. CMM_ClearGridTableView(TvIxr);
  421. sQry = "SELECT B.SRVC_ID, B.IXR_NMBR, \r\n"
  422. " NVL(C.IXR_NM, '-') AS IXR_NM, \r\n"
  423. " B.IXR_ORD \r\n"
  424. " FROM PRIO_SGNL_REQ_INFR A, \r\n"
  425. " PRIO_SGNL_OPER_IXR B, \r\n"
  426. " SGNL_IXR_MNGM C \r\n"
  427. " WHERE A.EMRG_VHCL_ID = :p01 \r\n"
  428. " AND A.END_YN = 'N' \r\n"
  429. " AND A.SRVC_ID = B.SRVC_ID \r\n"
  430. " AND B.IXR_NMBR = C.SGNL_IXR_NMBR(+) \r\n"
  431. " ORDER BY B.IXR_ORD \r\n";
  432. try
  433. {
  434. int nRow;
  435. TvIxr->BeginUpdate();
  436. try
  437. {
  438. pADO = new TADOQuery(NULL);
  439. pADO->Close();
  440. pADO->Connection = ITSDb_GetConnection();
  441. pADO->SQL->Clear();
  442. pADO->SQL->Text = sQry;
  443. pADO->Parameters->ParamByName("p01")->Value = AVehicleId;
  444. pADO->Prepared = true;
  445. pADO->Open();
  446. for( ; !pADO->Eof; pADO->Next())
  447. {
  448. nRow = TvIxr->DataController->AppendRecord();
  449. TvIxr->DataController->Values[nRow][ColIxr01->Index] = pADO->FieldByName("IXR_ORD")->AsInteger;
  450. TvIxr->DataController->Values[nRow][ColIxr02->Index] = pADO->FieldByName("SRVC_ID")->AsString;
  451. TvIxr->DataController->Values[nRow][ColIxr03->Index] = pADO->FieldByName("IXR_NMBR")->AsString + "." + pADO->FieldByName("IXR_NM")->AsString;
  452. TvIxr->DataController->Values[nRow][ColIxr06->Index] = pADO->FieldByName("IXR_NMBR")->AsString;
  453. }
  454. }
  455. catch(EDatabaseError &E)
  456. {
  457. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  458. DBERRORMSG("TEVSP000M::LoadEvspVehicleOprIxrInfo", String(E.ClassName()), E.Message, sQry);
  459. throw Exception(String(E.ClassName()) + E.Message);
  460. }
  461. catch(Exception &exception)
  462. {
  463. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  464. DBERRORMSG("TEVSP000M::LoadEvspVehicleOprIxrInfo", String(exception.ClassName()), exception.Message, sQry);
  465. throw Exception(String(exception.ClassName()) + exception.Message);
  466. }
  467. }
  468. __finally
  469. {
  470. if (pADO)
  471. {
  472. pADO->Close();
  473. delete pADO;
  474. }
  475. TvIxr->EndUpdate();
  476. }
  477. }
  478. //---------------------------------------------------------------------------
  479. void __fastcall TEVSP000M::LoadEvspVehicleOprPathInfo(String AVehicleId)
  480. {
  481. String sQry;
  482. TADOQuery *pADO = NULL;
  483. CMM_ClearGridTableView(TvPath);
  484. sQry = "SELECT B.SRVC_ID, B.PHAS, \r\n"
  485. " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT \r\n"
  486. " FROM PRIO_SGNL_REQ_INFR A, \r\n"
  487. " PRIO_SGNL_PATH B \r\n"
  488. " WHERE A.EMRG_VHCL_ID = :p01 \r\n"
  489. " AND A.END_YN = 'N' \r\n"
  490. " AND A.SRVC_ID = B.SRVC_ID \r\n"
  491. " ORDER BY B.SRVC_ID \r\n";
  492. try
  493. {
  494. int nRow;
  495. TvPath->BeginUpdate();
  496. try
  497. {
  498. pADO = new TADOQuery(NULL);
  499. pADO->Close();
  500. pADO->Connection = ITSDb_GetConnection();
  501. pADO->SQL->Clear();
  502. pADO->SQL->Text = sQry;
  503. pADO->Parameters->ParamByName("p01")->Value = AVehicleId;
  504. pADO->Prepared = true;
  505. pADO->Open();
  506. for( ; !pADO->Eof; pADO->Next())
  507. {
  508. String SRVC_ID = pADO->FieldByName("SRVC_ID")->AsString;
  509. String CLCT_DT = pADO->FieldByName("CLCT_DT")->AsString;
  510. String PHAS = pADO->FieldByName("PHAS")->AsString;
  511. TStringList *pStringList = new TStringList;
  512. pStringList->CommaText = PHAS;
  513. int SEQ = 1;
  514. int IDX = 0;
  515. int COUNT = pStringList->Count;
  516. for (int ii = 0; ii < (COUNT/6); ii++) {
  517. IDX = ii * 6;
  518. float POS_X = pStringList->Strings[IDX+4].ToIntDef(0)/1000000.;
  519. float POS_Y = pStringList->Strings[IDX+5].ToIntDef(0)/1000000.;
  520. if (POS_X < 100. || POS_X > 140.) {
  521. continue;
  522. }
  523. if (POS_Y < 30. || POS_Y > 50.) {
  524. continue;
  525. }
  526. nRow = TvPath->DataController->AppendRecord();
  527. TvPath->DataController->Values[nRow][ColPath02->Index] = SRVC_ID;
  528. TvPath->DataController->Values[nRow][ColPath01->Index] = SEQ;
  529. TvPath->DataController->Values[nRow][ColPath03->Index] = POS_X;
  530. TvPath->DataController->Values[nRow][ColPath04->Index] = POS_Y;
  531. SEQ++;
  532. }
  533. delete pStringList;
  534. }
  535. }
  536. catch(EDatabaseError &E)
  537. {
  538. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  539. DBERRORMSG("TEVSP000M::LoadEvspVehicleOprPathInfo", String(E.ClassName()), E.Message, sQry);
  540. throw Exception(String(E.ClassName()) + E.Message);
  541. }
  542. catch(Exception &exception)
  543. {
  544. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  545. DBERRORMSG("TEVSP000M::LoadEvspVehicleOprPathInfo", String(exception.ClassName()), exception.Message, sQry);
  546. throw Exception(String(exception.ClassName()) + exception.Message);
  547. }
  548. }
  549. __finally
  550. {
  551. if (pADO)
  552. {
  553. pADO->Close();
  554. delete pADO;
  555. }
  556. TvPath->EndUpdate();
  557. }
  558. }
  559. //---------------------------------------------------------------------------
  560. bool __fastcall TEVSP000M::LoadPrioSgnlReqInfr()
  561. {
  562. String sQry;
  563. TADOQuery *pADO = NULL;
  564. sQry = "SELECT A.EMRG_VHCL_ID, NVL(A.VHCL_NMBR, A.EMRG_VHCL_ID) AS VHCL_NMBR, \r\n"
  565. " A.VHCL_KIND, A.USE_YN, \r\n"
  566. " NVL(B.SRVC_ID, '-') AS SRVC_ID, NVL(B.END_YN, '-') AS END_YN \r\n"
  567. " FROM EMRG_VHCL A \r\n"
  568. " LEFT OUTER JOIN PRIO_SGNL_REQ_INFR B \r\n"
  569. " ON A.EMRG_VHCL_ID = B.EMRG_VHCL_ID \r\n"
  570. " WHERE A.USE_YN = 'Y' \r\n"
  571. " ORDER BY B.END_YN, A.EMRG_VHCL_ID \r\n";
  572. CMM_ClearGridTableView(TvList);
  573. bool isUpdate = false;
  574. try
  575. {
  576. int nRow;
  577. TvList->BeginUpdate();
  578. try
  579. {
  580. pADO = new TADOQuery(NULL);
  581. pADO->Close();
  582. pADO->Connection = ITSDb_GetConnection();
  583. pADO->SQL->Clear();
  584. pADO->SQL->Text = sQry;
  585. pADO->Prepared = true;
  586. pADO->Open();
  587. for( ; !pADO->Eof; pADO->Next())
  588. {
  589. String VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString;
  590. int VHCL_NMBR = pADO->FieldByName("VHCL_NMBR")->AsInteger;
  591. nRow = TvList->DataController->AppendRecord();
  592. TvList->DataController->Values[nRow][Col01->Index] = VHCL_ID;
  593. TvList->DataController->Values[nRow][Col02->Index] = VHCL_NMBR;
  594. String VHCL_KIND = pADO->FieldByName("VHCL_KIND")->AsString;
  595. String USE_YN = pADO->FieldByName("USE_YN")->AsString;
  596. String END_YN = pADO->FieldByName("END_YN")->AsString;
  597. if (USE_YN == "Y") USE_YN = "[Y] 사용";
  598. else if (USE_YN == "N") USE_YN = "[N] 미사용";
  599. if (END_YN == "Y") END_YN = "[Y] 종료";
  600. else if (END_YN == "N") END_YN = "[N] 운영중";
  601. String VHCL_KIND_DESC = APP_GetCodeName(CbType, VHCL_KIND);
  602. TvList->DataController->Values[nRow][Col03->Index] = "[" + VHCL_KIND + "] " + VHCL_KIND_DESC;
  603. TvList->DataController->Values[nRow][Col04->Index] = USE_YN;
  604. TvList->DataController->Values[nRow][Col05->Index] = pADO->FieldByName("SRVC_ID")->AsString;
  605. TvList->DataController->Values[nRow][Col06->Index] = END_YN;
  606. TReqVhcl *pReqVhcl = FReqLists.Find(VHCL_ID);
  607. if (pReqVhcl == NULL) {
  608. isUpdate = true;
  609. pReqVhcl = new TReqVhcl();
  610. pReqVhcl->VHCL_ID = VHCL_ID;
  611. pReqVhcl->VHCL_NMBR = String(VHCL_NMBR);
  612. pReqVhcl->VHCL_KIND_DESC = VHCL_KIND_DESC;
  613. pReqVhcl->END_YN = END_YN;
  614. FReqLists.Push(pReqVhcl->VHCL_ID, pReqVhcl);
  615. }
  616. else {
  617. if (pReqVhcl->END_YN != END_YN) {
  618. pReqVhcl->END_YN = END_YN;
  619. isUpdate = true;
  620. }
  621. }
  622. }
  623. }
  624. catch(EDatabaseError &E)
  625. {
  626. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  627. DBERRORMSG("TEVSP000M::LoadPrioSgnlReqInfr", String(E.ClassName()), E.Message, sQry);
  628. throw Exception(String(E.ClassName()) + E.Message);
  629. }
  630. catch(Exception &exception)
  631. {
  632. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  633. DBERRORMSG("TEVSP000M::LoadPrioSgnlReqInfr", String(exception.ClassName()), exception.Message, sQry);
  634. throw Exception(String(exception.ClassName()) + exception.Message);
  635. }
  636. }
  637. __finally
  638. {
  639. if (pADO)
  640. {
  641. pADO->Close();
  642. delete pADO;
  643. }
  644. TvList->EndUpdate();
  645. }
  646. return isUpdate;
  647. }
  648. //---------------------------------------------------------------------------
  649. void __fastcall TEVSP000M::LoadPrioSgnlOperIxr()
  650. {
  651. String sQry;
  652. TADOQuery *pADO = NULL;
  653. FIxrLists.Clear();
  654. sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, B.IXR_NMBR, \r\n"
  655. " B.IXR_ORD \r\n"
  656. " FROM PRIO_SGNL_REQ_INFR A, \r\n"
  657. " PRIO_SGNL_OPER_IXR B \r\n"
  658. " WHERE A.END_YN = 'N' \r\n"
  659. " AND A.SRVC_ID = B.SRVC_ID \r\n"
  660. " ORDER BY B.IXR_ORD \r\n";
  661. try
  662. {
  663. int nRow;
  664. try
  665. {
  666. pADO = new TADOQuery(NULL);
  667. pADO->Close();
  668. pADO->Connection = ITSDb_GetConnection();
  669. pADO->SQL->Clear();
  670. pADO->SQL->Text = sQry;
  671. pADO->Prepared = true;
  672. pADO->Open();
  673. for( ; !pADO->Eof; pADO->Next())
  674. {
  675. String IXR_NMBR = pADO->FieldByName("IXR_NMBR")->AsString;
  676. TSgnlCtlr* pIxr = SgnlCtlrManager->FLists.Find(IXR_NMBR);
  677. if (!pIxr) {
  678. continue;
  679. }
  680. TOprIxr *pOprIxr = new TOprIxr();
  681. pOprIxr->VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString;
  682. pOprIxr->ORD = pADO->FieldByName("IXR_ORD")->AsInteger;
  683. pOprIxr->IXR_NMBR = IXR_NMBR;
  684. pOprIxr->X_CRDN = pIxr->X_CRDN;
  685. pOprIxr->Y_CRDN = pIxr->Y_CRDN;
  686. pOprIxr->IXR_NM = pIxr->IXR_NM;
  687. FIxrLists.Push(pOprIxr->IXR_NMBR, pOprIxr);
  688. }
  689. }
  690. catch(EDatabaseError &E)
  691. {
  692. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  693. DBERRORMSG("TEVSP000M::LoadPrioSgnlOperIxr", String(E.ClassName()), E.Message, sQry);
  694. throw Exception(String(E.ClassName()) + E.Message);
  695. }
  696. catch(Exception &exception)
  697. {
  698. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  699. DBERRORMSG("TEVSP000M::LoadPrioSgnlOperIxr", String(exception.ClassName()), exception.Message, sQry);
  700. throw Exception(String(exception.ClassName()) + exception.Message);
  701. }
  702. }
  703. __finally
  704. {
  705. if (pADO)
  706. {
  707. pADO->Close();
  708. delete pADO;
  709. }
  710. }
  711. UpdateOprIxrInfo();
  712. }
  713. //---------------------------------------------------------------------------
  714. void __fastcall TEVSP000M::LoadPrioSgnlPath()
  715. {
  716. String sQry;
  717. TADOQuery *pADO = NULL;
  718. sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, \r\n"
  719. " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT, \r\n"
  720. " B.PHAS \r\n"
  721. " FROM PRIO_SGNL_REQ_INFR A, \r\n"
  722. " PRIO_SGNL_PATH B \r\n"
  723. " WHERE A.END_YN = 'N' \r\n"
  724. " AND A.SRVC_ID = B.SRVC_ID \r\n"
  725. " ORDER BY A.EMRG_VHCL_ID \r\n";
  726. sJs.printf(L"removeLayerObject(%d)", LyrTp_CarPos);
  727. FRAMEOpenMap1->ExecScript(sJs);
  728. sJs.printf(L"removeLayerObject(%d)", LyrTp_Link);
  729. FRAMEOpenMap1->ExecScript(sJs);
  730. sJs.printf(L"removeLayerObject(%d)", LyrTp_Pos);
  731. FRAMEOpenMap1->ExecScript(sJs);
  732. String arrStr = "";
  733. String arrEnd = "";
  734. String arrObj = "";
  735. String sTemp;
  736. String sLast = "";
  737. try
  738. {
  739. try
  740. {
  741. pADO = new TADOQuery(NULL);
  742. pADO->Close();
  743. pADO->Connection = ITSDb_GetConnection();
  744. pADO->SQL->Clear();
  745. pADO->SQL->Text = sQry;
  746. pADO->Prepared = true;
  747. pADO->Open();
  748. for( ; !pADO->Eof; pADO->Next())
  749. {
  750. String EMRG_VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString;
  751. String SRVC_ID = pADO->FieldByName("SRVC_ID")->AsString;
  752. String CLCT_DT = pADO->FieldByName("CLCT_DT")->AsString;
  753. String PHAS = pADO->FieldByName("PHAS")->AsString;
  754. TStringList *pStringList = new TStringList;
  755. pStringList->CommaText = PHAS;
  756. String X_CRDN_ARR = "";
  757. String Y_CRDN_ARR = "";
  758. int SEQ = 1;
  759. int IDX = 0;
  760. int COUNT = pStringList->Count;
  761. int TOTAL = COUNT/6;
  762. for (int ii = 0; ii < TOTAL; ii++) {
  763. IDX = ii * 6;
  764. float POS_X = pStringList->Strings[IDX+4].ToIntDef(0)/1000000.;
  765. float POS_Y = pStringList->Strings[IDX+5].ToIntDef(0)/1000000.;
  766. if (POS_X < 100. || POS_X > 140.) {
  767. continue;
  768. }
  769. if (POS_Y < 30. || POS_Y > 50.) {
  770. continue;
  771. }
  772. if (arrObj != "") arrObj += "|";
  773. String KEY = SRVC_ID + "." + String(SEQ);
  774. if (SEQ == 1) {
  775. sTemp.printf(L"%s,%s,%d,%.6f,%.6f,0,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y);
  776. arrStr.printf(L"%s,%s,%d,%.6f,%.6f,3,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y);
  777. }
  778. else {
  779. sTemp.printf(L"%s,%s,%d,%.6f,%.6f,1,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y);
  780. sLast.printf(L"%s,%s,%d,%.6f,%.6f,2,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y);
  781. arrEnd.printf(L"%s,%s,%d,%.6f,%.6f,4,0,0,0", KEY.c_str(), KEY.c_str(), SEQ, POS_X, POS_Y);
  782. }
  783. arrObj += sTemp;
  784. sTemp.printf(L"%.6f", POS_X);
  785. if (X_CRDN_ARR != "") X_CRDN_ARR += ",";
  786. X_CRDN_ARR += sTemp;
  787. sTemp.printf(L"%.6f", POS_Y);
  788. if (Y_CRDN_ARR != "") Y_CRDN_ARR += ",";
  789. Y_CRDN_ARR += sTemp;
  790. SEQ++;
  791. }
  792. sJs.printf(L"addLink('%s', '%s', '1', '%d', '%d', '%d', %d, '%s', '%s')",
  793. SRVC_ID.c_str(),
  794. SRVC_ID.c_str(),
  795. SEQ-1,
  796. SEQ-1,
  797. SEQ-1,
  798. 1,
  799. X_CRDN_ARR.c_str(),
  800. Y_CRDN_ARR.c_str());
  801. FRAMEOpenMap1->ExecScript(sJs);
  802. delete pStringList;
  803. }
  804. }
  805. catch(EDatabaseError &E)
  806. {
  807. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  808. DBERRORMSG("TEVSP000M::LoadPrioSgnlPath", String(E.ClassName()), E.Message, sQry);
  809. throw Exception(String(E.ClassName()) + E.Message);
  810. }
  811. catch(Exception &exception)
  812. {
  813. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  814. DBERRORMSG("TEVSP000M::LoadPrioSgnlPath", String(exception.ClassName()), exception.Message, sQry);
  815. throw Exception(String(exception.ClassName()) + exception.Message);
  816. }
  817. }
  818. __finally
  819. {
  820. if (pADO)
  821. {
  822. pADO->Close();
  823. delete pADO;
  824. }
  825. if (arrObj != "") {
  826. if (sLast != "") {
  827. arrObj += "|";
  828. arrObj += sLast;
  829. }
  830. sJs.printf(L"addFacility(%d, '%s')", LyrTp_Pos, String(arrStr + "|" + arrEnd).c_str());
  831. FRAMEOpenMap1->ExecScript(sJs);
  832. sJs.printf(L"addFacility(%d, '%s')", LyrTp_CarPos, arrObj.c_str());
  833. FRAMEOpenMap1->ExecScript(sJs);
  834. sJs.printf(L"showLayer(%d, %d)", LyrTp_CarPos, 1);
  835. FRAMEOpenMap1->ExecScript(sJs);
  836. sJs.printf(L"showLayer(%d, %d)", LyrTp_Pos, 1);
  837. FRAMEOpenMap1->ExecScript(sJs);
  838. sJs.printf(L"showLayer(%d, %d)", LyrTp_Link, 1);
  839. FRAMEOpenMap1->ExecScript(sJs);
  840. }
  841. }
  842. }
  843. //---------------------------------------------------------------------------
  844. void __fastcall TEVSP000M::LoadEmrgVhclOperHs()
  845. {
  846. String sQry;
  847. TADOQuery *pADO = NULL;
  848. sQry = "SELECT A.EMRG_VHCL_ID, B.SRVC_ID, \r\n"
  849. " TO_CHAR(B.CLCT_DT, 'YYYY-MM-DD HH24:MI:SS') AS CLCT_DT, \r\n"
  850. " B.CLCT_NMBR, \r\n"
  851. " B.X_CRDN/1000000 AS X_CRDN, B.Y_CRDN/1000000 AS Y_CRDN \r\n"
  852. " FROM PRIO_SGNL_REQ_INFR A, \r\n"
  853. " EMRG_VHCL_OPER_HS B \r\n"
  854. " WHERE A.END_YN = 'N' \r\n"
  855. " AND A.EMRG_VHCL_ID = B.EMRG_VHCL_ID \r\n"
  856. " AND A.SRVC_ID = B.SRVC_ID \r\n"
  857. " ORDER BY A.EMRG_VHCL_ID, B.CLCT_NMBR \r\n";
  858. try
  859. {
  860. try
  861. {
  862. pADO = new TADOQuery(NULL);
  863. pADO->Close();
  864. pADO->Connection = ITSDb_GetConnection();
  865. pADO->SQL->Clear();
  866. pADO->SQL->Text = sQry;
  867. pADO->Prepared = true;
  868. pADO->Open();
  869. for( ; !pADO->Eof; pADO->Next())
  870. {
  871. String VHCL_ID = pADO->FieldByName("EMRG_VHCL_ID")->AsString;
  872. TReqVhcl *pReqVhcl = FReqLists.Find(VHCL_ID);
  873. if (pReqVhcl != NULL) {
  874. pReqVhcl->END_YN = "N";
  875. pReqVhcl->X_CRDN = pADO->FieldByName("X_CRDN")->AsFloat;
  876. pReqVhcl->Y_CRDN = pADO->FieldByName("Y_CRDN")->AsFloat;
  877. }
  878. }
  879. }
  880. catch(EDatabaseError &E)
  881. {
  882. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  883. DBERRORMSG("TEVSP000M::LoadEmrgVhclOperHs", String(E.ClassName()), E.Message, sQry);
  884. throw Exception(String(E.ClassName()) + E.Message);
  885. }
  886. catch(Exception &exception)
  887. {
  888. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  889. DBERRORMSG("TEVSP000M::LoadEmrgVhclOperHs", String(exception.ClassName()), exception.Message, sQry);
  890. throw Exception(String(exception.ClassName()) + exception.Message);
  891. }
  892. }
  893. __finally
  894. {
  895. if (pADO)
  896. {
  897. pADO->Close();
  898. delete pADO;
  899. }
  900. sJs.printf(L"removeLayerObject(%d)", LyrTp_MoveCar);
  901. FRAMEOpenMap1->ExecScript(sJs);
  902. String arrObj = "";
  903. String sTemp;
  904. double X_CRDN = 0.;
  905. double Y_CRDN = 0.;
  906. FOR_STL(TReqVhcl*, pObj, FReqLists) {
  907. if (pObj->END_YN == "N" && pObj->X_CRDN != 0. && pObj->Y_CRDN != 0.) {
  908. if (arrObj != "") arrObj += "|";
  909. X_CRDN = pObj->X_CRDN;
  910. Y_CRDN = pObj->Y_CRDN;
  911. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->VHCL_ID.c_str(), pObj->VHCL_KIND_DESC.c_str(), pObj->VHCL_NMBR.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  912. arrObj += sTemp;
  913. }
  914. }
  915. if (arrObj != "")
  916. {
  917. sJs.printf(L"addFacility(%d, '%s')", LyrTp_MoveCar, arrObj.c_str());
  918. FRAMEOpenMap1->ExecScript(sJs);
  919. sJs.printf(L"selectPosWithoutArrow(0, '%.7f', '%.7f')", X_CRDN, Y_CRDN);
  920. FRAMEOpenMap1->ExecScript(sJs);
  921. }
  922. }
  923. }
  924. //---------------------------------------------------------------------------
  925. void __fastcall TEVSP000M::UpdateOprIxrInfo()
  926. {
  927. if (!FRAMEOpenMap1->MapStart) return;
  928. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  929. FRAMEOpenMap1->ExecScript(sJs);
  930. String arrObj = "";
  931. String sTemp;
  932. String VHCL_ID;
  933. int ORD;
  934. SgnlCtlrManager->FLists.Lock();
  935. try
  936. {
  937. FOR_STL(TOprIxr*, pObj, FIxrLists) {
  938. //String IXR_INFO = pObj->VHCL_ID + "-" + String(pObj->ORD) + ", " + pObj->IXR_NMBR;
  939. if (arrObj != "") arrObj += "|";
  940. sTemp.printf(L"%s,%d,%s,%.6f,%.6f,0,0,0,0", pObj->IXR_NMBR.c_str(), pObj->ORD, pObj->IXR_NM.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  941. arrObj += sTemp;
  942. }
  943. } __finally {
  944. SgnlCtlrManager->FLists.UnLock();
  945. if (arrObj != "")
  946. {
  947. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  948. FRAMEOpenMap1->ExecScript(sJs);
  949. }
  950. }
  951. }
  952. //---------------------------------------------------------------------------
  953. void __fastcall TEVSP000M::ChkShowHideFacilityClick(TObject *Sender)
  954. {
  955. // CCTV/VMS Show/Hide
  956. if (!FRAMEOpenMap1->MapStart) return;
  957. TcxCheckBox *pCheckBox = (TcxCheckBox*)Sender;
  958. sJs.printf(L"showLayer(%d, %d)", pCheckBox->Tag, (pCheckBox->Checked) ? 1 : 0);
  959. FRAMEOpenMap1->ExecScript(sJs);
  960. }
  961. //---------------------------------------------------------------------------
  962. void __fastcall TEVSP000M::TvIxrCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  963. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  964. {
  965. TcxDataController *pGDC = TvIxr->DataController;
  966. int nRow = pGDC->FocusedRecordIndex;
  967. if( nRow <= -1 )
  968. return;
  969. String IXR_NMBR = pGDC->Values[nRow][ColIxr06->Index];
  970. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, IXR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  971. FRAMEOpenMap1->ExecScript(sJs);
  972. }
  973. //---------------------------------------------------------------------------
  974. void __fastcall TEVSP000M::TvPathCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  975. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  976. {
  977. TcxDataController *pGDC = TvPath->DataController;
  978. int nRow = pGDC->FocusedRecordIndex;
  979. if( nRow <= -1 )
  980. return;
  981. float xCrdn = pGDC->Values[nRow][ColPath03->Index];
  982. float yCrdn = pGDC->Values[nRow][ColPath04->Index];
  983. FRAMEOpenMap1->SelectObjectByPos(xCrdn, yCrdn, true);
  984. }
  985. //---------------------------------------------------------------------------
  986. void __fastcall TEVSP000M::BtnSearchClick(TObject *Sender)
  987. {
  988. TSqlCursor sqlCrs;
  989. BtnSearch->Enabled = false;
  990. LoadEvspVehicleRunInfo();
  991. BtnSearch->Enabled = true;
  992. }
  993. //---------------------------------------------------------------------------
  994. void __fastcall TEVSP000M::ChkAutoRefreshClick(TObject *Sender)
  995. {
  996. BtnSearch->Enabled = !ChkAutoRefresh->Checked;
  997. if (ChkAutoRefresh->Checked) {
  998. String interVal = CboAutoRefreshSec->Text;
  999. interVal = StringReplace(interVal , "초", "", TReplaceFlags() << rfReplaceAll);
  1000. interVal = interVal.Trim();
  1001. int refreshSec = interVal.ToIntDef(5);
  1002. TmrRefresh->Interval = refreshSec * 1000;
  1003. TmrRefreshTimer((TObject*)TmrRefresh);
  1004. }
  1005. else {
  1006. TmrRefresh->Enabled = false;
  1007. }
  1008. }
  1009. //---------------------------------------------------------------------------
  1010. void __fastcall TEVSP000M::TmrRefreshTimer(TObject *Sender)
  1011. {
  1012. TmrRefresh->Enabled = false;
  1013. BtnSearchClick((TObject*)BtnSearch);
  1014. if (ChkAutoRefresh->Checked) {
  1015. TmrRefresh->Enabled = true;
  1016. BtnSearch->Enabled = false;
  1017. }
  1018. else {
  1019. BtnSearch->Enabled = true;
  1020. }
  1021. }
  1022. //---------------------------------------------------------------------------