AVIM020MF.cpp 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "CDSCodeF.h"
  7. #include "CDSFacilityF.h"
  8. #include "CDSNodeF.h"
  9. #include "CDSLinkF.h"
  10. #pragma hdrstop
  11. #include "AVIM020MF.h"
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "FRAME_AviListF"
  15. #pragma link "FRAME_AviSectListF"
  16. #pragma link "FRAME_FlashMapF"
  17. #pragma link "cxButtons"
  18. #pragma link "cxCheckBox"
  19. #pragma link "cxClasses"
  20. #pragma link "cxContainer"
  21. #pragma link "cxControls"
  22. #pragma link "cxCustomData"
  23. #pragma link "cxData"
  24. #pragma link "cxDataStorage"
  25. #pragma link "cxDropDownEdit"
  26. #pragma link "cxEdit"
  27. #pragma link "cxFilter"
  28. #pragma link "cxGraphics"
  29. #pragma link "cxGrid"
  30. #pragma link "cxGridCustomTableView"
  31. #pragma link "cxGridCustomView"
  32. #pragma link "cxGridLevel"
  33. #pragma link "cxGridTableView"
  34. #pragma link "cxGroupBox"
  35. #pragma link "cxLabel"
  36. #pragma link "cxLookAndFeelPainters"
  37. #pragma link "cxLookAndFeels"
  38. #pragma link "cxMaskEdit"
  39. #pragma link "cxSpinEdit"
  40. #pragma link "cxSplitter"
  41. #pragma link "cxStyles"
  42. #pragma link "cxTextEdit"
  43. #pragma link "dxSkinBlack"
  44. #pragma link "dxSkinBlue"
  45. #pragma link "dxSkinsCore"
  46. #pragma link "dxSkinscxPCPainter"
  47. #pragma resource "*.dfm"
  48. TAVIM020M *AVIM020M = NULL;
  49. //---------------------------------------------------------------------------
  50. void TAVIM020M_FlashCall(TObject *ASender, const WideString request)
  51. {
  52. try
  53. {
  54. if (!AVIM020M) return;
  55. AVIM020M->ShockwaveFlash1FlashCall1(ASender, request);
  56. }
  57. catch(Exception &exception)
  58. {
  59. }
  60. }
  61. //---------------------------------------------------------------------------
  62. __fastcall TAVIM020M::TAVIM020M(TComponent* Owner)
  63. : TForm(Owner)
  64. {
  65. ITSSkin_Load(this);
  66. CMM_LoadForm(g_sFormsDir, this);
  67. FUpdate= false;
  68. FTitle = "AVI-구간 관리";
  69. MapStart = false;
  70. m_pGDC = FRAMEAviSectList1->TvList->DataController;
  71. FRAMEGisMap1->FlashCallbackFunc = TAVIM020M_FlashCall;
  72. FRAMEGisMap1->DrawMode = 1; //구간정보표출
  73. FRAMEGisMap1->ImgPan->Visible = true;
  74. FRAMEGisMap1->ImgZoomIn->Visible = true;
  75. FRAMEGisMap1->ImgZoomOut->Visible = true;
  76. FRAMEGisMap1->ImgSel->Visible = true;
  77. FRAMEGisMap1->ImgStnd->Visible = true;
  78. FRAMEGisMap1->ImgRefresh->Visible = true;
  79. FRAMEGisMap1->LbDef->Caption = "(선택버튼을 클릭하여 선택합니다.)";
  80. FRAMEGisMap1->LbDef->Hint = FRAMEGisMap1->LbDef->Caption;
  81. FRAMEGisMap1->LbDef->Visible = true;
  82. FRAMEGisMap1->ImgSel->Visible = false;
  83. FRAMEAviList1->PnlTop->Visible = false;
  84. FRAMEAviList1->PnlBottom->Visible = false;
  85. FRAMEAviList1->ColumnSel->Visible = false;
  86. FRAMEAviList1->Column02->Visible = false;
  87. FRAMEAviSectList1->PnlTop->Visible = false;
  88. FRAMEAviSectList1->PnlBottom->Visible = false;
  89. FRAMEAviSectList1->ColumnSel->Visible = false;
  90. TvLink->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<AVI 구간 링크구성정보>";
  91. }
  92. //---------------------------------------------------------------------------
  93. /*
  94. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  95. * Form과 DataModule class를 delete시킨다.
  96. * arguments
  97. *
  98. * return
  99. * void
  100. */
  101. void __fastcall TAVIM020M::CommClose()
  102. {
  103. try
  104. {
  105. CMM_SaveForm(g_sFormsDir, this);
  106. }
  107. catch(...)
  108. {
  109. }
  110. }
  111. //---------------------------------------------------------------------------
  112. /*
  113. * Form을 보여줄때 호출되는 event 메서드이다.
  114. * arguments
  115. * Sender : event handler 객체
  116. * return
  117. * void
  118. */
  119. void __fastcall TAVIM020M::FormShow(TObject *Sender)
  120. {
  121. Refresh();
  122. CbAVI_CTLR_MNGM_NMBR->Properties->Items->Clear();
  123. try
  124. {
  125. FRAMEAviList1->MyItsAviManager->FLists.Lock();
  126. FOR_STL(TItsAvi*, pObj, FRAMEAviList1->MyItsAviManager->FLists)
  127. {
  128. if (pObj->DEL_YN == "Y") continue;
  129. String sId = pObj->AVI_CTLR_MNGM_NMBR; //관리번호
  130. String sNm = pObj->AVI_LCTN_NM; //위치
  131. CbAVI_CTLR_MNGM_NMBR->Properties->Items->Add("[" + sId + "] " + sNm);
  132. }
  133. }
  134. __finally
  135. {
  136. FRAMEAviList1->MyItsAviManager->FLists.UnLock();
  137. }
  138. CbAVI_CTLR_MNGM_NMBR->ItemIndex = -1;
  139. CbAVI_CTLR_MNGM_NMBR->Properties->ReadOnly = true;
  140. EdId->Properties->ReadOnly = true;
  141. EdAVI_SECT_NMBR->Properties->ReadOnly = true;
  142. EdSTRT_SPOT_NM->Properties->ReadOnly = true;
  143. EdEND_SPOT_NM->Properties->ReadOnly = true;
  144. EdAVI_SECT_NM->Properties->ReadOnly = true;
  145. SeAVI_SECT_DSTC->Properties->ReadOnly = true;
  146. SeSHRT_PASS_HH->Properties->ReadOnly = true;
  147. SeLNST_PASS_HH->Properties->ReadOnly = true;
  148. SeSPOT_NUM->Properties->ReadOnly = true;
  149. SeSTND_DRFT_VAL->Properties->ReadOnly = true;
  150. SeMIN_SPED->Properties->ReadOnly = true;
  151. SeMAX_SPED->Properties->ReadOnly = true;
  152. SeSMTH_FCTR->Properties->ReadOnly = true;
  153. FormInit();
  154. ChangeEditMode(1);
  155. TmrShow->Enabled = true;
  156. }
  157. //---------------------------------------------------------------------------
  158. /*
  159. * form 초기화
  160. *
  161. * arguments
  162. *
  163. * return
  164. * void
  165. */
  166. void __fastcall TAVIM020M::FormInit()
  167. {
  168. CbAVI_CTLR_MNGM_NMBR->ItemIndex = -1;
  169. EdId->Text = "";
  170. EdAVI_SECT_NMBR->Text = "";
  171. EdSTRT_SPOT_NM->Text = "";
  172. EdEND_SPOT_NM->Text = "";
  173. EdAVI_SECT_NM->Text = "";
  174. SeAVI_SECT_DSTC->Value = 0;
  175. SeSHRT_PASS_HH->Value = 0;
  176. SeLNST_PASS_HH->Value = 0;
  177. SeSPOT_NUM->Value = 0;
  178. SeSTND_DRFT_VAL->Value = 0;
  179. SeMIN_SPED->Value = 0;
  180. SeMAX_SPED->Value = 0;
  181. SeSMTH_FCTR->Value = 0;
  182. CMM_ClearGridTableView(TvLink);
  183. FNewDb = false;
  184. }
  185. //---------------------------------------------------------------------------
  186. /*
  187. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  188. * arguments
  189. * Sender : event handler 객체
  190. * return
  191. * void
  192. */
  193. void __fastcall TAVIM020M::TmrShowTimer(TObject *Sender)
  194. {
  195. TmrShow->Enabled = false;
  196. FRAMEGisMap1->LinkLevel = 1;
  197. FRAMEGisMap1->LoadGisMap();
  198. FRAMEAviList1->UpdateList();
  199. //FRAMEAviSectList1->UpdateList();
  200. FRAMEAviSectList1->MyItsAviManager->LoadFromSectLinkDb();
  201. UpdateList();
  202. }
  203. //---------------------------------------------------------------------------
  204. void __fastcall TAVIM020M::UpdateList()
  205. {
  206. FRAMEAviSectList1->UpdateList();
  207. }
  208. //---------------------------------------------------------------------------
  209. /*
  210. * Close 버튼 클릭 이벤트 핸들러
  211. * arguments
  212. * Sender : event handler 객체
  213. * return
  214. * void
  215. */
  216. void __fastcall TAVIM020M::BtnCloseClick(TObject *Sender)
  217. {
  218. Close();
  219. }
  220. //---------------------------------------------------------------------------
  221. void __fastcall TAVIM020M::FormClose(TObject *Sender, TCloseAction &Action)
  222. {
  223. CommClose();
  224. AVIM020M = NULL;
  225. Action = caFree;
  226. }
  227. //---------------------------------------------------------------------------
  228. void __fastcall TAVIM020M::FormCloseQuery(TObject *Sender, bool &CanClose)
  229. {
  230. #if 0
  231. //xxxxxxxx
  232. if (FUpdate)
  233. {
  234. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  235. }
  236. #endif
  237. FRAMEAviList1->OnCloseQuery(CanClose);
  238. FRAMEAviSectList1->OnCloseQuery(CanClose);
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TAVIM020M::DisplayInfo(TItsAviSect* AObj)
  242. {
  243. FormInit();
  244. if (!AObj) return;
  245. CMM_SetComboBoxItem(CbAVI_CTLR_MNGM_NMBR, AObj->AVI_CTLR_MNGM_NMBR);
  246. EdId->Text = AObj->AVI_CTLR_MNGM_NMBR;
  247. EdAVI_SECT_NMBR->Text = AObj->AVI_SECT_NMBR;
  248. EdSTRT_SPOT_NM->Text = AObj->STRT_SPOT_NM;
  249. EdEND_SPOT_NM->Text = AObj->END_SPOT_NM;
  250. EdAVI_SECT_NM->Text = AObj->AVI_SECT_NM;
  251. SeAVI_SECT_DSTC->Value = AObj->AVI_SECT_DSTC.ToIntDef(0);
  252. SeSHRT_PASS_HH->Value = AObj->SHRT_PASS_HH.ToIntDef(0);
  253. SeLNST_PASS_HH->Value = AObj->LNST_PASS_HH.ToIntDef(0);
  254. SeSPOT_NUM->Value = AObj->SPOT_NUM.ToIntDef(0);
  255. SeSTND_DRFT_VAL->Value = AObj->STND_DRFT_VAL.ToIntDef(0);
  256. SeMIN_SPED->Value = AObj->MIN_SPED.ToIntDef(0);
  257. SeMAX_SPED->Value = AObj->MAX_SPED.ToIntDef(0);
  258. SeSMTH_FCTR->Value = StrToFloatDef(AObj->SMTH_FCTR, 0);
  259. ChangeEditMode(3);
  260. DisplayLink(AObj);
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TAVIM020M::DisplayLink(TItsAviSect* AObj)
  264. {
  265. if (!AObj) return;
  266. CMM_ClearGridTableView(TvLink);
  267. try
  268. {
  269. int nRow;
  270. TcxDataController *pGDC = TvLink->DataController;
  271. TvLink->BeginUpdate();
  272. FOR_STL(TItsAviLink *, pObj, AObj->FLinkLists)
  273. {
  274. String sLinkId = pObj->LINK_ID;
  275. nRow = pGDC->AppendRecord();
  276. pGDC->Values[nRow][ColLink2->Index] = sLinkId;
  277. TItsLink *pLink = ItsLinkManager->FLists.Find(sLinkId);
  278. if (pLink)
  279. {
  280. TItsNode *pNode;
  281. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODEID;
  282. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODEID;
  283. pNode = ItsNodeManager->FLists.Find(pLink->F_NODEID);
  284. if (pNode)
  285. {
  286. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  287. }
  288. pNode = ItsNodeManager->FLists.Find(pLink->T_NODEID);
  289. if (pNode)
  290. {
  291. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  292. }
  293. }
  294. }
  295. }
  296. __finally
  297. {
  298. TvLink->EndUpdate();
  299. }
  300. RefreshLink();
  301. }
  302. //---------------------------------------------------------------------------
  303. void __fastcall TAVIM020M::UpdateAviIcon()
  304. {
  305. if (!MapStart) return;
  306. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "RemoveFacility", FAC_AVI);
  307. TItsFacility *pFacility;
  308. try
  309. {
  310. //if (ChkViewIcon->Checked)
  311. {
  312. String sObjList = "";
  313. try
  314. {
  315. FRAMEAviList1->MyItsAviManager->FLists.Lock();
  316. FOR_STL(TItsAvi*, pObj, FRAMEAviList1->MyItsAviManager->FLists)
  317. {
  318. if (pObj->DEL_YN == "Y") continue;
  319. //pFacility = FRAMEAviList1->MyItsAviManager->FLists.Find(pObj->AVI_ID);
  320. //if (!pFacility) continue;
  321. String sLoc = TCommFlash::ReplaceName(pObj->AVI_LCTN_NM);
  322. sObjList += (pObj->AVI_ID + "," + "0," + sLoc + "," + pObj->X_CRDN + "," + pObj->Y_CRDN + "," + pObj->AVI_ID + "|");
  323. }
  324. }
  325. __finally
  326. {
  327. FRAMEAviList1->MyItsAviManager->FLists.UnLock();
  328. if (sObjList != "")
  329. {
  330. sObjList = sObjList.SubString(1, sObjList.Length()-1);
  331. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "AddFacility", FAC_AVI + "|" + sObjList);
  332. }
  333. }
  334. }
  335. }
  336. catch(...)
  337. {
  338. }
  339. }
  340. //---------------------------------------------------------------------------
  341. void __fastcall TAVIM020M::BtnEditClick(TObject *Sender)
  342. {
  343. if (BtnEdit->Caption == "편집")
  344. {
  345. ChangeEditMode(0);
  346. FNewDb = false;
  347. }
  348. else
  349. {
  350. String sId = EdId->Text;
  351. String sSectId = EdAVI_SECT_NMBR->Text;
  352. ChangeEditMode(1);
  353. TItsAvi *pAvi = FRAMEAviSectList1->MyItsAviManager->FLists.Find(sId);
  354. if (pAvi)
  355. {
  356. TItsAviSect *pObj = pAvi->FSubLists.Find(sSectId);
  357. if (pObj)
  358. {
  359. CMM_SetGridRow(FRAMEAviSectList1->CxList, FRAMEAviSectList1->TvList, sSectId, FRAMEAviSectList1->Column02->Index);
  360. DisplayInfo(pObj);
  361. }
  362. }
  363. }
  364. }
  365. //---------------------------------------------------------------------------
  366. void __fastcall TAVIM020M::ChangeEditMode(int AEdit)
  367. {
  368. bool bGisEdit = true;
  369. bool bEnabled = false;
  370. switch(AEdit)
  371. {
  372. case 0: //편집버튼클릭
  373. {
  374. BtnEdit->Enabled = true;
  375. BtnInsert->Enabled = false;
  376. BtnDelete->Enabled = false;
  377. BtnSave->Enabled = true;
  378. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  379. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  380. }
  381. break;
  382. case 1: //편집[취소]버튼클릭
  383. {
  384. FormInit(); //화면을 모두 지운다.
  385. BtnEdit->Enabled = false;
  386. BtnInsert->Enabled = true;
  387. BtnDelete->Enabled = false;
  388. BtnSave->Enabled = false;
  389. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  390. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  391. bEnabled = true;
  392. bGisEdit = false;
  393. }
  394. break;
  395. case 2: //추가
  396. {
  397. BtnEdit->Enabled = true;
  398. BtnInsert->Enabled = false;
  399. BtnDelete->Enabled = false;
  400. BtnSave->Enabled = true;
  401. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  402. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  403. }
  404. break;
  405. case 3: //수정모드
  406. {
  407. BtnEdit->Enabled = true;
  408. BtnInsert->Enabled = true;
  409. BtnDelete->Enabled = true;
  410. BtnSave->Enabled = false;
  411. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  412. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  413. bEnabled = true;
  414. }
  415. break;
  416. }
  417. if (AEdit == 0 || AEdit == 2)
  418. {
  419. FRAMEAviSectList1->CxList->Enabled = false;
  420. }
  421. else
  422. {
  423. FRAMEAviSectList1->CxList->Enabled = true;
  424. }
  425. //CbAVI_CTLR_MNGM_NMBR->ItemIndex = -1;
  426. CbAVI_CTLR_MNGM_NMBR->Properties->ReadOnly = bEnabled;
  427. EdId->Properties->ReadOnly = bEnabled;
  428. EdAVI_SECT_NMBR->Properties->ReadOnly = bEnabled;
  429. EdSTRT_SPOT_NM->Properties->ReadOnly = bEnabled;
  430. EdEND_SPOT_NM->Properties->ReadOnly = bEnabled;
  431. EdAVI_SECT_NM->Properties->ReadOnly = bEnabled;
  432. SeAVI_SECT_DSTC->Properties->ReadOnly = bEnabled;
  433. SeSHRT_PASS_HH->Properties->ReadOnly = bEnabled;
  434. SeLNST_PASS_HH->Properties->ReadOnly = bEnabled;
  435. SeSPOT_NUM->Properties->ReadOnly = bEnabled;
  436. SeSTND_DRFT_VAL->Properties->ReadOnly = bEnabled;
  437. SeMIN_SPED->Properties->ReadOnly = bEnabled;
  438. SeMAX_SPED->Properties->ReadOnly = bEnabled;
  439. SeSMTH_FCTR->Properties->ReadOnly = bEnabled;
  440. BtnLinkAdd->Enabled = !bEnabled;
  441. BtnLinkDel->Enabled = !bEnabled;
  442. FRAMEGisMap1->ImgSel->Visible = false;
  443. if (FRAMEGisMap1->MapStart)
  444. {
  445. //TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "ClearSelLink", "0");
  446. RefreshLink();
  447. FRAMEGisMap1->ImgSel->Visible = bGisEdit;
  448. if (bGisEdit == false)
  449. {
  450. if (MapStart)
  451. {
  452. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "SelectMode", "0"); //PAN
  453. }
  454. }
  455. }
  456. }
  457. //---------------------------------------------------------------------------
  458. void __fastcall TAVIM020M::BtnInsertClick(TObject *Sender)
  459. {
  460. FormInit();
  461. //신규아이디를 얻어와서 화면을 초기화한다.
  462. String sId;
  463. #if 0
  464. if (!FRAMEAviSectList1->MyItsAviManager->GetNextAviSectId(sId))
  465. {
  466. Application->MessageBox(L"새로운 AVI-구간 번호를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  467. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  468. return;
  469. }
  470. #else
  471. sId = InputBox("AVI-구간 번호", "신규 AVI-구간 번호를 입력하세요(20Byte).", "AVI-구간 번호" );
  472. sId = sId.Trim();
  473. if (sId == "AVI-구간 번호" || sId == "")
  474. {
  475. return;
  476. }
  477. if (AnsiString(sId).Length() > 10)
  478. {
  479. Application->MessageBox(L"AVI-구간 번호는 10Byte를 초과할 수 없습니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  480. return;
  481. }
  482. try
  483. {
  484. FRAMEAviSectList1->MyItsAviManager->FLists.Lock();
  485. FOR_STL(TItsAvi*, pObj, FRAMEAviSectList1->MyItsAviManager->FLists)
  486. {
  487. TItsAviSect *pDb = pObj->FSubLists.Find(sId);
  488. if (pDb)
  489. {
  490. String sErr = FrmLang->lbIdErr->Caption + "[" + sId + "]";
  491. Application->MessageBox(sErr.c_str(),//("[" + sId + "]는 사용할 수 없는 검지기 번호 입니다.").c_str(),
  492. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  493. return;
  494. }
  495. }
  496. }
  497. __finally
  498. {
  499. FRAMEAviSectList1->MyItsAviManager->FLists.UnLock();
  500. }
  501. #endif
  502. EdId->Text = "";
  503. EdAVI_SECT_NMBR->Text = sId;
  504. ChangeEditMode(2);
  505. FNewDb = true;
  506. }
  507. //---------------------------------------------------------------------------
  508. void __fastcall TAVIM020M::BtnDeleteClick(TObject *Sender)
  509. {
  510. int nIdx = m_pGDC->FocusedRecordIndex;
  511. if (nIdx < 0) return;
  512. String sId = EdAVI_SECT_NMBR->Text;
  513. if (sId.IsEmpty())
  514. {
  515. Application->MessageBox(L"삭제할 AVI-구간 정보를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  516. return;
  517. }
  518. String sMsg;
  519. sMsg = "AVI-구간 번호: " + sId;
  520. sMsg+= "\r\n선택하신 AVI-구간 정보를 삭제하시겠습니까?\r\n관련정보도 함께 삭제 됩니다.";
  521. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  522. TItsAviSect *pObj = NULL;
  523. try
  524. {
  525. FRAMEAviSectList1->MyItsAviManager->FLists.Lock();
  526. FOR_STL(TItsAvi*, pAvi, FRAMEAviSectList1->MyItsAviManager->FLists)
  527. {
  528. pObj = pAvi->FSubLists.Find(sId);
  529. if (pObj)
  530. {
  531. break;
  532. }
  533. }
  534. }
  535. __finally
  536. {
  537. FRAMEAviSectList1->MyItsAviManager->FLists.UnLock();
  538. }
  539. if (pObj)
  540. {
  541. if (FRAMEAviSectList1->MyItsAviManager->DeleteAviSect(pObj))
  542. {
  543. pObj->DEL_YN = "Y";
  544. UpdateList();
  545. }
  546. Application->MessageBox(L"AVI-구간 정보 삭제\r\nAVI-구간 정보를 삭제 하였습니다.",
  547. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  548. FUpdate = true;
  549. FormInit();
  550. ChangeEditMode(1);
  551. }
  552. }
  553. //---------------------------------------------------------------------------
  554. void __fastcall TAVIM020M::BtnSaveClick(TObject *Sender)
  555. {
  556. TItsAvi *pAvi;
  557. TItsAviSect *pObj;
  558. String sId = EdAVI_SECT_NMBR->Text;
  559. String sCtrlId = ITSUtil_GetCode(CbAVI_CTLR_MNGM_NMBR->Text); // 제어기 관리 번호
  560. pAvi = FRAMEAviSectList1->MyItsAviManager->FLists.Find(sCtrlId);
  561. if (!pAvi ||
  562. EdAVI_SECT_NMBR->Text.IsEmpty() ||
  563. EdAVI_SECT_NM->Text.Trim().IsEmpty() )
  564. {
  565. Application->MessageBox(L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  566. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  567. return;
  568. }
  569. if (!FNewDb)
  570. {
  571. //수정모드일때 컨트롤러가 다르다면 신규로 처리한다.
  572. if (EdId->Text != sCtrlId)
  573. {
  574. TItsAvi *pTmpAvi = FRAMEAviSectList1->MyItsAviManager->FLists.Find(EdId->Text);
  575. if (pTmpAvi)
  576. {
  577. pTmpAvi->FSubLists.Remove(sId);
  578. }
  579. FNewDb = true;
  580. }
  581. }
  582. if (FNewDb)
  583. {
  584. pObj = new TItsAviSect();
  585. pObj->ORD = pAvi->FSubLists.Size() + 1;
  586. }
  587. else
  588. pObj = pAvi->FSubLists.Find(sId);
  589. if (pObj)
  590. {
  591. pObj->AVI_CTLR_MNGM_NMBR = sCtrlId;
  592. pObj->AVI_SECT_NMBR = sId;
  593. pObj->STRT_SPOT_NM = EdSTRT_SPOT_NM->Text.Trim();
  594. pObj->END_SPOT_NM = EdEND_SPOT_NM->Text.Trim();
  595. pObj->AVI_SECT_NM = EdAVI_SECT_NM->Text.Trim();
  596. pObj->AVI_SECT_DSTC = VarToStr(SeAVI_SECT_DSTC->Value);
  597. pObj->SHRT_PASS_HH = VarToStr(SeSHRT_PASS_HH->Value);
  598. pObj->LNST_PASS_HH = VarToStr(SeLNST_PASS_HH->Value);
  599. pObj->SPOT_NUM = VarToStr(SeSPOT_NUM->Value);
  600. pObj->STND_DRFT_VAL = VarToStr(SeSTND_DRFT_VAL->Value);
  601. pObj->MIN_SPED = VarToStr(SeMIN_SPED->Value);
  602. pObj->MAX_SPED = VarToStr(SeMAX_SPED->Value);
  603. pObj->SMTH_FCTR = VarToStr(SeSMTH_FCTR->Value);
  604. pObj->DEL_YN = "N";
  605. pObj->FRST_REGR_NMBR = "";
  606. pObj->FRST_RGST_DT = "";
  607. pObj->LAST_CRPR_NMBR = "";
  608. pObj->LAST_CRCT_DT = "";
  609. pObj->Completed = true;
  610. pObj->MEM_DEL = "N";
  611. pObj->FLinkLists.RemoveAll();
  612. try {
  613. TvLink->BeginUpdate();
  614. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  615. {
  616. String sLinkId = TvLink->DataController->Values[ii][ColLink2->Index];
  617. TItsAviLink *pObjLnk = new TItsAviLink();
  618. pObjLnk->AVI_CTLR_MNGM_NMBR = pObj->AVI_CTLR_MNGM_NMBR;
  619. pObjLnk->AVI_SECT_NMBR = pObj->AVI_SECT_NMBR;
  620. pObjLnk->LINK_ID = sLinkId;
  621. pObjLnk->ORD = ii+1;
  622. pObj->FLinkLists.Push(pObjLnk->ORD, pObjLnk);
  623. pObjLnk->Completed = true;
  624. pObjLnk->MEM_DEL = "N";
  625. }
  626. }
  627. __finally
  628. {
  629. TvLink->EndUpdate();
  630. }
  631. bool bResult;
  632. bResult = FRAMEAviSectList1->MyItsAviManager->SaveAviSect(pObj);
  633. if (bResult)
  634. {
  635. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"AVI-구간 정보저장\r\nAVI-구간 정보를 저장 하였습니다.",
  636. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  637. if (FNewDb)
  638. {
  639. pAvi->FSubLists.Push(pObj->AVI_SECT_NMBR, pObj);
  640. }
  641. FUpdate = true;
  642. UpdateList();
  643. CMM_SetGridRow(FRAMEAviSectList1->CxList, FRAMEAviSectList1->TvList, sId, FRAMEAviSectList1->Column02->Index);
  644. #if 0
  645. DisplayInfo(pObj);
  646. #else
  647. int nRow = FRAMEAviSectList1->TvList->DataController->FocusedRecordIndex;
  648. if( nRow <= -1 )
  649. return;
  650. int nMemPtr = FRAMEAviSectList1->TvList->DataController->Values[nRow][FRAMEAviSectList1->Column99->Index];
  651. TItsAviSect* pObj = (TItsAviSect*)nMemPtr;
  652. DisplayInfo(pObj);
  653. #endif
  654. }
  655. }
  656. }
  657. //---------------------------------------------------------------------------
  658. void __fastcall TAVIM020M::RefreshLink()
  659. {
  660. if (!MapStart) return;
  661. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "ClearSelLink", "0");
  662. try
  663. {
  664. int nRow;
  665. TcxDataController *pGDC = TvLink->DataController;
  666. TvLink->BeginUpdate();
  667. try
  668. {
  669. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  670. {
  671. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  672. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "AddSelLink", sLinkId);
  673. }
  674. }
  675. catch(...)
  676. {
  677. }
  678. }
  679. __finally
  680. {
  681. TvLink->EndUpdate();
  682. }
  683. }
  684. //---------------------------------------------------------------------------
  685. void __fastcall TAVIM020M::BtnLinkDelClick(TObject *Sender)
  686. {
  687. int nSelRows = TvLink->Controller->SelectedRowCount;
  688. if (nSelRows <= 0)
  689. {
  690. Application->MessageBox(L"삭제를 원하는 링크구간을 목록에서 선택하세요.",
  691. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  692. return;
  693. }
  694. TvLink->Controller->DeleteSelection();
  695. RefreshLink();
  696. }
  697. //---------------------------------------------------------------------------
  698. void __fastcall TAVIM020M::BtnLinkAddClick(TObject *Sender)
  699. {
  700. if (EdLinkId->Text.IsEmpty()) return;
  701. String sNewId = EdLinkId->Text;
  702. bool bFound = false;
  703. try
  704. {
  705. int nRow;
  706. TcxDataController *pGDC = TvLink->DataController;
  707. TvLink->BeginUpdate();
  708. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  709. {
  710. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  711. if (sNewId == sLinkId)
  712. {
  713. bFound = true;
  714. break;
  715. }
  716. }
  717. if (bFound)
  718. {
  719. Application->MessageBox(L"이미 등록되어 있는 링크구간 입니다.\r\n링크 구간은 중복해서 등록 할 수 없습니다.",
  720. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  721. return;
  722. }
  723. TItsLink *pLink = ItsLinkManager->FLists.Find(sNewId);
  724. if (pLink)
  725. {
  726. nRow = pGDC->AppendRecord();
  727. pGDC->Values[nRow][ColLink2->Index] = sNewId;
  728. TItsNode *pNode;
  729. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODEID;
  730. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODEID;
  731. pNode = ItsNodeManager->FLists.Find(pLink->F_NODEID);
  732. if (pNode)
  733. {
  734. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  735. }
  736. pNode = ItsNodeManager->FLists.Find(pLink->T_NODEID);
  737. if (pNode)
  738. {
  739. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  740. }
  741. }
  742. else
  743. {
  744. Application->MessageBox(L"데이터베이스에 등록되어 있지 않는 링크구간 입니다.\r\n데이터베이스의 정보를 확인하세요.",
  745. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  746. return;
  747. }
  748. }
  749. __finally
  750. {
  751. TvLink->EndUpdate();
  752. }
  753. RefreshLink();
  754. }
  755. //---------------------------------------------------------------------------
  756. void __fastcall TAVIM020M::TvLinkCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  757. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  758. {
  759. if (!MapStart) return;
  760. if (!ACellViewInfo) return;
  761. int nRow = TvLink->DataController->FocusedRecordIndex;
  762. if( nRow <= -1 )
  763. return;
  764. String sLinkId = TvLink->DataController->Values[nRow][ColLink2->Index];
  765. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "FindLink", sLinkId);
  766. }
  767. //---------------------------------------------------------------------------
  768. void __fastcall TAVIM020M::FRAMEAviSectList1TvListCellDblClickSect(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  769. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  770. {
  771. if (!ACellViewInfo) return;
  772. int nRow = FRAMEAviSectList1->TvList->DataController->FocusedRecordIndex;
  773. if( nRow <= -1 )
  774. return;
  775. int nMemPtr = FRAMEAviSectList1->TvList->DataController->Values[nRow][FRAMEAviSectList1->Column99->Index];
  776. TItsAviSect* pObj = (TItsAviSect*)nMemPtr;
  777. DisplayInfo(pObj);
  778. }
  779. //---------------------------------------------------------------------------
  780. void __fastcall TAVIM020M::FRAMEAviList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  781. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  782. {
  783. if (!ACellViewInfo) return;
  784. int nRow = FRAMEAviList1->TvList->DataController->FocusedRecordIndex;
  785. if( nRow <= -1 )
  786. return;
  787. int nMemPtr = FRAMEAviList1->TvList->DataController->Values[nRow][FRAMEAviList1->Column99->Index];
  788. TItsAvi* pObj = (TItsAvi*)nMemPtr;
  789. try {
  790. FRAMEGisMap1->SelectObjectByPos(StrToFloatDef(pObj->X_CRDN, 0), StrToFloatDef(pObj->Y_CRDN, 0), true);
  791. } catch(...) { }
  792. }
  793. //---------------------------------------------------------------------------
  794. void __fastcall TAVIM020M::ChkGisZoomClick(TObject *Sender)
  795. {
  796. PnlInfo->Visible = !ChkGisZoom->Checked;
  797. }
  798. //---------------------------------------------------------------------------
  799. void __fastcall TAVIM020M::ShockwaveFlash1FlashCall1(TObject *ASender, const WideString request)
  800. {
  801. try
  802. {
  803. String sTemp;
  804. String sFunc;
  805. String sArgs;
  806. sTemp = request;
  807. int nFuncStrIdx = sTemp.Pos("\"");
  808. int nFuncEndIdx = sTemp.Pos("\" returntype");
  809. int nArgsStrIdx = sTemp.Pos("string>");
  810. int nArgsEndIdx = sTemp.Pos("</string");
  811. sFunc = sTemp.SubString(nFuncStrIdx + 1, nFuncEndIdx - (nFuncStrIdx + 1));
  812. sArgs = sTemp.SubString(nArgsStrIdx + 7, nArgsEndIdx - (nArgsStrIdx + 7));
  813. if (sFunc == "OnMapStart")
  814. {
  815. MapStart = true;
  816. String sShowIcon = ChkViewIcon->Checked ? "1" : "0";
  817. String sShowName = ChkViewName->Checked ? "1" : "0";
  818. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "ShowFacility", "RSE|" + sShowIcon + "|" + sShowName);
  819. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "MultiSelect", "1");
  820. }
  821. else
  822. if (sFunc == "OnDrawTrafLink")
  823. {
  824. static bool bFirst = true;
  825. if (bFirst)
  826. {
  827. UpdateAviIcon();
  828. bFirst = true;
  829. }
  830. }
  831. else
  832. if (sFunc == "OnMousePos")
  833. {
  834. if (FRAMEGisMap1->ModeSelect)
  835. {
  836. TStringList *pStringList = new TStringList;
  837. pStringList->CommaText = sArgs;
  838. String sMapX = pStringList->Strings[0]; //lat
  839. String sMapY = pStringList->Strings[1]; //lng
  840. delete pStringList;
  841. try {
  842. //SePosX->Value = sMapX.ToDouble();
  843. //SePosY->Value = sMapY.ToDouble();
  844. } catch(...) {}
  845. }
  846. }
  847. else
  848. if (sFunc == "OnSelLink")
  849. {
  850. if (FRAMEGisMap1->ModeSelect)// && EdRseSectName->Properties->ReadOnly == false)
  851. {
  852. TStringList *pStringList = new TStringList;
  853. pStringList->CommaText = sArgs;
  854. String sLevl = pStringList->Strings[0]; //링크레벨
  855. String sId = pStringList->Strings[1]; //링크아이디
  856. String sZoom = pStringList->Strings[2]; //줌레벨
  857. String sPosX = pStringList->Strings[3]; //x
  858. String sPosY = pStringList->Strings[4]; //y
  859. String sMapX = pStringList->Strings[5]; //lat
  860. String sMapY = pStringList->Strings[6]; //lng
  861. delete pStringList;
  862. EdLinkId->Text = sId;
  863. #if 0
  864. if (BtnLinkAdd->Enabled)
  865. {
  866. if (Shift.Contains(ssCtrl))
  867. {
  868. BtnLinkAddClick((TObject*)BtnLinkAdd);
  869. }
  870. }
  871. #endif
  872. }
  873. }
  874. else
  875. if (sFunc == "OnClickFacility")
  876. {
  877. if (FRAMEGisMap1->ModeSelect)
  878. {
  879. TStringList *pStringList = new TStringList;
  880. pStringList->CommaText = sArgs;
  881. String sType = pStringList->Strings[0]; //유형
  882. String sId = pStringList->Strings[1]; //아이디
  883. String sName = pStringList->Strings[2]; //아이디
  884. delete pStringList;
  885. #if 0
  886. if (cxCheckBox1->Checked)
  887. {
  888. EdStartSpotId->Text = sId;
  889. EdStartSpotNm->Text = sName;
  890. }
  891. else
  892. if (cxCheckBox2->Checked)
  893. {
  894. EdEndSpotId->Text = sId;
  895. EdEndSpotNm->Text = sName;
  896. }
  897. #endif
  898. }
  899. }
  900. }
  901. catch(Exception &exception)
  902. {
  903. }
  904. }
  905. //---------------------------------------------------------------------------
  906. void __fastcall TAVIM020M::ChkViewIconClick(TObject *Sender)
  907. {
  908. if (!MapStart) return;
  909. String sShowIcon = ChkViewIcon->Checked ? "1" : "0";
  910. String sShowName = ChkViewName->Checked ? "1" : "0";
  911. TCommFlash::CallFunc(FRAMEGisMap1->ShockwaveFlash1, "ShowFacility", "AVI|" + sShowIcon + "|" + sShowName);
  912. }
  913. //---------------------------------------------------------------------------