EVSP300MF.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSIfsc_VMSF.h"
  7. #include "CDSNodeF.h"
  8. #include "ITSLangTransF.h"
  9. #include "ITSMapF.h"
  10. #include "WindowMsgF.h"
  11. #pragma hdrstop
  12. #include "EVSP300MF.h"
  13. //---------------------------------------------------------------------------
  14. #pragma package(smart_init)
  15. #pragma link "cxButtons"
  16. #pragma link "cxCheckBox"
  17. #pragma link "cxClasses"
  18. #pragma link "cxContainer"
  19. #pragma link "cxControls"
  20. #pragma link "cxCustomData"
  21. #pragma link "cxData"
  22. #pragma link "cxDataStorage"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxFilter"
  26. #pragma link "cxGraphics"
  27. #pragma link "cxGrid"
  28. #pragma link "cxGridCustomTableView"
  29. #pragma link "cxGridCustomView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxGroupBox"
  33. #pragma link "cxLabel"
  34. #pragma link "cxLookAndFeelPainters"
  35. #pragma link "cxLookAndFeels"
  36. #pragma link "cxMaskEdit"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "cxTextEdit"
  40. #pragma link "dxSkinBlack"
  41. #pragma link "dxSkinBlue"
  42. #pragma link "dxSkinCaramel"
  43. #pragma link "dxSkinCoffee"
  44. #pragma link "dxSkinDarkRoom"
  45. #pragma link "dxSkinDarkSide"
  46. #pragma link "dxSkinFoggy"
  47. #pragma link "dxSkinGlassOceans"
  48. #pragma link "dxSkiniMaginary"
  49. #pragma link "dxSkinLilian"
  50. #pragma link "dxSkinLiquidSky"
  51. #pragma link "dxSkinLondonLiquidSky"
  52. #pragma link "dxSkinMcSkin"
  53. #pragma link "dxSkinMoneyTwins"
  54. #pragma link "dxSkinOffice2007Black"
  55. #pragma link "dxSkinOffice2007Blue"
  56. #pragma link "dxSkinOffice2007Green"
  57. #pragma link "dxSkinOffice2007Pink"
  58. #pragma link "dxSkinOffice2007Silver"
  59. #pragma link "dxSkinOffice2010Black"
  60. #pragma link "dxSkinOffice2010Blue"
  61. #pragma link "dxSkinOffice2010Silver"
  62. #pragma link "dxSkinsCore"
  63. #pragma link "dxSkinscxPCPainter"
  64. #pragma link "dxSkinSeven"
  65. #pragma link "dxSkinSharp"
  66. #pragma link "dxSkinSilver"
  67. #pragma link "dxSkinStardust"
  68. #pragma link "FRAME_VmsListF"
  69. #pragma link "FRAME_OpenMapF"
  70. #pragma link "cxClasses"
  71. #pragma link "cxCustomData"
  72. #pragma link "cxData"
  73. #pragma link "cxDataStorage"
  74. #pragma link "cxFilter"
  75. #pragma link "cxGrid"
  76. #pragma link "cxGridCustomTableView"
  77. #pragma link "cxGridCustomView"
  78. #pragma link "cxGridLevel"
  79. #pragma link "cxGridTableView"
  80. #pragma link "cxStyles"
  81. #pragma link "dxSkinscxPCPainter"
  82. #pragma link "cxCalc"
  83. #pragma resource "*.dfm"
  84. TEVSP300M *EVSP300M = NULL;
  85. //---------------------------------------------------------------------------
  86. void TEVSP300M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  87. {
  88. try
  89. {
  90. if (!EVSP300M) return;
  91. EVSP300M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  92. }
  93. catch(Exception &exception)
  94. {
  95. }
  96. }
  97. //---------------------------------------------------------------------------
  98. __fastcall TEVSP300M::TEVSP300M(TComponent* Owner)
  99. : TForm(Owner)
  100. {
  101. LangTrans->Translate(this, ITSDb_GetConnection());
  102. ITSSkin_Load(this);
  103. //CMM_LoadForm(g_sFormsDir, this);
  104. UpdateSkin();
  105. FUpdate= false;
  106. FTitle = Caption;//"VMS 정보제공구간 관리";
  107. FInitComm = 2;
  108. FSelComm = 1;
  109. if (!VmsIxrManager) {
  110. VmsIxrManager = new TVmsIxrManager();
  111. }
  112. VmsIxrManager->LoadFromDb();
  113. if (!SgnlCtlrManager) {
  114. SgnlCtlrManager = new TSgnlCtlrManager();
  115. }
  116. SgnlCtlrManager->LoadFromDb();
  117. #if 0
  118. if (!LinkManager)
  119. {
  120. LinkManager = new TLinkManager();
  121. LinkManager->LoadFromDb();
  122. if (g_AppCfg.isLoadFromFile)
  123. {
  124. LinkManager->LoadVrtxFromFile();
  125. }
  126. else
  127. {
  128. LinkManager->LoadVrtxFromDb();
  129. }
  130. }
  131. VmsEvspManager->LoadFromDb();
  132. #endif
  133. m_pGDC = FRAMEVmsList1->TvList->DataController;
  134. FRAMEVmsList1->PnlTop->Visible = false;
  135. FRAMEVmsList1->PnlBottom->Visible = false;
  136. FRAMEVmsList1->ColumnSel->Visible = false;
  137. FRAMEVmsList1->Column04->Visible = false;
  138. FRAMEVmsList1->Column06->Visible = false;
  139. FRAMEVmsList1->Column07->Visible = false;
  140. FRAMEVmsList1->Column10->Visible = false;
  141. FRAMEVmsList1->Column08->Visible = false;
  142. FRAMEVmsList1->Column09->Visible = false;
  143. FLayerIdx = LyrTp_Vms;
  144. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  145. FRAMEOpenMap1->ChkShowNmbr->Visible = false;
  146. FRAMEOpenMap1->BtnMapSelect->Visible = false;
  147. FRAMEOpenMap1->MapCallbackFunc = TEVSP300M_MapCallback;
  148. EditMode = false;
  149. }
  150. //---------------------------------------------------------------------------
  151. void __fastcall TEVSP300M::UpdateSkin()
  152. {
  153. }
  154. //---------------------------------------------------------------------------
  155. void __fastcall TEVSP300M::CommClose()
  156. {
  157. try
  158. {
  159. CMM_SaveForm(g_sFormsDir, this);
  160. }
  161. catch(...)
  162. {
  163. }
  164. }
  165. //---------------------------------------------------------------------------
  166. void __fastcall TEVSP300M::FormShow(TObject *Sender)
  167. {
  168. Refresh();
  169. UpdateSkin();
  170. FRAMEOpenMap1->OpenMap();
  171. FormInit();
  172. ChangeEditMode(1);
  173. TmrShow->Enabled = true;
  174. }
  175. //---------------------------------------------------------------------------
  176. void __fastcall TEVSP300M::UpdateIxrSelect(String AIxrNmbr, int ASelFalg)
  177. {
  178. if (!FRAMEOpenMap1->MapStart) return;
  179. sJs.printf(L"updateFacilityComm(%d, '%s', %d)", LyrTp_Evsp, AIxrNmbr.c_str(), ASelFalg);
  180. FRAMEOpenMap1->ExecScript(sJs);
  181. }
  182. //---------------------------------------------------------------------------
  183. void __fastcall TEVSP300M::FormInit()
  184. {
  185. //제공구간목록이 초기화되기전에 이전정보를 지도에서 지워준다.
  186. if (FRAMEOpenMap1->MapStart)
  187. {
  188. int nRow;
  189. TcxDataController *pGDC = TvIxr->DataController;
  190. try
  191. {
  192. int nSeq = 1;
  193. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  194. {
  195. String sIxrNmbr = pGDC->Values[ii][ColLink2->Index];
  196. UpdateIxrSelect(sIxrNmbr, FInitComm);
  197. }
  198. }
  199. catch(...)
  200. {
  201. }
  202. }
  203. EdNmbr->Text = "";
  204. EdCtlrId->Text = "";
  205. EdCtlrlNm->Text = "";
  206. CMM_ClearGridTableView(TvIxr);
  207. EdVmsNmbr->Text = "";
  208. FNewDb = false;
  209. }
  210. //---------------------------------------------------------------------------
  211. void __fastcall TEVSP300M::TmrShowTimer(TObject *Sender)
  212. {
  213. TmrShow->Enabled = false;
  214. UpdateList();
  215. }
  216. //---------------------------------------------------------------------------
  217. void __fastcall TEVSP300M::UpdateList()
  218. {
  219. FRAMEVmsList1->UpdateList();
  220. }
  221. //---------------------------------------------------------------------------
  222. void __fastcall TEVSP300M::BtnCloseClick(TObject *Sender)
  223. {
  224. Close();
  225. }
  226. //---------------------------------------------------------------------------
  227. void __fastcall TEVSP300M::FormClose(TObject *Sender, TCloseAction &Action)
  228. {
  229. CommClose();
  230. EVSP300M = NULL;
  231. Action = caFree;
  232. }
  233. //---------------------------------------------------------------------------
  234. void __fastcall TEVSP300M::FormCloseQuery(TObject *Sender, bool &CanClose)
  235. {
  236. if (FUpdate)
  237. {
  238. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  239. }
  240. FRAMEVmsList1->OnCloseQuery(CanClose);
  241. FRAMEOpenMap1->OnCloseQuery(CanClose);
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TEVSP300M::DisplayInfo(TVmsCtlr* AObj)
  245. {
  246. FormInit();
  247. if (!AObj) return;
  248. EdNmbr->Text = AObj->CTLR_NMBR;
  249. EdCtlrId->Text = AObj->CTLR_ID;
  250. EdCtlrlNm->Text = AObj->NAME;
  251. ChangeEditMode(3);
  252. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  253. FRAMEOpenMap1->ExecScript(sJs);
  254. DisplayRltnIxr(AObj);
  255. }
  256. //---------------------------------------------------------------------------
  257. void __fastcall TEVSP300M::DisplayRltnIxr(TVmsCtlr* AObj)
  258. {
  259. if (!AObj) return;
  260. CMM_ClearGridTableView(TvIxr);
  261. String sSigCtlrs = "";
  262. TVmsIxr *pVms = VmsIxrManager->FLists.Find(AObj->CTLR_NMBR);
  263. if (!pVms) {
  264. pVms = new TVmsIxr();
  265. pVms->VMS_CTLR_NMBR = AObj->CTLR_NMBR;
  266. VmsIxrManager->FLists.Push(pVms->VMS_CTLR_NMBR, pVms);
  267. }
  268. try
  269. {
  270. int nRow;
  271. TcxDataController *pGDC = TvIxr->DataController;
  272. TvIxr->BeginUpdate();
  273. FOR_STL(TVmsRltnIxr *, pObj, pVms->FLists)
  274. {
  275. nRow = pGDC->AppendRecord();
  276. String NAME = "";
  277. TSgnlCtlr *pSig = SgnlCtlrManager->FLists.Find(pObj->SGNL_IXR_NMBR);
  278. if (pSig) {
  279. NAME = pSig->IXR_NM;
  280. }
  281. pGDC->Values[nRow][ColLink2->Index] = pObj->SGNL_IXR_NMBR;
  282. pGDC->Values[nRow][ColLink3->Index] = NAME;
  283. if (sSigCtlrs == "") sSigCtlrs = pObj->SGNL_IXR_NMBR;
  284. else sSigCtlrs = sSigCtlrs + ","+pObj->SGNL_IXR_NMBR;
  285. }
  286. }
  287. __finally
  288. {
  289. TvIxr->EndUpdate();
  290. }
  291. RefreshRltnIxr();
  292. #if 0
  293. if (sSigCtlrs != "")
  294. {
  295. sJs.printf(L"extentLayerObject(%d, '%s')", LyrTp_Traffic, sLinkIds.c_str());
  296. FRAMEOpenMap1->ExecScript(sJs);
  297. }
  298. #endif
  299. }
  300. //---------------------------------------------------------------------------
  301. void __fastcall TEVSP300M::BtnEditClick(TObject *Sender)
  302. {
  303. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  304. {
  305. ChangeEditMode(0);
  306. FNewDb = false;
  307. }
  308. else
  309. {
  310. String sId = EdNmbr->Text;
  311. ChangeEditMode(1);
  312. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  313. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  314. if( nRow <= -1 )
  315. return;
  316. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  317. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  318. DisplayInfo(pObj);
  319. }
  320. }
  321. //---------------------------------------------------------------------------
  322. void __fastcall TEVSP300M::ChangeEditMode(int AEdit)
  323. {
  324. bool bGisEdit = true;
  325. bool bEnabled = false;
  326. switch(AEdit)
  327. {
  328. case 0: //편집버튼클릭
  329. {
  330. BtnEdit->Enabled = true;
  331. BtnInsert->Enabled = false;
  332. BtnDelete->Enabled = false;
  333. BtnSave->Enabled = true;
  334. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  335. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  336. EditMode = true;
  337. }
  338. break;
  339. case 1: //편집[취소]버튼클릭
  340. {
  341. FormInit(); //화면을 모두 지운다.
  342. BtnEdit->Enabled = false;
  343. BtnInsert->Enabled = true;
  344. BtnDelete->Enabled = false;
  345. BtnSave->Enabled = false;
  346. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  347. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  348. bEnabled = true;
  349. bGisEdit = false;
  350. EditMode = false;
  351. }
  352. break;
  353. case 2: //추가
  354. {
  355. BtnEdit->Enabled = true;
  356. BtnInsert->Enabled = false;
  357. BtnDelete->Enabled = false;
  358. BtnSave->Enabled = true;
  359. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  360. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  361. EditMode = true;
  362. }
  363. break;
  364. case 3: //수정모드
  365. {
  366. BtnEdit->Enabled = true;
  367. BtnInsert->Enabled = true;
  368. BtnDelete->Enabled = true;
  369. BtnSave->Enabled = false;
  370. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  371. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  372. bEnabled = true;
  373. EditMode = false;
  374. }
  375. break;
  376. }
  377. if (AEdit == 0 || AEdit == 2)
  378. {
  379. FRAMEVmsList1->CxList->Enabled = false;
  380. }
  381. else
  382. {
  383. FRAMEVmsList1->CxList->Enabled = true;
  384. }
  385. GrpInfo->Enabled = EditMode;
  386. //GrpLink->Enabled = EditMode;
  387. PnlLink->Enabled = EditMode;
  388. //BtnLinkAdd->Enabled = !bEnabled;
  389. BtnLinkDel->Enabled = !bEnabled;
  390. #if 0
  391. FRAMEGisMap1->ImgSel->Enabled = false;
  392. if (FRAMEGisMap1->MapStart)
  393. {
  394. //TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "ClearSelLink", "0");
  395. RefreshRltnIxr();
  396. FRAMEGisMap1->ImgSel->Enabled = bGisEdit;
  397. if (bGisEdit == false)
  398. {
  399. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "SelectMode", "0"); //PAN
  400. }
  401. }
  402. #endif
  403. }
  404. //---------------------------------------------------------------------------
  405. void __fastcall TEVSP300M::BtnSaveClick(TObject *Sender)
  406. {
  407. TVmsIxr *pObj;
  408. if (EdNmbr->Text.IsEmpty()
  409. || EdCtlrId->Text.Trim().IsEmpty()
  410. //|| EdCtlrlNm->Text.Trim().IsEmpty()
  411. )
  412. {
  413. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  414. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  415. return;
  416. }
  417. String sVmsNmbr = EdNmbr->Text;
  418. pObj = VmsIxrManager->FLists.Find(sVmsNmbr);
  419. if (!pObj) {
  420. pObj = new TVmsIxr();
  421. pObj->VMS_CTLR_NMBR = sVmsNmbr;
  422. VmsIxrManager->FLists.Push(sVmsNmbr, pObj);
  423. }
  424. if (pObj)
  425. {
  426. pObj->VMS_CTLR_NMBR = sVmsNmbr;
  427. pObj->FLists.RemoveAll();
  428. try {
  429. TvIxr->BeginUpdate();
  430. for (int ii = 0; ii < TvIxr->DataController->RecordCount; ii++)
  431. {
  432. String sIxrNmbr = VarToStr(TvIxr->DataController->Values[ii][ColLink2->Index]);
  433. TVmsRltnIxr *pIxr = new TVmsRltnIxr();
  434. pIxr->VMS_CTLR_NMBR = pObj->VMS_CTLR_NMBR;
  435. pIxr->SGNL_IXR_NMBR = sIxrNmbr;
  436. pIxr->ORD = ii+1;
  437. pObj->FLists.Push(pIxr->ORD, pIxr);
  438. }
  439. }
  440. __finally
  441. {
  442. TvIxr->EndUpdate();
  443. }
  444. bool bResult;
  445. bResult = VmsIxrManager->MergeVmsIxr(pObj);
  446. if (bResult)
  447. {
  448. lblText9->Caption = "VMS별 우선신호 교차로 정보 저장\r\nVMS별 우선신호 교차로 정보를 저장 하였습니다.";
  449. Application->MessageBox(lblText9->Caption.c_str(),
  450. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  451. FUpdate = true;
  452. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sVmsNmbr, FRAMEVmsList1->Column01->Index);
  453. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  454. if( nRow <= -1 )
  455. return;
  456. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  457. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  458. DisplayInfo(pObj);
  459. }
  460. }
  461. }
  462. //---------------------------------------------------------------------------
  463. void __fastcall TEVSP300M::RefreshRltnIxr()
  464. {
  465. if (!FRAMEOpenMap1->MapStart) return;
  466. try
  467. {
  468. int nRow;
  469. TcxDataController *pGDC = TvIxr->DataController;
  470. TvIxr->BeginUpdate();
  471. try
  472. {
  473. int nSeq = 1;
  474. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  475. {
  476. pGDC->Values[ii][ColSeq->Index] = nSeq;
  477. String sIxrNmbr = pGDC->Values[ii][ColLink2->Index];
  478. UpdateIxrSelect(sIxrNmbr, FSelComm);
  479. }
  480. }
  481. catch(...)
  482. {
  483. }
  484. }
  485. __finally
  486. {
  487. TvIxr->EndUpdate();
  488. }
  489. }
  490. //---------------------------------------------------------------------------
  491. void __fastcall TEVSP300M::UpdateIcon()
  492. {
  493. if (!FRAMEOpenMap1->MapStart) return;
  494. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  495. FRAMEOpenMap1->ExecScript(sJs);
  496. String arrObj = "";
  497. String sTemp;
  498. VmsCtlrManager->FLists.Lock();
  499. try
  500. {
  501. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  502. {
  503. if (pObj->DEL_YN == "Y") continue;
  504. if (arrObj != "") arrObj += "|";
  505. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_ID.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  506. arrObj += sTemp;
  507. }
  508. }
  509. __finally
  510. {
  511. VmsCtlrManager->FLists.UnLock();
  512. if (arrObj != "")
  513. {
  514. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  515. FRAMEOpenMap1->ExecScript(sJs);
  516. }
  517. }
  518. UpdateIconIxr();
  519. }
  520. //---------------------------------------------------------------------------
  521. void __fastcall TEVSP300M::UpdateIconIxr()
  522. {
  523. if (!FRAMEOpenMap1->MapStart) return;
  524. String arrObj = "";
  525. String sTemp;
  526. sJs.printf(L"removeLayerObject(%d)", LyrTp_Evsp);
  527. FRAMEOpenMap1->ExecScript(sJs);
  528. SgnlCtlrManager->FLists.Lock();
  529. try
  530. {
  531. FOR_STL(TSgnlCtlr*, pObj, SgnlCtlrManager->FLists)
  532. {
  533. if (pObj->DEL_YN == "Y") continue;
  534. if (arrObj != "") arrObj += "|";
  535. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,%d,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_NMBR.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN, FInitComm);
  536. arrObj += sTemp;
  537. }
  538. }
  539. __finally
  540. {
  541. SgnlCtlrManager->FLists.UnLock();
  542. if (arrObj != "")
  543. {
  544. sJs.printf(L"addFacility(%d, '%s')", LyrTp_Evsp, arrObj.c_str());
  545. FRAMEOpenMap1->ExecScript(sJs);
  546. }
  547. }
  548. }
  549. //---------------------------------------------------------------------------
  550. void __fastcall TEVSP300M::UpdateEditLink()
  551. {
  552. #if 0
  553. if (!FRAMEOpenMap1->MapStart) return;
  554. TItsNode* pNode;
  555. String STRT_NM;
  556. String END_NM;
  557. try
  558. {
  559. LinkManager->FLists.Lock();
  560. try
  561. {
  562. FOR_STL(TLink*, pObj, LinkManager->FLists)
  563. {
  564. if (pObj->DEL_YN == "Y") continue;
  565. if (pObj->IsVertex == false) continue;
  566. pNode = ItsNodeManager->FLists.Find(pObj->F_NODE_ID);
  567. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  568. pNode = ItsNodeManager->FLists.Find(pObj->T_NODE_ID);
  569. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  570. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  571. pObj->LINK_ID.c_str(),
  572. pObj->ROAD_NAME.c_str(),
  573. STRT_NM.c_str(),
  574. END_NM.c_str(),
  575. pObj->X_CRDN_ARR.c_str(),
  576. pObj->Y_CRDN_ARR.c_str());
  577. FRAMEOpenMap1->ExecScript(sJs);
  578. }
  579. }
  580. __finally
  581. {
  582. LinkManager->FLists.UnLock();
  583. }
  584. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  585. }
  586. catch(...)
  587. {
  588. }
  589. #endif
  590. }
  591. //---------------------------------------------------------------------------
  592. void __fastcall TEVSP300M::TvIxrCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  593. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  594. {
  595. if (!FRAMEOpenMap1->MapStart) return;
  596. if (!ACellViewInfo) return;
  597. int nRow = TvIxr->DataController->FocusedRecordIndex;
  598. if( nRow <= -1 )
  599. return;
  600. String sIxrNmbr = TvIxr->DataController->Values[nRow][ColLink2->Index];
  601. sJs.printf(L"selectLayerObject(%d, '%s', %d)", LyrTp_Evsp, sIxrNmbr.c_str(), FRAMEOpenMap1->MapZoom);
  602. FRAMEOpenMap1->ExecScript(sJs);
  603. }
  604. //---------------------------------------------------------------------------
  605. void __fastcall TEVSP300M::FRAMEVmsList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  606. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  607. TShiftState AShift, bool &AHandled)
  608. {
  609. if (!ACellViewInfo) return;
  610. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  611. if( nRow <= -1 )
  612. return;
  613. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  614. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  615. DisplayInfo(pObj);
  616. }
  617. //---------------------------------------------------------------------------
  618. void __fastcall TEVSP300M::AddRemoveIxr(String AIxrNmbr)
  619. {
  620. TSgnlCtlr *pObj = SgnlCtlrManager->FLists.Find(AIxrNmbr);
  621. if (!pObj) {
  622. return;
  623. }
  624. try
  625. {
  626. int nRow;
  627. TcxDataController *pGDC = TvIxr->DataController;
  628. TvIxr->BeginUpdate();
  629. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  630. {
  631. String sIxrNmbr = pGDC->Values[ii][ColLink2->Index];
  632. if (AIxrNmbr == sIxrNmbr)
  633. {
  634. UpdateIxrSelect(AIxrNmbr, FInitComm);
  635. pGDC->DeleteRecord(ii);
  636. return;
  637. }
  638. }
  639. nRow = pGDC->AppendRecord();
  640. pGDC->Values[nRow][ColLink2->Index] = AIxrNmbr;
  641. pGDC->Values[nRow][ColLink3->Index] = pObj->IXR_NM;
  642. UpdateIxrSelect(AIxrNmbr, FSelComm);
  643. }
  644. __finally
  645. {
  646. TvIxr->EndUpdate();
  647. }
  648. }
  649. //---------------------------------------------------------------------------
  650. void __fastcall TEVSP300M::BtnLinkCopyClick(TObject *Sender)
  651. {
  652. #if 0
  653. String sIfscId = EdVmsNmbr->Text.Trim();
  654. int nIfscId = sIfscId.ToIntDef(0);
  655. TVmsEvsp *pIfsc = VmsEvspManager->FLists.Find(nIfscId);
  656. if (!pIfsc) return;
  657. try
  658. {
  659. int nRow;
  660. TcxDataController *pGDC = TvIxr->DataController;
  661. TvIxr->BeginUpdate();
  662. FOR_STL(TVmsEvspLink *, pObj, pIfsc->FLists)
  663. {
  664. nRow = pGDC->AppendRecord();
  665. pGDC->Values[nRow][ColLink2->Index] = pObj->LINK_ID;
  666. pGDC->Values[nRow][ColLink3->Index] = pObj->LINK_NM;
  667. String STRT_NM = "";
  668. String END_NM = "";
  669. TLink *pTmp = LinkManager->FLists.Find(pObj->LINK_ID);
  670. if (pTmp)
  671. {
  672. TItsNode *pFromNode = ItsNodeManager->FLists.Find(pTmp->F_NODE_ID);
  673. if (pFromNode) STRT_NM = pFromNode->NODE_NAME;
  674. TItsNode *pToNode = ItsNodeManager->FLists.Find(pTmp->T_NODE_ID);
  675. if (pToNode) END_NM = pToNode->NODE_NAME;
  676. }
  677. pGDC->Values[nRow][ColLink4->Index] = STRT_NM;
  678. pGDC->Values[nRow][ColLink5->Index] = END_NM;
  679. }
  680. }
  681. __finally
  682. {
  683. TvIxr->EndUpdate();
  684. }
  685. RefreshRltnIxr();
  686. #endif
  687. }
  688. //---------------------------------------------------------------------------
  689. void __fastcall TEVSP300M::BtnLinkDelClick(TObject *Sender)
  690. {
  691. int nSelRows = TvIxr->Controller->SelectedRowCount;
  692. if (nSelRows <= 0)
  693. {
  694. Application->MessageBox(lblText13->Caption.c_str(),//L"삭제를 원하는 구간을 목록에서 선택하세요.",
  695. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  696. return;
  697. }
  698. for (int ii = 0; ii < nSelRows; ii++)
  699. {
  700. int nSelIdx = TvIxr->Controller->SelectedRows[ii]->RecordIndex;
  701. String sIxrNmbr = TvIxr->DataController->Values[nSelIdx][ColLink2->Index];
  702. UpdateIxrSelect(sIxrNmbr, FInitComm);
  703. }
  704. TvIxr->Controller->DeleteSelection();
  705. }
  706. //---------------------------------------------------------------------------
  707. void __fastcall TEVSP300M::BtnUpClick(TObject *Sender)
  708. {
  709. try
  710. {
  711. TvIxr->BeginUpdate();
  712. int nCurIdx = TvIxr->DataController->FocusedRowIndex;//FocusedRecordIndex;
  713. if (nCurIdx <= 0)
  714. {
  715. return;
  716. }
  717. int nUpIdx = nCurIdx-1;
  718. try
  719. {
  720. String sVal1 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink1->Index]);
  721. String sVal2 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink2->Index]);
  722. String sVal3 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink3->Index]);
  723. String sVal4 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink4->Index]);
  724. String sVal5 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink5->Index]);
  725. TvIxr->DataController->Values[nCurIdx][ColLink1->Index] = TvIxr->DataController->Values[nUpIdx][ColLink1->Index];
  726. TvIxr->DataController->Values[nCurIdx][ColLink2->Index] = TvIxr->DataController->Values[nUpIdx][ColLink2->Index];
  727. TvIxr->DataController->Values[nCurIdx][ColLink3->Index] = TvIxr->DataController->Values[nUpIdx][ColLink3->Index];
  728. TvIxr->DataController->Values[nCurIdx][ColLink4->Index] = TvIxr->DataController->Values[nUpIdx][ColLink4->Index];
  729. TvIxr->DataController->Values[nCurIdx][ColLink5->Index] = TvIxr->DataController->Values[nUpIdx][ColLink5->Index];
  730. TvIxr->DataController->Values[nUpIdx][ColLink1->Index] = sVal1;
  731. TvIxr->DataController->Values[nUpIdx][ColLink2->Index] = sVal2;
  732. TvIxr->DataController->Values[nUpIdx][ColLink3->Index] = sVal3;
  733. TvIxr->DataController->Values[nUpIdx][ColLink4->Index] = sVal4;
  734. TvIxr->DataController->Values[nUpIdx][ColLink5->Index] = sVal5;
  735. TvIxr->Controller->ClearSelection();
  736. TvIxr->Controller->FocusedRowIndex = nUpIdx;
  737. //TvIxr->Controller->FocusedRecordIndex = nUpIdx;
  738. TvIxr->ViewData->Records[nUpIdx]->Focused = true;
  739. TvIxr->ViewData->Records[nUpIdx]->Selected = true;
  740. CxIxr->SetFocus();
  741. //TcxCustomGridRow* ARow = TvIxr->ViewData->Rows[TvIxr->DataController->FocusedRowIndex];
  742. }
  743. catch(...)
  744. {
  745. }
  746. }
  747. __finally
  748. {
  749. TvIxr->EndUpdate();
  750. }
  751. RefreshRltnIxr();
  752. }
  753. //---------------------------------------------------------------------------
  754. void __fastcall TEVSP300M::BtnDownClick(TObject *Sender)
  755. {
  756. try
  757. {
  758. TvIxr->BeginUpdate();
  759. int nCurIdx = TvIxr->DataController->FocusedRowIndex;//FocusedRecordIndex;
  760. //int nCurIdx = TvIxr->DataController->FocusedRecordIndex;
  761. if (nCurIdx < 0)
  762. {
  763. return;
  764. }
  765. if (nCurIdx == TvIxr->DataController->RecordCount-1)
  766. {
  767. return;
  768. }
  769. int nDnIdx = nCurIdx+1;
  770. try
  771. {
  772. String sVal1 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink1->Index]);
  773. String sVal2 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink2->Index]);
  774. String sVal3 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink3->Index]);
  775. String sVal4 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink4->Index]);
  776. String sVal5 = VarToStr(TvIxr->DataController->Values[nCurIdx][ColLink5->Index]);
  777. TvIxr->DataController->Values[nCurIdx][ColLink1->Index] = TvIxr->DataController->Values[nDnIdx][ColLink1->Index];
  778. TvIxr->DataController->Values[nCurIdx][ColLink2->Index] = TvIxr->DataController->Values[nDnIdx][ColLink2->Index];
  779. TvIxr->DataController->Values[nCurIdx][ColLink3->Index] = TvIxr->DataController->Values[nDnIdx][ColLink3->Index];
  780. TvIxr->DataController->Values[nCurIdx][ColLink4->Index] = TvIxr->DataController->Values[nDnIdx][ColLink4->Index];
  781. TvIxr->DataController->Values[nCurIdx][ColLink5->Index] = TvIxr->DataController->Values[nDnIdx][ColLink5->Index];
  782. TvIxr->DataController->Values[nDnIdx][ColLink1->Index] = sVal1;
  783. TvIxr->DataController->Values[nDnIdx][ColLink2->Index] = sVal2;
  784. TvIxr->DataController->Values[nDnIdx][ColLink3->Index] = sVal3;
  785. TvIxr->DataController->Values[nDnIdx][ColLink4->Index] = sVal4;
  786. TvIxr->DataController->Values[nDnIdx][ColLink5->Index] = sVal5;
  787. TvIxr->Controller->ClearSelection();
  788. TvIxr->Controller->FocusedRowIndex = nDnIdx;
  789. //TvIxr->Controller->FocusedRecordIndex = nDnIdx;
  790. TvIxr->ViewData->Records[nDnIdx]->Focused = true;
  791. TvIxr->ViewData->Records[nDnIdx]->Selected = true;
  792. CxIxr->SetFocus();
  793. //TcxCustomGridRow* ARow = TvIxr->ViewData->Rows[TvIxr->DataController->FocusedRowIndex];
  794. }
  795. catch(...)
  796. {
  797. }
  798. }
  799. __finally
  800. {
  801. TvIxr->EndUpdate();
  802. }
  803. RefreshRltnIxr();
  804. }
  805. //---------------------------------------------------------------------------
  806. void __fastcall TEVSP300M::ChkViewIconClick(TObject *Sender)
  807. {
  808. if (!FRAMEOpenMap1->MapStart) return;
  809. TcxCheckBox *pCheck = (TcxCheckBox*)Sender;
  810. if (pCheck->Tag == 0) {
  811. sJs.printf(L"showLayerText(%d, %d)", FLayerIdx, (pCheck->Checked) ? 1: 0);
  812. FRAMEOpenMap1->ExecScript(sJs);
  813. }
  814. else if (pCheck->Tag == 1) {
  815. sJs.printf(L"showLayerText(%d, %d)", LyrTp_Evsp, (pCheck->Checked) ? 1: 0);
  816. FRAMEOpenMap1->ExecScript(sJs);
  817. }
  818. }
  819. //---------------------------------------------------------------------------
  820. void __fastcall TEVSP300M::ColSeqCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  821. bool &ADone)
  822. {
  823. if (AViewInfo->GridRecord->RecordIndex < 0)
  824. return;
  825. if (VarIsNull(AViewInfo->Value))
  826. return;
  827. try
  828. {
  829. int nIdx = AViewInfo->Value;
  830. if (nIdx < 0)
  831. return;
  832. ACanvas->Brush->Color = ITSMap_GetDisplayColor(nIdx);
  833. ACanvas->Font->Color = ACanvas->Brush->Color;
  834. }
  835. catch(...)
  836. {
  837. }
  838. }
  839. //---------------------------------------------------------------------------
  840. void __fastcall TEVSP300M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  841. {
  842. try
  843. {
  844. if (AFirst)
  845. {
  846. //지도를 편집모드로 변경
  847. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  848. FRAMEOpenMap1->ExecScript(sJs);
  849. //시설물아이콘 등록
  850. UpdateIcon();
  851. //화면을 시설물 여역으로 확대
  852. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  853. FRAMEOpenMap1->ExecScript(sJs);
  854. return;
  855. }
  856. if (AFunc.Pos("onfacilityclick"))
  857. {
  858. TStringList *pStringList = new TStringList;
  859. pStringList->CommaText = AArgs;
  860. String sLyrIdx = pStringList->Strings[0];
  861. String sNmbr = pStringList->Strings[1];
  862. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)
  863. {
  864. if (StrToIntDef(sLyrIdx, 0) == FLayerIdx) {
  865. TVmsCtlr *pVmsObj = VmsCtlrManager->FLists.Find(sNmbr);
  866. if (pVmsObj) {
  867. DisplayInfo(pVmsObj);
  868. }
  869. }
  870. }
  871. else if (BtnEdit->Caption != FrmLang->lblEdit->Caption)
  872. {
  873. if (StrToIntDef(sLyrIdx, 0) == LyrTp_Evsp) {
  874. AddRemoveIxr(sNmbr);
  875. }
  876. }
  877. delete pStringList;
  878. }
  879. }
  880. catch(Exception &exception)
  881. {
  882. }
  883. }
  884. //---------------------------------------------------------------------------