IDB0120MF.cpp 29 KB

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