DSRM030MF.cpp 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156
  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 "ITS_OPLibF.h"
  10. #pragma hdrstop
  11. #include "DSRM030MF.h"
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "cxButtons"
  15. #pragma link "cxCalendar"
  16. #pragma link "cxContainer"
  17. #pragma link "cxControls"
  18. #pragma link "cxDropDownEdit"
  19. #pragma link "cxEdit"
  20. #pragma link "cxGraphics"
  21. #pragma link "cxGroupBox"
  22. #pragma link "cxLabel"
  23. #pragma link "cxLookAndFeelPainters"
  24. #pragma link "cxLookAndFeels"
  25. #pragma link "cxMaskEdit"
  26. #pragma link "cxPC"
  27. #pragma link "cxPCdxBarPopupMenu"
  28. #pragma link "cxSpinEdit"
  29. #pragma link "cxSplitter"
  30. #pragma link "cxTextEdit"
  31. #pragma link "cxTimeEdit"
  32. #pragma link "dxSkinBlack"
  33. #pragma link "dxSkinBlue"
  34. #pragma link "dxSkinCaramel"
  35. #pragma link "dxSkinCoffee"
  36. #pragma link "dxSkinDarkRoom"
  37. #pragma link "dxSkinDarkSide"
  38. #pragma link "dxSkinFoggy"
  39. #pragma link "dxSkinGlassOceans"
  40. #pragma link "dxSkiniMaginary"
  41. #pragma link "dxSkinLilian"
  42. #pragma link "dxSkinLiquidSky"
  43. #pragma link "dxSkinLondonLiquidSky"
  44. #pragma link "dxSkinMcSkin"
  45. #pragma link "dxSkinMoneyTwins"
  46. #pragma link "dxSkinOffice2007Black"
  47. #pragma link "dxSkinOffice2007Blue"
  48. #pragma link "dxSkinOffice2007Green"
  49. #pragma link "dxSkinOffice2007Pink"
  50. #pragma link "dxSkinOffice2007Silver"
  51. #pragma link "dxSkinOffice2010Black"
  52. #pragma link "dxSkinOffice2010Blue"
  53. #pragma link "dxSkinOffice2010Silver"
  54. #pragma link "dxSkinsCore"
  55. #pragma link "dxSkinscxPCPainter"
  56. #pragma link "dxSkinSeven"
  57. #pragma link "dxSkinSharp"
  58. #pragma link "dxSkinSilver"
  59. #pragma link "dxSkinStardust"
  60. #pragma link "FRAME_DsrcListF"
  61. #pragma link "cxRadioGroup"
  62. #pragma link "cxClasses"
  63. #pragma link "cxCustomData"
  64. #pragma link "cxData"
  65. #pragma link "cxDataStorage"
  66. #pragma link "cxDBData"
  67. #pragma link "cxFilter"
  68. #pragma link "cxGrid"
  69. #pragma link "cxGridCustomTableView"
  70. #pragma link "cxGridCustomView"
  71. #pragma link "cxGridDBTableView"
  72. #pragma link "cxGridLevel"
  73. #pragma link "cxGridTableView"
  74. #pragma link "cxStyles"
  75. #pragma link "cxCheckBox"
  76. #pragma link "cxCalc"
  77. #pragma link "FRAME_DsrcSectListF"
  78. #pragma link "FRAME_OpenMapF"
  79. #pragma resource "*.dfm"
  80. TDSRM030M *DSRM030M = NULL;
  81. //---------------------------------------------------------------------------
  82. void TDSRM030M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  83. {
  84. try
  85. {
  86. if (!DSRM030M) return;
  87. DSRM030M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  88. }
  89. catch(Exception &exception)
  90. {
  91. }
  92. }
  93. //---------------------------------------------------------------------------
  94. __fastcall TDSRM030M::TDSRM030M(TComponent* Owner)
  95. : TForm(Owner)
  96. {
  97. LangTrans->Translate(this, ITSDb_GetConnection());
  98. ITSSkin_Load(this);
  99. CMM_LoadForm(g_sFormsDir, this);
  100. FUpdate= false;
  101. FTitle = Caption;
  102. TvLink->OptionsView->NoDataToDisplayInfoText = "<수집링크 정보가 없습니다>";
  103. FRAMEDsrcSectList1->PnlBottom->Visible = false;
  104. FRAMEDsrcSectList1->PnlTop->Visible = false;
  105. FRAMEDsrcSectList1->ColumnSel->Visible = false;
  106. FRAMEDsrcSectList1->Column02->Visible = false;
  107. m_pGDC = FRAMEDsrcSectList1->TvList->DataController;
  108. FRAMEDsrcList1->PnlBottom->Visible = false;
  109. FRAMEDsrcList1->PnlTop->Visible = false;
  110. FRAMEDsrcList1->ColumnSel->Visible = false;
  111. //FRAMEDsrcList1->Column02->Visible = false;
  112. MyItsDsrcSectManager = new TItsDsrcSectManager();
  113. MyItsDsrcSectManager->LoadFromDb();
  114. FLayerIdx = LyrTp_Dsrc;
  115. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  116. FRAMEOpenMap1->ChkShowNmbr->Visible = false;
  117. FRAMEOpenMap1->BtnMapSelect->Visible = false;
  118. FRAMEOpenMap1->MapCallbackFunc = TDSRM030M_MapCallback;
  119. EditMode = false;
  120. }
  121. //---------------------------------------------------------------------------
  122. void __fastcall TDSRM030M::CommClose()
  123. {
  124. try
  125. {
  126. CMM_SaveForm(g_sFormsDir, this);
  127. }
  128. catch(...)
  129. {
  130. }
  131. }
  132. //---------------------------------------------------------------------------
  133. void __fastcall TDSRM030M::FormShow(TObject *Sender)
  134. {
  135. Refresh();
  136. FRAMEOpenMap1->OpenMap();
  137. FormInit();
  138. ChangeEditMode(1);
  139. TmrShow->Enabled = true;
  140. }
  141. //---------------------------------------------------------------------------
  142. void __fastcall TDSRM030M::FormInit()
  143. {
  144. //제공구간목록이 초기화되기전에 이전정보를 지도에서 지워준다.
  145. if (FRAMEOpenMap1->MapStart)
  146. {
  147. int nRow;
  148. TcxDataController *pGDC = TvLink->DataController;
  149. try
  150. {
  151. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  152. {
  153. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  154. sJs.printf(L"updateEditLink('%s', 0)", sLinkId.c_str());
  155. FRAMEOpenMap1->ExecScript(sJs);
  156. }
  157. }
  158. catch(...)
  159. {
  160. }
  161. }
  162. EdLinkId->Text = "";
  163. EdRseSectId->Text = "";
  164. EdRseSectName->Text = "";
  165. EdStartSpotId->Text = "";
  166. EdStartSpotNm->Text = "";
  167. EdEndSpotId->Text = "";
  168. EdEndSpotNm->Text = "";
  169. EdRseSectLength->Text = "0";
  170. CMM_ClearGridTableView(TvLink);
  171. FNewDb = false;
  172. }
  173. //---------------------------------------------------------------------------
  174. void __fastcall TDSRM030M::TmrShowTimer(TObject *Sender)
  175. {
  176. TmrShow->Enabled = false;
  177. //UpdateList();
  178. FRAMEDsrcList1->UpdateList();
  179. FRAMEDsrcSectList1->UpdateList();
  180. }
  181. //---------------------------------------------------------------------------
  182. void __fastcall TDSRM030M::UpdateList()
  183. {
  184. FRAMEDsrcSectList1->LoadFromDb();
  185. FRAMEDsrcSectList1->UpdateList();
  186. }
  187. //---------------------------------------------------------------------------
  188. void __fastcall TDSRM030M::BtnCloseClick(TObject *Sender)
  189. {
  190. Close();
  191. }
  192. //---------------------------------------------------------------------------
  193. void __fastcall TDSRM030M::FormClose(TObject *Sender, TCloseAction &Action)
  194. {
  195. CommClose();
  196. DSRM030M = NULL;
  197. Action = caFree;
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TDSRM030M::FormCloseQuery(TObject *Sender, bool &CanClose)
  201. {
  202. #if 0
  203. if (FUpdate)
  204. {
  205. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  206. }
  207. #endif
  208. if (MyItsDsrcSectManager)
  209. {
  210. delete MyItsDsrcSectManager;
  211. MyItsDsrcSectManager = NULL;
  212. }
  213. FRAMEDsrcList1->OnCloseQuery(CanClose);
  214. FRAMEOpenMap1->OnCloseQuery(CanClose);
  215. }
  216. //---------------------------------------------------------------------------
  217. void __fastcall TDSRM030M::DisplayInfo(TItsDsrcSect* AObj)
  218. {
  219. FormInit();
  220. if (!AObj) return;
  221. EdRseSectId->Text = AObj->RSE_SECT_ID;
  222. EdRseSectName->Text = AObj->RSE_SECT_NM;
  223. EdStartSpotId->Text = AObj->STRT_ID;
  224. EdStartSpotNm->Text = AObj->STRT_SPOT_NM;
  225. EdEndSpotId->Text = AObj->END_ID;
  226. EdEndSpotNm->Text = AObj->END_SPOT_NM;
  227. EdRseSectLength->Text = AObj->DSTC;
  228. ChangeEditMode(3);
  229. DisplaySectLink(AObj);
  230. }
  231. //---------------------------------------------------------------------------
  232. void __fastcall TDSRM030M::DisplaySectLink(TItsDsrcSect* AObj)
  233. {
  234. if (!AObj) return;
  235. CMM_ClearGridTableView(TvLink);
  236. String sLinkIds = "";
  237. try
  238. {
  239. int nRow;
  240. TcxDataController *pGDC = TvLink->DataController;
  241. TvLink->BeginUpdate();
  242. FOR_STL(TItsDsrcSectLink *, pObj, AObj->FLinkLists)
  243. {
  244. if (pObj->DEL_YN == "Y" || pObj->MEM_DEL == "Y") continue;
  245. String sLinkId = pObj->LINK_ID;
  246. nRow = pGDC->AppendRecord();
  247. pGDC->Values[nRow][ColLink2->Index] = sLinkId;
  248. TItsLink *pLink = ItsLinkManager->FLists.Find(sLinkId);
  249. if (pLink)
  250. {
  251. TItsNode *pNode;
  252. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODE_ID;
  253. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODE_ID;
  254. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  255. if (pNode)
  256. {
  257. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  258. }
  259. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  260. if (pNode)
  261. {
  262. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  263. }
  264. pGDC->Values[nRow][ColLink7->Index] = StrToInt(pLink->LINK_LENG);
  265. if (sLinkIds == "") sLinkIds = sLinkId;
  266. else sLinkIds = sLinkIds + ","+sLinkId;
  267. }
  268. else
  269. {
  270. pGDC->Values[nRow][ColLink7->Index] = 0;
  271. }
  272. }
  273. }
  274. __finally
  275. {
  276. TvLink->EndUpdate();
  277. }
  278. RefreshSectLink();
  279. if (sLinkIds != "")
  280. {
  281. sJs.printf(L"extentLayerObject(%d, '%s')", LyrTp_Traffic, sLinkIds.c_str());
  282. FRAMEOpenMap1->ExecScript(sJs);
  283. }
  284. }
  285. //---------------------------------------------------------------------------
  286. void __fastcall TDSRM030M::BtnEditClick(TObject *Sender)
  287. {
  288. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  289. {
  290. ChangeEditMode(0);
  291. FNewDb = false;
  292. }
  293. else
  294. {
  295. String sSectId = EdRseSectId->Text;
  296. ChangeEditMode(1);
  297. CMM_SetGridRow(FRAMEDsrcSectList1->CxList, FRAMEDsrcSectList1->TvList, sSectId, FRAMEDsrcSectList1->Column01->Index);
  298. int nRow = FRAMEDsrcSectList1->TvList->DataController->FocusedRecordIndex;
  299. if( nRow <= -1 )
  300. return;
  301. int nMemPtr = FRAMEDsrcSectList1->TvList->DataController->Values[nRow][FRAMEDsrcSectList1->Column99->Index];
  302. TItsDsrcSect* pObj = (TItsDsrcSect*)nMemPtr;
  303. DisplayInfo(pObj);
  304. #if 0
  305. TItsDsrcSect *pObj = MyItsDsrcSectManager->FLists.Find(sSectId);
  306. if (pObj)
  307. {
  308. CMM_SetGridRow(FRAMEDsrcSectList1->CxList, FRAMEDsrcSectList1->TvList, sSectId, FRAMEDsrcSectList1->Column01->Index);
  309. DisplayInfo(pObj);
  310. }
  311. #endif
  312. }
  313. }
  314. //---------------------------------------------------------------------------
  315. void __fastcall TDSRM030M::ChangeEditMode(int AEdit)
  316. {
  317. bool bGisEdit = true;
  318. bool bEnabled = false;
  319. switch(AEdit)
  320. {
  321. case 0: //편집버튼클릭
  322. {
  323. BtnEdit->Enabled = true;
  324. BtnInsert->Enabled = false;
  325. BtnDelete->Enabled = false;
  326. BtnSave->Enabled = true;
  327. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  328. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  329. EditMode = true;
  330. }
  331. break;
  332. case 1: //편집[취소]버튼클릭
  333. {
  334. FormInit(); //화면을 모두 지운다.
  335. BtnEdit->Enabled = false;
  336. BtnInsert->Enabled = true;
  337. BtnDelete->Enabled = false;
  338. BtnSave->Enabled = false;
  339. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  340. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  341. bEnabled = true;
  342. bGisEdit = false;
  343. EditMode = false;
  344. }
  345. break;
  346. case 2: //추가
  347. {
  348. BtnEdit->Enabled = true;
  349. BtnInsert->Enabled = false;
  350. BtnDelete->Enabled = false;
  351. BtnSave->Enabled = true;
  352. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  353. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  354. EditMode = true;
  355. }
  356. break;
  357. case 3: //수정모드
  358. {
  359. BtnEdit->Enabled = true;
  360. BtnInsert->Enabled = true;
  361. BtnDelete->Enabled = true;
  362. BtnSave->Enabled = false;
  363. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  364. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  365. bEnabled = true;
  366. EditMode = false;
  367. }
  368. break;
  369. }
  370. if (AEdit == 0 || AEdit == 2)
  371. {
  372. FRAMEDsrcSectList1->CxList->Enabled = false;
  373. }
  374. else
  375. {
  376. FRAMEDsrcSectList1->CxList->Enabled = true;
  377. }
  378. GrpInfo->Enabled = EditMode;
  379. GrpLink->Enabled = EditMode;
  380. EdRseSectName->Properties->ReadOnly = bEnabled;
  381. cxCheckBox1->Enabled = !bEnabled;
  382. cxCheckBox2->Enabled = !bEnabled;
  383. BtnLinkAdd->Enabled = !bEnabled;
  384. BtnLinkDel->Enabled = !bEnabled;
  385. }
  386. //---------------------------------------------------------------------------
  387. void __fastcall TDSRM030M::BtnInsertClick(TObject *Sender)
  388. {
  389. FormInit();
  390. //신규아이디를 얻어와서 화면을 초기화한다.
  391. String sSectId;
  392. if (!MyItsDsrcSectManager->GetNextSectId(sSectId))
  393. {
  394. Application->MessageBox(L"새로운 수집구간 ID를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  395. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  396. return;
  397. }
  398. EdRseSectId->Text = sSectId;
  399. ChangeEditMode(2);
  400. FNewDb = true;
  401. }
  402. //---------------------------------------------------------------------------
  403. void __fastcall TDSRM030M::BtnDeleteClick(TObject *Sender)
  404. {
  405. m_pGDC = FRAMEDsrcSectList1->TvList->DataController;
  406. int nIdx = m_pGDC->FocusedRecordIndex;
  407. if (nIdx < 0) return;
  408. String sSectId = EdRseSectId->Text;
  409. if (sSectId.IsEmpty())
  410. {
  411. Application->MessageBox(L"삭제할 DSRC 수집구간을 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  412. return;
  413. }
  414. String sMsg;
  415. sMsg = "수집구간 ID: " + sSectId;
  416. sMsg+= "\r\n선택하신 DSRC 수집구간 정보를 삭제하시겠습니까?\r\n관련정보도 함께 삭제 됩니다.";
  417. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  418. TItsDsrcSect *pObj = MyItsDsrcSectManager->FLists.Find(sSectId);
  419. if (pObj)
  420. {
  421. if (MyItsDsrcSectManager->DeleteSect(pObj->RSE_SECT_ID))
  422. {
  423. pObj->DEL_YN = "Y";
  424. UpdateList();
  425. }
  426. UpdateList();
  427. FUpdate = true;
  428. Application->MessageBox(L"DSRC 수집구간 정보삭제\r\nDSRC 수집구간 정보를 삭제 하였습니다.",
  429. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  430. FormInit();
  431. ChangeEditMode(1);
  432. }
  433. }
  434. //---------------------------------------------------------------------------
  435. void __fastcall TDSRM030M::BtnSaveClick(TObject *Sender)
  436. {
  437. if (EdRseSectId->Text.IsEmpty() ||
  438. EdRseSectName->Text.Trim().IsEmpty() ||
  439. EdStartSpotNm->Text.Trim().IsEmpty() ||
  440. EdEndSpotNm->Text.Trim().IsEmpty() ||
  441. EdStartSpotId->Text.IsEmpty() ||
  442. EdRseSectLength->Text.Trim().IsEmpty() ||
  443. EdEndSpotId->Text.IsEmpty() )
  444. {
  445. Application->MessageBox(L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  446. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  447. return;
  448. }
  449. String sSectId = EdRseSectId->Text;
  450. String STRT_ID = EdStartSpotId->Text.Trim();
  451. String END_ID = EdEndSpotId->Text.Trim();
  452. if (TvLink->DataController->RecordCount == 0)
  453. {
  454. Application->MessageBox(L"수집구간 링크정보가 없습니다.\r\n링크정보를 입력후 진행해 주세요.",
  455. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  456. return;
  457. }
  458. if (STRT_ID == END_ID)
  459. {
  460. Application->MessageBox(L"시점 DSRC과 종점 DSRC의 정보가 같습니다.\r\n시/종점 DSRC 정보를 확인 후 진행해 주세요.",
  461. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  462. return;
  463. }
  464. MyItsDsrcSectManager->FLists.Lock();
  465. FOR_STL(TItsDsrcSect*, tmp, MyItsDsrcSectManager->FLists)
  466. {
  467. if (tmp->RSE_SECT_ID == sSectId) continue;
  468. if (tmp->STRT_ID == STRT_ID && tmp->END_ID == END_ID)
  469. {
  470. Application->MessageBox(L"시점 DSRC과 종점 DSRC의 정보가 이미 존재합니다.\r\n시/종점 DSRC 정보를 확인 후 진행해 주세요.",
  471. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  472. MyItsDsrcSectManager->FLists.UnLock();
  473. return;
  474. }
  475. }
  476. MyItsDsrcSectManager->FLists.UnLock();
  477. TItsDsrcSect *pObj;
  478. if (FNewDb)
  479. pObj = new TItsDsrcSect();
  480. else
  481. pObj = MyItsDsrcSectManager->FLists.Find(sSectId);
  482. if (pObj)
  483. {
  484. pObj->RSE_SECT_ID = sSectId;
  485. pObj->DSTC = EdRseSectLength->Text.Trim();
  486. pObj->RSE_SECT_NM = EdRseSectName->Text.Trim();
  487. pObj->STRT_ID = STRT_ID;
  488. pObj->STRT_SPOT_NM = EdStartSpotNm->Text;
  489. pObj->END_ID = END_ID;
  490. pObj->END_SPOT_NM = EdEndSpotNm->Text;
  491. pObj->DEL_YN = "N";
  492. pObj->Completed = true;
  493. pObj->MEM_DEL = "N";
  494. pObj->FLinkLists.RemoveAll();
  495. int nLength = 0;
  496. int nTmp;
  497. try {
  498. TvLink->BeginUpdate();
  499. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  500. {
  501. String sLinkId = TvLink->DataController->Values[ii][ColLink2->Index];
  502. if (VarIsNull(TvLink->DataController->Values[ii][ColLink7->Index]))
  503. nTmp = 0;
  504. else
  505. nTmp = TvLink->DataController->Values[ii][ColLink7->Index];
  506. nLength += nTmp;
  507. TItsDsrcSectLink *pLinkObj = new TItsDsrcSectLink();
  508. pLinkObj->RSE_SECT_ID = pObj->RSE_SECT_ID;
  509. pLinkObj->LINK_ID = sLinkId;
  510. pLinkObj->LINK_ORD = String(ii+1);
  511. pLinkObj->DEL_YN = "N";
  512. pObj->FLinkLists.Push(pLinkObj->LINK_ORD, pLinkObj);
  513. }
  514. }
  515. __finally
  516. {
  517. TvLink->EndUpdate();
  518. pObj->DSTC = String(nLength);
  519. }
  520. bool bResult;
  521. bResult = MyItsDsrcSectManager->SaveSect(pObj);
  522. if (bResult)
  523. {
  524. Application->MessageBox(L"DSRC 수집구간 정보저장\r\nDSRC 수집구간 정보를 저장 하였습니다.",
  525. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  526. if (FNewDb)
  527. {
  528. MyItsDsrcSectManager->FLists.Push(pObj->RSE_SECT_ID, pObj);
  529. }
  530. FUpdate = true;
  531. UpdateList();
  532. CMM_SetGridRow(FRAMEDsrcSectList1->CxList, FRAMEDsrcSectList1->TvList, sSectId, FRAMEDsrcSectList1->Column01->Index);
  533. int nRow = FRAMEDsrcSectList1->TvList->DataController->FocusedRecordIndex;
  534. if( nRow <= -1 )
  535. return;
  536. int nMemPtr = FRAMEDsrcSectList1->TvList->DataController->Values[nRow][FRAMEDsrcSectList1->Column99->Index];
  537. TItsDsrcSect* pObj = (TItsDsrcSect*)nMemPtr;
  538. DisplayInfo(pObj);
  539. }
  540. }
  541. }
  542. //---------------------------------------------------------------------------
  543. void __fastcall TDSRM030M::RefreshSectLink()
  544. {
  545. if (!FRAMEOpenMap1->MapStart) return;
  546. int nLength = 0;
  547. int nTmp;
  548. try
  549. {
  550. int nRow;
  551. TcxDataController *pGDC = TvLink->DataController;
  552. TvLink->BeginUpdate();
  553. try
  554. {
  555. int nSeq = 1;
  556. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  557. {
  558. pGDC->Values[ii][ColSeq->Index] = nSeq;
  559. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  560. if (VarIsNull(pGDC->Values[ii][ColLink7->Index]))
  561. nTmp = 0;
  562. else
  563. nTmp = pGDC->Values[ii][ColLink7->Index];
  564. nLength += nTmp;
  565. sJs.printf(L"updateEditLink('%s', %d)", sLinkId.c_str(), nSeq);
  566. FRAMEOpenMap1->ExecScript(sJs);
  567. if (nSeq++ > ITSMAP_MAX_DISPCOLOR) nSeq = 1;
  568. }
  569. }
  570. catch(...)
  571. {
  572. }
  573. }
  574. __finally
  575. {
  576. TvLink->EndUpdate();
  577. EdRseSectLength->Text = String(nLength);
  578. }
  579. }
  580. //---------------------------------------------------------------------------
  581. void __fastcall TDSRM030M::UpdateRseIcon()
  582. {
  583. if (!FRAMEOpenMap1->MapStart) return;
  584. String arrObj = "";
  585. String sTemp;
  586. try
  587. {
  588. try
  589. {
  590. FRAMEDsrcList1->MyItsDsrcManager->FLists.Lock();
  591. FOR_STL(TItsDsrc*, pObj, FRAMEDsrcList1->MyItsDsrcManager->FLists)
  592. {
  593. if (pObj->DEL_YN == "Y") continue;
  594. if (arrObj != "") arrObj += "|";
  595. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_ID.c_str(), pObj->ISTL_LCTN_NM.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  596. arrObj += sTemp;
  597. }
  598. }
  599. __finally
  600. {
  601. FRAMEDsrcList1->MyItsDsrcManager->FLists.UnLock();
  602. if (arrObj != "")
  603. {
  604. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  605. FRAMEOpenMap1->ExecScript(sJs);
  606. sJs.printf(L"showLayerText(%d, %d)", FLayerIdx, (ChkViewIcon->Checked) ? 1: 0);
  607. FRAMEOpenMap1->ExecScript(sJs);
  608. }
  609. }
  610. }
  611. catch(...)
  612. {
  613. }
  614. }
  615. //---------------------------------------------------------------------------
  616. void __fastcall TDSRM030M::UpdateEditLink()
  617. {
  618. if (!FRAMEOpenMap1->MapStart) return;
  619. TItsNode* pNode;
  620. String STRT_NM;
  621. String END_NM;
  622. int FLinkLevel = 1;
  623. try
  624. {
  625. if (FLinkLevel == 1)
  626. {
  627. ItsLinkManager->FLists.Lock();
  628. try
  629. {
  630. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  631. {
  632. if (pLink->DEL_YN == "Y") continue;
  633. if (pLink->IsVertex)
  634. {
  635. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  636. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  637. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  638. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  639. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  640. pLink->LINK_ID.c_str(),
  641. pLink->ROAD_NAME.c_str(),
  642. STRT_NM.c_str(),
  643. END_NM.c_str(),
  644. pLink->X_CRDN_ARR.c_str(),
  645. pLink->Y_CRDN_ARR.c_str());
  646. FRAMEOpenMap1->ExecScript(sJs);
  647. }
  648. }
  649. }
  650. __finally
  651. {
  652. ItsLinkManager->FLists.UnLock();
  653. }
  654. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  655. }
  656. else
  657. if (FLinkLevel == 2)
  658. {
  659. ItsIfscManager->FLists.Lock();
  660. try
  661. {
  662. FOR_STL(TItsIfsc*, pIfsc, ItsIfscManager->FLists)
  663. {
  664. if (pIfsc->DEL_YN == "Y") continue;
  665. if (pIfsc->IsVertex)
  666. {
  667. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  668. pIfsc->IFSC_ID.c_str(),
  669. pIfsc->IFSC_NM.c_str(),
  670. pIfsc->STRT_NM.c_str(),
  671. pIfsc->END_NM.c_str(),
  672. pIfsc->X_CRDN_ARR.c_str(),
  673. pIfsc->Y_CRDN_ARR.c_str());
  674. FRAMEOpenMap1->ExecScript(sJs);
  675. }
  676. }
  677. }
  678. __finally
  679. {
  680. ItsIfscManager->FLists.UnLock();
  681. }
  682. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  683. }
  684. else
  685. if (FLinkLevel == 3)
  686. {
  687. ItsRoadManager->FLists.Lock();
  688. try
  689. {
  690. FOR_STL(TItsRoad*, pRoad, ItsRoadManager->FLists)
  691. {
  692. if (pRoad->DEL_YN == "Y") continue;
  693. if (pRoad->IsVertex)
  694. {
  695. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  696. pRoad->ROAD_ID.c_str(),
  697. pRoad->ROAD_NM.c_str(),
  698. pRoad->STRT_NM.c_str(),
  699. pRoad->END_NM.c_str(),
  700. pRoad->X_CRDN_ARR.c_str(),
  701. pRoad->Y_CRDN_ARR.c_str());
  702. FRAMEOpenMap1->ExecScript(sJs);
  703. }
  704. }
  705. }
  706. __finally
  707. {
  708. ItsRoadManager->FLists.UnLock();
  709. }
  710. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  711. }
  712. }
  713. catch(...)
  714. {
  715. }
  716. }
  717. //---------------------------------------------------------------------------
  718. void __fastcall TDSRM030M::TvLinkCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  719. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  720. {
  721. if (!FRAMEOpenMap1->MapStart) return;
  722. if (!ACellViewInfo) return;
  723. int nRow = TvLink->DataController->FocusedRecordIndex;
  724. if( nRow <= -1 )
  725. return;
  726. String sLinkId = TvLink->DataController->Values[nRow][ColLink2->Index];
  727. sJs.printf(L"extentLayerObject(%d, '%s')", LyrTp_Traffic, sLinkId.c_str());
  728. FRAMEOpenMap1->ExecScript(sJs);
  729. //EdLinkId->Text = sLinkId;
  730. }
  731. //---------------------------------------------------------------------------
  732. void __fastcall TDSRM030M::FRAMEDsrcList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  733. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  734. {
  735. if (!ACellViewInfo) return;
  736. int nRow = FRAMEDsrcList1->TvList->DataController->FocusedRecordIndex;
  737. if( nRow <= -1 )
  738. return;
  739. int nMemPtr = FRAMEDsrcList1->TvList->DataController->Values[nRow][FRAMEDsrcList1->Column99->Index];
  740. TItsDsrc* pObj = (TItsDsrc*)nMemPtr;
  741. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, pObj->CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  742. FRAMEOpenMap1->ExecScript(sJs);
  743. }
  744. //---------------------------------------------------------------------------
  745. void __fastcall TDSRM030M::cxCheckBox1Click(TObject *Sender)
  746. {
  747. if (cxCheckBox1->Checked)
  748. {
  749. if (cxCheckBox2->Checked) cxCheckBox2->Checked = false;
  750. }
  751. }
  752. //---------------------------------------------------------------------------
  753. void __fastcall TDSRM030M::cxCheckBox2Click(TObject *Sender)
  754. {
  755. if (cxCheckBox2->Checked)
  756. {
  757. if (cxCheckBox1->Checked) cxCheckBox1->Checked = false;
  758. }
  759. }
  760. //---------------------------------------------------------------------------
  761. void __fastcall TDSRM030M::BtnLinkDelClick(TObject *Sender)
  762. {
  763. int nSelRows = TvLink->Controller->SelectedRowCount;
  764. if (nSelRows <= 0)
  765. {
  766. Application->MessageBox(L"삭제를 원하는 링크구간을 목록에서 선택하세요.",
  767. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  768. return;
  769. }
  770. for (int ii = 0; ii < nSelRows; ii++)
  771. {
  772. int nSelIdx = TvLink->Controller->SelectedRows[ii]->RecordIndex;
  773. String sLinkId = TvLink->DataController->Values[nSelIdx][ColLink2->Index];
  774. sJs.printf(L"updateEditLink('%s', 0)", sLinkId.c_str());
  775. FRAMEOpenMap1->ExecScript(sJs);
  776. }
  777. TvLink->Controller->DeleteSelection();
  778. //RefreshSectLink();
  779. }
  780. //---------------------------------------------------------------------------
  781. void __fastcall TDSRM030M::BtnLinkAddClick(TObject *Sender)
  782. {
  783. if (EdLinkId->Text.IsEmpty()) return;
  784. String sNewId = EdLinkId->Text;
  785. bool bFound = false;
  786. try
  787. {
  788. int nRow;
  789. TcxDataController *pGDC = TvLink->DataController;
  790. TvLink->BeginUpdate();
  791. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  792. {
  793. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  794. if (sNewId == sLinkId)
  795. {
  796. bFound = true;
  797. break;
  798. }
  799. }
  800. if (bFound)
  801. {
  802. Application->MessageBox(L"이미 등록되어 있는 링크구간 입니다.\r\n링크구간은 중복해서 등록 할 수 없습니다.",
  803. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  804. return;
  805. }
  806. TItsLink *pLink = ItsLinkManager->FLists.Find(sNewId);
  807. if (pLink)
  808. {
  809. nRow = pGDC->AppendRecord();
  810. pGDC->Values[nRow][ColLink2->Index] = sNewId;
  811. TItsNode *pNode;
  812. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODE_ID;
  813. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODE_ID;
  814. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  815. if (pNode)
  816. {
  817. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  818. }
  819. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  820. if (pNode)
  821. {
  822. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  823. }
  824. pGDC->Values[nRow][ColLink7->Index] = StrToInt(pLink->LINK_LENG);
  825. }
  826. else
  827. {
  828. Application->MessageBox(L"데이터베이스에 등록되어 있지 않는 링크구간 입니다.\r\n데이터베이스의 정보를 확인하세요.",
  829. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  830. return;
  831. }
  832. }
  833. __finally
  834. {
  835. TvLink->EndUpdate();
  836. }
  837. EdLinkId->Text = "";
  838. RefreshSectLink();
  839. }
  840. //---------------------------------------------------------------------------
  841. void __fastcall TDSRM030M::FRAMEDsrcSectList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  842. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  843. {
  844. if (!ACellViewInfo) return;
  845. int nRow = FRAMEDsrcSectList1->TvList->DataController->FocusedRecordIndex;
  846. if( nRow <= -1 )
  847. return;
  848. int nMemPtr = FRAMEDsrcSectList1->TvList->DataController->Values[nRow][FRAMEDsrcSectList1->Column99->Index];
  849. TItsDsrcSect* pObj = (TItsDsrcSect*)nMemPtr;
  850. DisplayInfo(pObj);
  851. }
  852. //---------------------------------------------------------------------------
  853. void __fastcall TDSRM030M::ChkGisZoomClick(TObject *Sender)
  854. {
  855. GrpInfo->Visible = !ChkGisZoom->Checked;
  856. }
  857. //---------------------------------------------------------------------------
  858. void __fastcall TDSRM030M::AddRemoveLink(String ALinkId)
  859. {
  860. TItsLink* pObj = ItsLinkManager->FLists.Find(ALinkId);
  861. if (!pObj) return;
  862. try
  863. {
  864. int nRow;
  865. TcxDataController *pGDC = TvLink->DataController;
  866. TvLink->BeginUpdate();
  867. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  868. {
  869. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  870. if (ALinkId == sLinkId)
  871. {
  872. //pGDC->DeleteRecord(ii);
  873. return;
  874. }
  875. }
  876. nRow = pGDC->AppendRecord();
  877. TItsNode *pNode;
  878. String sFNodeName = pObj->F_NODE_ID;
  879. pNode = ItsNodeManager->FLists.Find(pObj->F_NODE_ID);
  880. if (pNode) sFNodeName = pNode->NODE_NAME;
  881. String sTNodeName = pObj->T_NODE_ID;
  882. pNode = ItsNodeManager->FLists.Find(pObj->T_NODE_ID);
  883. if (pNode) sTNodeName = pNode->NODE_NAME;
  884. pGDC->Values[nRow][ColLink2->Index] = ALinkId;
  885. pGDC->Values[nRow][ColLink3->Index] = pObj->F_NODE_ID;
  886. pGDC->Values[nRow][ColLink5->Index] = pObj->T_NODE_ID;
  887. pGDC->Values[nRow][ColLink4->Index] = sFNodeName;
  888. pGDC->Values[nRow][ColLink6->Index] = sTNodeName;
  889. pGDC->Values[nRow][ColLink7->Index] = StrToInt(pObj->LINK_LENG);
  890. }
  891. __finally
  892. {
  893. TvLink->EndUpdate();
  894. RefreshSectLink();
  895. }
  896. }
  897. //---------------------------------------------------------------------------
  898. void __fastcall TDSRM030M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  899. {
  900. try
  901. {
  902. if (AFirst)
  903. {
  904. //지도를 편집모드로 변경
  905. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  906. FRAMEOpenMap1->ExecScript(sJs);
  907. //편집레이어 생성
  908. FRAMEOpenMap1->ExecScript("initEditLayer()");
  909. //배경링크레이어 생성
  910. UpdateEditLink();
  911. //시설물아이콘 등록
  912. UpdateRseIcon();
  913. //화면을 시설물 여역으로 확대
  914. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  915. FRAMEOpenMap1->ExecScript(sJs);
  916. return;
  917. }
  918. if (AFunc.Pos("onlinkclick"))
  919. {
  920. TStringList *pStringList = new TStringList;
  921. pStringList->CommaText = AArgs;
  922. try
  923. {
  924. String sLyrType = pStringList->Strings[0];
  925. String sLinkId = pStringList->Strings[1];
  926. if (EditMode)
  927. {
  928. //AddRemoveLink(sLinkId);
  929. EdLinkId->Text = sLinkId;
  930. }
  931. }
  932. catch(Exception &e)
  933. {
  934. }
  935. delete pStringList;
  936. }
  937. if (AFunc.Pos("onfacilityclick"))
  938. {
  939. if (EditMode)
  940. {
  941. TStringList *pStringList = new TStringList;
  942. pStringList->CommaText = AArgs;
  943. try
  944. {
  945. String sZoom = pStringList->Strings[0];
  946. String sNmbr = pStringList->Strings[1];
  947. TItsDsrc *pObj = ItsDsrcManager->FLists.Find(sNmbr);
  948. if (pObj)
  949. {
  950. if (cxCheckBox1->Checked)
  951. {
  952. EdStartSpotId->Text = pObj->CTLR_NMBR;
  953. EdStartSpotNm->Text = pObj->ISTL_LCTN_NM;
  954. }
  955. else
  956. if (cxCheckBox2->Checked)
  957. {
  958. EdEndSpotId->Text = pObj->CTLR_NMBR;
  959. EdEndSpotNm->Text = pObj->ISTL_LCTN_NM;
  960. }
  961. }
  962. }
  963. catch(Exception &e)
  964. {
  965. }
  966. delete pStringList;
  967. }
  968. }
  969. }
  970. catch(Exception &exception)
  971. {
  972. }
  973. }
  974. //---------------------------------------------------------------------------
  975. void __fastcall TDSRM030M::ChkViewIconClick(TObject *Sender)
  976. {
  977. if (!FRAMEOpenMap1->MapStart) return;
  978. sJs.printf(L"showLayerText(%d, %d)", FLayerIdx, (ChkViewIcon->Checked) ? 1: 0);
  979. FRAMEOpenMap1->ExecScript(sJs);
  980. }
  981. //---------------------------------------------------------------------------
  982. void __fastcall TDSRM030M::ColSeqCustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  983. bool &ADone)
  984. {
  985. if (AViewInfo->GridRecord->RecordIndex < 0)
  986. return;
  987. if (VarIsNull(AViewInfo->Value))
  988. return;
  989. try
  990. {
  991. int nIdx = AViewInfo->Value;
  992. if (nIdx < 0)
  993. return;
  994. ACanvas->Brush->Color = ITSMap_GetDisplayColor(nIdx);
  995. ACanvas->Font->Color = ACanvas->Brush->Color;
  996. }
  997. catch(...)
  998. {
  999. }
  1000. }
  1001. //---------------------------------------------------------------------------