IDB0120MF.cpp 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  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 "CDSRoadF.h"
  10. #include "ITSLangTransF.h"
  11. #pragma hdrstop
  12. #include "IDB0120MF.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 "dxSkinsCore"
  43. #pragma link "dxSkinscxPCPainter"
  44. #pragma link "FRAME_AtrdListF"
  45. #pragma link "FRAME_GoogleMapF"
  46. #pragma link "GMClasses"
  47. #pragma link "GMLinkedComponents"
  48. #pragma link "GMMap"
  49. #pragma link "GMPolyline"
  50. #pragma link "GMPolylineVCL"
  51. #pragma resource "*.dfm"
  52. TIDB0120M *IDB0120M = NULL;
  53. //---------------------------------------------------------------------------
  54. __fastcall TIDB0120M::TIDB0120M(TComponent* Owner)
  55. : TForm(Owner)
  56. {
  57. LangTrans->Translate(this, ITSDb_GetConnection());
  58. ITSSkin_Load(this);
  59. CMM_LoadForm(g_sFormsDir, this);
  60. FUpdate= false;
  61. FTitle = Caption;//"간선도로 관리";
  62. m_pGDC = FRAMEAtrdList1->TvList->DataController;
  63. FRAMEAtrdList1->PnlTop->Visible = false;
  64. //FRAMEAtrdList1->PnlBottom->Visible = false;
  65. FRAMEAtrdList1->ColumnSel->Visible = false;
  66. FPolyManager = new TPolyManager();
  67. FSelLink = NULL;
  68. FRAMEGoogleMap1->BtnIconSelect->Visible = true;
  69. FRAMEGoogleMap1->BtnIconSelect->Enabled = true;
  70. FRAMEGoogleMap1->FOnZoomChanged = FRAMEGoogleMapOnZoomChange;
  71. TvLink->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<간선도로 링크구성정보>";
  72. }
  73. //---------------------------------------------------------------------------
  74. void __fastcall TIDB0120M::CommClose()
  75. {
  76. try
  77. {
  78. if (FPolyManager) delete FPolyManager;
  79. FPolyManager = NULL;
  80. CMM_SaveForm(g_sFormsDir, this);
  81. }
  82. catch(...)
  83. {
  84. }
  85. }
  86. //---------------------------------------------------------------------------
  87. void __fastcall TIDB0120M::FormShow(TObject *Sender)
  88. {
  89. Refresh();
  90. CbDRCT_CD->ItemIndex = 0;
  91. //CbDRCT_CD->Enabled = false;
  92. CbDRCT_CD->Properties->ReadOnly = true;
  93. EdId->Properties->ReadOnly = true;
  94. EdATRD_ID->Properties->ReadOnly = true;
  95. EdATRD_NM->Properties->ReadOnly = true;
  96. EdDRCT_NM->Properties->ReadOnly = true;
  97. EdAREA_CD->Properties->ReadOnly = true;
  98. FormInit();
  99. ChangeEditMode(1);
  100. TmrShow->Enabled = true;
  101. }
  102. //---------------------------------------------------------------------------
  103. void __fastcall TIDB0120M::FormInit()
  104. {
  105. EdId->Text = "";
  106. EdATRD_ID->Text = "";
  107. EdATRD_NM->Text = "";
  108. EdDRCT_NM->Text = "";
  109. //CbDRCT_CD->ItemIndex = 0;
  110. EdAREA_CD->Text = "";
  111. ClearGisLink();
  112. CMM_ClearGridTableView(TvLink);
  113. FNewDb = false;
  114. }
  115. //---------------------------------------------------------------------------
  116. void __fastcall TIDB0120M::TmrShowTimer(TObject *Sender)
  117. {
  118. TmrShow->Enabled = false;
  119. FRAMEGoogleMap1->LinkLevel = 3;
  120. FRAMEGoogleMap1->LoadGisMap();
  121. InitGisLink();
  122. UpdateList();
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TIDB0120M::InitGisLink()
  126. {
  127. TGMPolyline *pLink = GMPolyLink;
  128. TPolyline *pLn = NULL;
  129. pLink = GMPolyLink;
  130. try
  131. {
  132. ItsRoadManager->FLists.Lock();
  133. FOR_STL(TItsRoad*, pObj, ItsRoadManager->FLists)
  134. {
  135. if (pObj->Coords.Size() < 2) continue;
  136. pLn = pLink->Add();
  137. if (!pLn) continue;
  138. pLn->Tag = (int)pObj;
  139. pLn->FObject = (TObject*)&pObj->bounds;
  140. pLn->Text = pObj->ROAD_ID;
  141. FOR_STL(TItsCoord*, pCoord, pObj->Coords)
  142. {
  143. pLn->AddLinePoint(pCoord->Y, pCoord->X);
  144. }
  145. pLn->StrokeColor = clBlue;//clSilver;
  146. pLn->StrokeWeight = 4;
  147. pLn->StrokeOpacity = 1;
  148. pLn->AutoUpdatePath = true;
  149. pLn->Visible = true;
  150. pLn->Clickable = true;
  151. FPolyManager->FLists.Push(pLn->Text, pLn);
  152. }
  153. }
  154. __finally
  155. {
  156. ItsRoadManager->FLists.UnLock();
  157. pLink->Map = FRAMEGoogleMap1->GMMap1;
  158. }
  159. }
  160. //---------------------------------------------------------------------------
  161. void __fastcall TIDB0120M::UpdateList()
  162. {
  163. FRAMEAtrdList1->UpdateList();
  164. }
  165. //---------------------------------------------------------------------------
  166. void __fastcall TIDB0120M::BtnCloseClick(TObject *Sender)
  167. {
  168. Close();
  169. }
  170. //---------------------------------------------------------------------------
  171. void __fastcall TIDB0120M::FormClose(TObject *Sender, TCloseAction &Action)
  172. {
  173. CommClose();
  174. IDB0120M = NULL;
  175. Action = caFree;
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TIDB0120M::FormCloseQuery(TObject *Sender, bool &CanClose)
  179. {
  180. #if 0
  181. //xxxxxxxx
  182. if (FUpdate)
  183. {
  184. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  185. }
  186. #endif
  187. FRAMEAtrdList1->OnCloseQuery(CanClose);
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TIDB0120M::DisplayInfo(TItsAtrd* AObj)
  191. {
  192. FormInit();
  193. if (!AObj) return;
  194. EdId->Text = AObj->ATRD_ID;
  195. EdATRD_ID->Text = AObj->ATRD_ID;
  196. EdATRD_NM->Text = AObj->ATRD_NM;
  197. EdDRCT_NM->Text = AObj->DRCT_NM;
  198. //CbDRCT_CD->Properties->ReadOnly = false;
  199. CbDRCT_CD->ItemIndex = (AObj->DRCT_CD.Trim() == "0") ? 0 : 1;
  200. //CbDRCT_CD->Properties->ReadOnly = true;
  201. EdAREA_CD->Text = AObj->AREA_CD;
  202. ChangeEditMode(3);
  203. DisplayLink(AObj);
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TIDB0120M::ClearGisLink()
  207. {
  208. try
  209. {
  210. TcxDataController *pGDC = TvLink->DataController;
  211. TvLink->BeginUpdate();
  212. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  213. {
  214. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  215. TPolyline* pLn = FPolyManager->FLists.Find(sLinkId);
  216. if (pLn)
  217. {
  218. pLn->StrokeColor = clBlue;
  219. }
  220. }
  221. }
  222. __finally
  223. {
  224. TvLink->EndUpdate();
  225. }
  226. }
  227. //---------------------------------------------------------------------------
  228. void __fastcall TIDB0120M::DisplayLink(TItsAtrd* AObj)
  229. {
  230. if (!AObj) return;
  231. CMM_ClearGridTableView(TvLink);
  232. try
  233. {
  234. int nRow;
  235. TcxDataController *pGDC = TvLink->DataController;
  236. TvLink->BeginUpdate();
  237. FOR_STL(TItsAtrdRoad *, pObj, AObj->FSubLists)
  238. {
  239. String sLinkId = pObj->ROAD_ID;
  240. nRow = pGDC->AppendRecord();
  241. pGDC->Values[nRow][ColLink2->Index] = sLinkId;
  242. TItsRoad *pLink = ItsRoadManager->FLists.Find(sLinkId);
  243. if (pLink)
  244. {
  245. TItsNode *pNode;
  246. pGDC->Values[nRow][ColLink1->Index] = String(pObj->ORD);
  247. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODE_ID;
  248. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODE_ID;
  249. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  250. if (pNode)
  251. {
  252. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  253. }
  254. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  255. if (pNode)
  256. {
  257. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  258. }
  259. }
  260. }
  261. }
  262. __finally
  263. {
  264. TvLink->EndUpdate();
  265. }
  266. RefreshLink();
  267. }
  268. //---------------------------------------------------------------------------
  269. void __fastcall TIDB0120M::BtnEditClick(TObject *Sender)
  270. {
  271. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  272. {
  273. ChangeEditMode(0);
  274. FNewDb = false;
  275. }
  276. else
  277. {
  278. String sId = EdId->Text;
  279. ChangeEditMode(1);
  280. CMM_SetGridRow(FRAMEAtrdList1->CxList, FRAMEAtrdList1->TvList, sId, FRAMEAtrdList1->Column01->Index);
  281. int nRow = FRAMEAtrdList1->TvList->DataController->FocusedRecordIndex;
  282. if( nRow <= -1 )
  283. return;
  284. int nMemPtr = FRAMEAtrdList1->TvList->DataController->Values[nRow][FRAMEAtrdList1->Column99->Index];
  285. TItsAtrd* pObj = (TItsAtrd*)nMemPtr;
  286. DisplayInfo(pObj);
  287. }
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TIDB0120M::ChangeEditMode(int AEdit)
  291. {
  292. bool bGisEdit = true;
  293. bool bEnabled = false;
  294. switch(AEdit)
  295. {
  296. case 0: //편집버튼클릭
  297. {
  298. BtnEdit->Enabled = true;
  299. BtnInsert->Enabled = false;
  300. BtnDelete->Enabled = false;
  301. BtnSave->Enabled = true;
  302. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  303. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  304. }
  305. break;
  306. case 1: //편집[취소]버튼클릭
  307. {
  308. FormInit(); //화면을 모두 지운다.
  309. BtnEdit->Enabled = false;
  310. BtnInsert->Enabled = true;
  311. BtnDelete->Enabled = false;
  312. BtnSave->Enabled = false;
  313. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  314. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  315. bEnabled = true;
  316. bGisEdit = false;
  317. }
  318. break;
  319. case 2: //추가
  320. {
  321. BtnEdit->Enabled = true;
  322. BtnInsert->Enabled = false;
  323. BtnDelete->Enabled = false;
  324. BtnSave->Enabled = true;
  325. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  326. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  327. }
  328. break;
  329. case 3: //수정모드
  330. {
  331. BtnEdit->Enabled = true;
  332. BtnInsert->Enabled = true;
  333. BtnDelete->Enabled = true;
  334. BtnSave->Enabled = false;
  335. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  336. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  337. bEnabled = true;
  338. }
  339. break;
  340. }
  341. if (AEdit == 0 || AEdit == 2)
  342. {
  343. FRAMEAtrdList1->CxList->Enabled = false;
  344. }
  345. else
  346. {
  347. FRAMEAtrdList1->CxList->Enabled = true;
  348. }
  349. //CbAVI_CTLR_MNGM_NMBR->ItemIndex = -1;
  350. EdId->Properties->ReadOnly = bEnabled;
  351. EdATRD_ID->Properties->ReadOnly = bEnabled;
  352. EdATRD_NM->Properties->ReadOnly = bEnabled;
  353. EdDRCT_NM->Properties->ReadOnly = bEnabled;
  354. //CbDRCT_CD->ItemIndex = 0;
  355. //CbDRCT_CD->Enabled = !bEnabled;
  356. CbDRCT_CD->Properties->ReadOnly = bEnabled;
  357. EdAREA_CD->Properties->ReadOnly = bEnabled;
  358. BtnLinkAdd->Enabled = !bEnabled;
  359. BtnLinkDel->Enabled = !bEnabled;
  360. BtnUp->Enabled = !bEnabled;
  361. BtnDown->Enabled = !bEnabled;
  362. if (FRAMEGoogleMap1->GMMap1->Active)
  363. {
  364. RefreshLink();
  365. }
  366. }
  367. //---------------------------------------------------------------------------
  368. void __fastcall TIDB0120M::BtnInsertClick(TObject *Sender)
  369. {
  370. FormInit();
  371. //신규아이디를 얻어와서 화면을 초기화한다.
  372. String sId;
  373. sId = InputBox(lblInput->Caption,//"간선도로 ID",
  374. lblInQry->Caption,//"신규 간선도로 ID를 입력하세요.",
  375. lblInput->Caption);//"간선도로 ID" );
  376. sId = sId.Trim();
  377. if (sId == lblInput->Caption//"간선도로 ID"
  378. || sId == "")
  379. {
  380. return;
  381. }
  382. if (AnsiString(sId).Length() > 10)
  383. {
  384. Application->MessageBox(lblDigitErr->Caption.c_str(),//L"간선도로 ID는 10Byte를 초과할 수 없습니다.",
  385. FTitle.c_str(),
  386. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  387. return;
  388. }
  389. try
  390. {
  391. FRAMEAtrdList1->MyItsAtrdManager->FLists.Lock();
  392. TItsAtrd *pDb = FRAMEAtrdList1->MyItsAtrdManager->FLists.Find(sId);
  393. if (pDb)
  394. {
  395. String sErr = FrmLang->lbIdErr->Caption + "[" + sId + "]";
  396. Application->MessageBox(sErr.c_str(),//("[" + sId + "]는 사용할 수 없는 간선도로 ID 입니다.").c_str(),
  397. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  398. return;
  399. }
  400. }
  401. __finally
  402. {
  403. FRAMEAtrdList1->MyItsAtrdManager->FLists.UnLock();
  404. }
  405. EdId->Text = "";
  406. EdATRD_ID->Text = sId;
  407. ChangeEditMode(2);
  408. FNewDb = true;
  409. }
  410. //---------------------------------------------------------------------------
  411. void __fastcall TIDB0120M::BtnDeleteClick(TObject *Sender)
  412. {
  413. int nIdx = m_pGDC->FocusedRecordIndex;
  414. if (nIdx < 0) return;
  415. String sId = EdATRD_ID->Text;
  416. if (sId.IsEmpty())
  417. {
  418. Application->MessageBox(lblText1->Caption.c_str(),//L"삭제할 간선도로 정보를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  419. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  420. return;
  421. }
  422. String sMsg;
  423. sMsg = lblInput->Caption + ": " + sId;//"간선도로 ID: " + sId;
  424. sMsg+= "\r\n" + lblText2->Caption;//"선택하신 간선도로 정보를 삭제하시겠습니까?\r\n관련정보도 함께 삭제 됩니다.";
  425. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  426. TItsAtrd *pObj = NULL;
  427. try
  428. {
  429. FRAMEAtrdList1->MyItsAtrdManager->FLists.Lock();
  430. pObj = FRAMEAtrdList1->MyItsAtrdManager->FLists.Find(sId);
  431. }
  432. __finally
  433. {
  434. FRAMEAtrdList1->MyItsAtrdManager->FLists.UnLock();
  435. }
  436. if (pObj)
  437. {
  438. if (FRAMEAtrdList1->MyItsAtrdManager->DeleteAtrd(pObj))
  439. {
  440. pObj->DEL_YN = "Y";
  441. UpdateList();
  442. }
  443. Application->MessageBox(lblText3->Caption.c_str(),//L"간선도로 정보 삭제\r\n간선도로 정보를 삭제 하였습니다.",
  444. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  445. FUpdate = true;
  446. FormInit();
  447. ChangeEditMode(1);
  448. }
  449. }
  450. //---------------------------------------------------------------------------
  451. void __fastcall TIDB0120M::BtnSaveClick(TObject *Sender)
  452. {
  453. TItsAtrd *pObj;
  454. String sId = EdATRD_ID->Text;
  455. if (EdATRD_ID->Text.IsEmpty() ||
  456. EdATRD_NM->Text.Trim().IsEmpty() ||
  457. CbDRCT_CD->ItemIndex < 0)
  458. {
  459. Application->MessageBox(FrmLang->lblCnfm->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  460. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  461. return;
  462. }
  463. if (FNewDb)
  464. {
  465. pObj = new TItsAtrd();
  466. }
  467. else
  468. pObj = FRAMEAtrdList1->MyItsAtrdManager->FLists.Find(sId);
  469. if (pObj)
  470. {
  471. pObj->ATRD_ID = sId;
  472. pObj->ATRD_NM = EdATRD_NM->Text.Trim();
  473. pObj->DRCT_NM = EdDRCT_NM->Text.Trim();
  474. pObj->DRCT_CD = CbDRCT_CD->ItemIndex == 0 ? "0" : "1";
  475. pObj->AREA_CD = EdAREA_CD->Text.Trim();
  476. pObj->DEL_YN = "N";
  477. pObj->Completed = true;
  478. pObj->MEM_DEL = "N";
  479. pObj->FSubLists.RemoveAll();
  480. try {
  481. TvLink->BeginUpdate();
  482. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  483. {
  484. String sLinkId = TvLink->DataController->Values[ii][ColLink2->Index];
  485. TItsAtrdRoad *pObjLnk = new TItsAtrdRoad();
  486. pObjLnk->ATRD_ID = pObj->ATRD_ID;
  487. pObjLnk->ROAD_ID = sLinkId;
  488. pObjLnk->ORD = ii+1;
  489. pObj->FSubLists.Push(pObjLnk->ORD, pObjLnk);
  490. pObjLnk->Completed = true;
  491. pObjLnk->MEM_DEL = "N";
  492. }
  493. }
  494. __finally
  495. {
  496. TvLink->EndUpdate();
  497. }
  498. bool bResult;
  499. if (FNewDb)
  500. bResult = FRAMEAtrdList1->MyItsAtrdManager->InsertAtrd(pObj);
  501. else
  502. bResult = FRAMEAtrdList1->MyItsAtrdManager->UpdateAtrd(pObj);
  503. if (bResult)
  504. {
  505. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"간선도로 정보저장\r\n간선도로 정보를 저장 하였습니다.",
  506. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  507. if (FNewDb)
  508. {
  509. FRAMEAtrdList1->MyItsAtrdManager->FLists.Push(pObj->ATRD_ID, pObj);
  510. }
  511. FUpdate = true;
  512. UpdateList();
  513. CMM_SetGridRow(FRAMEAtrdList1->CxList, FRAMEAtrdList1->TvList, sId, FRAMEAtrdList1->Column01->Index);
  514. #if 0
  515. DisplayInfo(pObj);
  516. #else
  517. int nRow = FRAMEAtrdList1->TvList->DataController->FocusedRecordIndex;
  518. if( nRow <= -1 )
  519. return;
  520. int nMemPtr = FRAMEAtrdList1->TvList->DataController->Values[nRow][FRAMEAtrdList1->Column99->Index];
  521. TItsAtrd* pObj = (TItsAtrd*)nMemPtr;
  522. DisplayInfo(pObj);
  523. #endif
  524. }
  525. }
  526. }
  527. //---------------------------------------------------------------------------
  528. void __fastcall TIDB0120M::RefreshLink()
  529. {
  530. if (!FRAMEGoogleMap1->GMMap1->Active) return;
  531. try
  532. {
  533. int nRow;
  534. TcxDataController *pGDC = TvLink->DataController;
  535. TvLink->BeginUpdate();
  536. try
  537. {
  538. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  539. {
  540. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  541. TPolyline* pLn = FPolyManager->FLists.Find(sLinkId);
  542. if (pLn)
  543. {
  544. pLn->StrokeColor = clRed;
  545. }
  546. }
  547. }
  548. catch(...)
  549. {
  550. }
  551. }
  552. __finally
  553. {
  554. TvLink->EndUpdate();
  555. }
  556. }
  557. //---------------------------------------------------------------------------
  558. void __fastcall TIDB0120M::BtnLinkDelClick(TObject *Sender)
  559. {
  560. int nSelRows = TvLink->Controller->SelectedRowCount;
  561. if (nSelRows <= 0)
  562. {
  563. Application->MessageBox(lblText4->Caption.c_str(),//L"삭제를 원하는 구간을 목록에서 선택하세요.",
  564. FTitle.c_str(),
  565. MB_OK|MB_ICONERROR|MB_APPLMODAL);
  566. return;
  567. }
  568. TvLink->Controller->DeleteSelection();
  569. RefreshLink();
  570. }
  571. //---------------------------------------------------------------------------
  572. void __fastcall TIDB0120M::BtnLinkAddClick(TObject *Sender)
  573. {
  574. if (EdLinkId->Text.IsEmpty()) return;
  575. String sNewId = EdLinkId->Text;
  576. bool bFound = false;
  577. try
  578. {
  579. int nRow;
  580. TcxDataController *pGDC = TvLink->DataController;
  581. TvLink->BeginUpdate();
  582. for (int ii = 0; ii < pGDC->RecordCount; ii++)
  583. {
  584. String sLinkId = pGDC->Values[ii][ColLink2->Index];
  585. if (sNewId == sLinkId)
  586. {
  587. bFound = true;
  588. break;
  589. }
  590. }
  591. if (bFound)
  592. {
  593. Application->MessageBox(lblText5->Caption.c_str(),//L"이미 등록되어 있는 구간 입니다.\r\n구간은 중복해서 등록 할 수 없습니다.",
  594. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  595. return;
  596. }
  597. nRow = pGDC->AppendRecord();
  598. pGDC->Values[nRow][ColLink2->Index] = sNewId;
  599. TItsRoad *pLink = ItsRoadManager->FLists.Find(sNewId);
  600. if (pLink)
  601. {
  602. TItsNode *pNode;
  603. pGDC->Values[nRow][ColLink3->Index] = pLink->F_NODE_ID;
  604. pGDC->Values[nRow][ColLink5->Index] = pLink->T_NODE_ID;
  605. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  606. if (pNode)
  607. {
  608. pGDC->Values[nRow][ColLink4->Index] = pNode->NODE_NAME;
  609. }
  610. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  611. if (pNode)
  612. {
  613. pGDC->Values[nRow][ColLink6->Index] = pNode->NODE_NAME;
  614. }
  615. }
  616. }
  617. __finally
  618. {
  619. TvLink->EndUpdate();
  620. }
  621. RefreshLink();
  622. }
  623. //---------------------------------------------------------------------------
  624. void __fastcall TIDB0120M::TmrClearTimer(TObject *Sender)
  625. {
  626. TmrClear->Enabled = false;
  627. if (FSelLink)
  628. {
  629. FSelLink->StrokeColor = FSelColor;
  630. }
  631. FSelLink = NULL;
  632. }
  633. //---------------------------------------------------------------------------
  634. void __fastcall TIDB0120M::TvLinkCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  635. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  636. {
  637. if (!FRAMEGoogleMap1->GMMap1->Active) return;
  638. if (!ACellViewInfo) return;
  639. int nRow = TvLink->DataController->FocusedRecordIndex;
  640. if( nRow <= -1 )
  641. return;
  642. String sLinkId = TvLink->DataController->Values[nRow][ColLink2->Index];
  643. TmrClearTimer(NULL);
  644. TPolyline* pLn = FPolyManager->FLists.Find(sLinkId);
  645. if (pLn)
  646. {
  647. FSelLink = pLn;
  648. FSelColor= pLn->StrokeColor;
  649. pLn->StrokeColor = clGreen;
  650. pLn->ZoomToPoints();
  651. TmrClear->Enabled = true;
  652. }
  653. }
  654. //---------------------------------------------------------------------------
  655. void __fastcall TIDB0120M::FRAMEAtrdList1TvListCellDblClickSect(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  656. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  657. {
  658. if (!ACellViewInfo) return;
  659. int nRow = FRAMEAtrdList1->TvList->DataController->FocusedRecordIndex;
  660. if( nRow <= -1 )
  661. return;
  662. int nMemPtr = FRAMEAtrdList1->TvList->DataController->Values[nRow][FRAMEAtrdList1->Column99->Index];
  663. TItsAtrd* pObj = (TItsAtrd*)nMemPtr;
  664. DisplayInfo(pObj);
  665. }
  666. //---------------------------------------------------------------------------
  667. void __fastcall TIDB0120M::ChkGisZoomClick(TObject *Sender)
  668. {
  669. PnlInfo->Visible = !ChkGisZoom->Checked;
  670. }
  671. //---------------------------------------------------------------------------
  672. void __fastcall TIDB0120M::BtnUpClick(TObject *Sender)
  673. {
  674. try
  675. {
  676. TvLink->BeginUpdate();
  677. int nCurIdx = TvLink->DataController->FocusedRowIndex;//FocusedRecordIndex;
  678. if (nCurIdx <= 0)
  679. {
  680. return;
  681. }
  682. int nUpIdx = nCurIdx-1;
  683. try
  684. {
  685. String sVal1 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink1->Index]);
  686. String sVal2 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink2->Index]);
  687. String sVal3 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink3->Index]);
  688. String sVal4 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink4->Index]);
  689. String sVal5 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink5->Index]);
  690. String sVal6 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink6->Index]);
  691. TvLink->DataController->Values[nCurIdx][ColLink1->Index] = TvLink->DataController->Values[nUpIdx][ColLink1->Index];
  692. TvLink->DataController->Values[nCurIdx][ColLink2->Index] = TvLink->DataController->Values[nUpIdx][ColLink2->Index];
  693. TvLink->DataController->Values[nCurIdx][ColLink3->Index] = TvLink->DataController->Values[nUpIdx][ColLink3->Index];
  694. TvLink->DataController->Values[nCurIdx][ColLink4->Index] = TvLink->DataController->Values[nUpIdx][ColLink4->Index];
  695. TvLink->DataController->Values[nCurIdx][ColLink5->Index] = TvLink->DataController->Values[nUpIdx][ColLink5->Index];
  696. TvLink->DataController->Values[nCurIdx][ColLink6->Index] = TvLink->DataController->Values[nUpIdx][ColLink6->Index];
  697. TvLink->DataController->Values[nUpIdx][ColLink1->Index] = sVal1;
  698. TvLink->DataController->Values[nUpIdx][ColLink2->Index] = sVal2;
  699. TvLink->DataController->Values[nUpIdx][ColLink3->Index] = sVal3;
  700. TvLink->DataController->Values[nUpIdx][ColLink4->Index] = sVal4;
  701. TvLink->DataController->Values[nUpIdx][ColLink5->Index] = sVal5;
  702. TvLink->DataController->Values[nUpIdx][ColLink6->Index] = sVal6;
  703. TvLink->Controller->ClearSelection();
  704. TvLink->Controller->FocusedRowIndex = nUpIdx;
  705. //TvLink->Controller->FocusedRecordIndex = nUpIdx;
  706. TvLink->ViewData->Records[nUpIdx]->Focused = true;
  707. TvLink->ViewData->Records[nUpIdx]->Selected = true;
  708. CxLink->SetFocus();
  709. //TcxCustomGridRow* ARow = TvLink->ViewData->Rows[TvLink->DataController->FocusedRowIndex];
  710. }
  711. catch(...)
  712. {
  713. }
  714. }
  715. __finally
  716. {
  717. TvLink->EndUpdate();
  718. }
  719. }
  720. //---------------------------------------------------------------------------
  721. void __fastcall TIDB0120M::BtnDownClick(TObject *Sender)
  722. {
  723. try
  724. {
  725. TvLink->BeginUpdate();
  726. int nCurIdx = TvLink->DataController->FocusedRowIndex;//FocusedRecordIndex;
  727. //int nCurIdx = TvLink->DataController->FocusedRecordIndex;
  728. if (nCurIdx < 0)
  729. {
  730. return;
  731. }
  732. if (nCurIdx == TvLink->DataController->RecordCount-1)
  733. {
  734. return;
  735. }
  736. int nDnIdx = nCurIdx+1;
  737. try
  738. {
  739. String sVal1 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink1->Index]);
  740. String sVal2 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink2->Index]);
  741. String sVal3 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink3->Index]);
  742. String sVal4 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink4->Index]);
  743. String sVal5 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink5->Index]);
  744. String sVal6 = VarToStr(TvLink->DataController->Values[nCurIdx][ColLink6->Index]);
  745. TvLink->DataController->Values[nCurIdx][ColLink1->Index] = TvLink->DataController->Values[nDnIdx][ColLink1->Index];
  746. TvLink->DataController->Values[nCurIdx][ColLink2->Index] = TvLink->DataController->Values[nDnIdx][ColLink2->Index];
  747. TvLink->DataController->Values[nCurIdx][ColLink3->Index] = TvLink->DataController->Values[nDnIdx][ColLink3->Index];
  748. TvLink->DataController->Values[nCurIdx][ColLink4->Index] = TvLink->DataController->Values[nDnIdx][ColLink4->Index];
  749. TvLink->DataController->Values[nCurIdx][ColLink5->Index] = TvLink->DataController->Values[nDnIdx][ColLink5->Index];
  750. TvLink->DataController->Values[nCurIdx][ColLink6->Index] = TvLink->DataController->Values[nDnIdx][ColLink6->Index];
  751. TvLink->DataController->Values[nDnIdx][ColLink1->Index] = sVal1;
  752. TvLink->DataController->Values[nDnIdx][ColLink2->Index] = sVal2;
  753. TvLink->DataController->Values[nDnIdx][ColLink3->Index] = sVal3;
  754. TvLink->DataController->Values[nDnIdx][ColLink4->Index] = sVal4;
  755. TvLink->DataController->Values[nDnIdx][ColLink5->Index] = sVal5;
  756. TvLink->DataController->Values[nDnIdx][ColLink6->Index] = sVal6;
  757. TvLink->Controller->ClearSelection();
  758. TvLink->Controller->FocusedRowIndex = nDnIdx;
  759. //TvLink->Controller->FocusedRecordIndex = nDnIdx;
  760. TvLink->ViewData->Records[nDnIdx]->Focused = true;
  761. TvLink->ViewData->Records[nDnIdx]->Selected = true;
  762. CxLink->SetFocus();
  763. //TcxCustomGridRow* ARow = TvLink->ViewData->Rows[TvLink->DataController->FocusedRowIndex];
  764. }
  765. catch(...)
  766. {
  767. }
  768. }
  769. __finally
  770. {
  771. TvLink->EndUpdate();
  772. }
  773. }
  774. //---------------------------------------------------------------------------
  775. void __fastcall TIDB0120M::FRAMEGoogleMapOnZoomChange(TObject *Sender)
  776. {
  777. int nStrokeWeight = 4;
  778. if (FRAMEGoogleMap1->FMapZoom >= 14)
  779. {
  780. nStrokeWeight = 8;
  781. }
  782. FOR_STL(TPolyline*, pLn, FPolyManager->FLists)
  783. {
  784. pLn->StrokeWeight = nStrokeWeight;
  785. }
  786. }
  787. //---------------------------------------------------------------------------
  788. void __fastcall TIDB0120M::GMPolyLinkClick(TObject *Sender, TLatLng *LatLng, int Index, TLinkedComponent *LinkedComponent)
  789. {
  790. TGMPolyline* pGrpLink = (TGMPolyline*)Sender;
  791. TPolyline* pLink = pGrpLink->Items[Index];
  792. if (FRAMEGoogleMap1->BtnIconSelect->SpeedButtonOptions->Down)
  793. {
  794. if (EdLinkId->Enabled)
  795. {
  796. TmrClearTimer(NULL);
  797. FSelLink = pLink;
  798. FSelColor= pLink->StrokeColor;
  799. pLink->StrokeColor = clGreen;
  800. TmrClear->Enabled = true;
  801. EdLinkId->Text = pLink->Text;
  802. }
  803. }
  804. }
  805. //---------------------------------------------------------------------------