CTVM100MF.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  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 "CDSCodeF.h"
  9. #include "CDSFacilityF.h"
  10. #include "CDSNodeF.h"
  11. #include "CDSLinkF.h"
  12. #include "CDSCctvCtlrF.h"
  13. #include "WindowMsgF.h"
  14. #include "ITS_OPLibF.h"
  15. #pragma hdrstop
  16. #include "CTVM100MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxContainer"
  21. #pragma link "cxControls"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxGraphics"
  25. #pragma link "cxGroupBox"
  26. #pragma link "cxLabel"
  27. #pragma link "cxLookAndFeelPainters"
  28. #pragma link "cxLookAndFeels"
  29. #pragma link "cxMaskEdit"
  30. #pragma link "cxSpinEdit"
  31. #pragma link "cxSplitter"
  32. #pragma link "cxTextEdit"
  33. #pragma link "dxSkinBlue"
  34. #pragma link "dxSkinsCore"
  35. #pragma link "dxSkinBlack"
  36. #pragma link "dxSkinMcSkin"
  37. #pragma link "FRAME_OpenMapF"
  38. #pragma link "FRAME_CctvListF"
  39. #pragma resource "*.dfm"
  40. TCTVM100M *CTVM100M = NULL;
  41. //---------------------------------------------------------------------------
  42. void TCTVM100M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  43. {
  44. try
  45. {
  46. if (!CTVM100M) return;
  47. CTVM100M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  48. }
  49. catch(Exception &exception)
  50. {
  51. }
  52. }
  53. //---------------------------------------------------------------------------
  54. __fastcall TCTVM100M::TCTVM100M(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;//"CCTV 기본정보 관리";
  62. FRAMECctvList1->PnlTop->Visible = false;
  63. FRAMECctvList1->PnlBottom->Visible = false;
  64. FRAMECctvList1->ColumnSel->Visible = false;
  65. FRAMECctvList1->Column13->Options->Editing = false;
  66. m_pGDC = FRAMECctvList1->TvList->DataController;
  67. FLayerIdx = LyrTp_Cctv;
  68. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  69. FRAMEOpenMap1->MapCallbackFunc = TCTVM100M_MapCallback;
  70. EditMode = false;
  71. }
  72. //---------------------------------------------------------------------------
  73. void __fastcall TCTVM100M::CommClose()
  74. {
  75. try
  76. {
  77. CMM_SaveForm(g_sFormsDir, this);
  78. }
  79. catch(...)
  80. {
  81. }
  82. }
  83. //---------------------------------------------------------------------------
  84. void __fastcall TCTVM100M::FormShow(TObject *Sender)
  85. {
  86. Refresh();
  87. FRAMEOpenMap1->OpenMap();
  88. //APP_FillCode(CbType, "WCAM");
  89. CctvCtlrManager->FLists.Lock();
  90. try
  91. {
  92. FOR_STL(TCctvCtlr*, pObj, CctvCtlrManager->FLists)
  93. {
  94. if (pObj->DEL_YN == "Y") continue;
  95. pObj->FData3 = NULL;
  96. }
  97. }
  98. __finally
  99. {
  100. CctvCtlrManager->FLists.UnLock();
  101. }
  102. FormInit();
  103. ChangeEditMode(1);
  104. TmrShow->Enabled = true;
  105. }
  106. //---------------------------------------------------------------------------
  107. void __fastcall TCTVM100M::FormInit()
  108. {
  109. if (FRAMEOpenMap1->MapStart)
  110. {
  111. try
  112. {
  113. String sLinkId = Ed_LINK_ID->Text;
  114. if (sLinkId != "")
  115. {
  116. sJs.printf(L"updateEditLink('%s', 0)", sLinkId.c_str());
  117. FRAMEOpenMap1->ExecScript(sJs);
  118. }
  119. }
  120. catch(...)
  121. {
  122. }
  123. }
  124. EdNmbr->Text = "";
  125. EdCtlrId->Text = "";
  126. EdCtlrNm->Text = "";
  127. ISTL_LCTN_NM->Text = "";
  128. ISTL_LCTN_ADDR->Text = "";
  129. SePosX->Value = 0;
  130. SePosY->Value = 0;
  131. EdCtlrIp->Text = "";
  132. EdCmncPort->Text = "0";
  133. Se_CCTV_CTLR_PORT->Value = 0;
  134. Se_TYPE->Value = 1;
  135. Ed_CCTV_ENCD_IP->Text = ""; //인코드 IP
  136. Ed_CCTV_CAPT_IP->Text = ""; //자막기 IP
  137. Ed_STRM_SESN_NM->Text = "";
  138. Ed_STRM_RTSP_ADDR->Text = "";
  139. Ed_STRM_RTMP_ADDR->Text = "";
  140. Ed_STRM_HTTP_ADDR->Text = "";
  141. Ed_INTR_RTMP_ADDR->Text = "";
  142. Ed_LINK_ID->Text = "";
  143. EdTmpLinkId->Text = "";
  144. FNewDb = false;
  145. }
  146. //---------------------------------------------------------------------------
  147. void __fastcall TCTVM100M::TmrShowTimer(TObject *Sender)
  148. {
  149. TmrShow->Enabled = false;
  150. FRAMECctvList1->UpdateList();
  151. }
  152. //---------------------------------------------------------------------------
  153. void __fastcall TCTVM100M::BtnCloseClick(TObject *Sender)
  154. {
  155. Close();
  156. }
  157. //---------------------------------------------------------------------------
  158. void __fastcall TCTVM100M::FormClose(TObject *Sender, TCloseAction &Action)
  159. {
  160. CommClose();
  161. CTVM100M = NULL;
  162. Action = caFree;
  163. }
  164. //---------------------------------------------------------------------------
  165. void __fastcall TCTVM100M::FormCloseQuery(TObject *Sender, bool &CanClose)
  166. {
  167. if (FUpdate)
  168. {
  169. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  170. }
  171. FRAMECctvList1->OnCloseQuery(CanClose);
  172. FRAMEOpenMap1->OnCloseQuery(CanClose);
  173. }
  174. //---------------------------------------------------------------------------
  175. void __fastcall TCTVM100M::DisplayInfo(TCctvCtlr* AObj, bool AMoveObj/*=true*/)
  176. {
  177. FormInit();
  178. if (!AObj) return;
  179. if (AMoveObj)
  180. {
  181. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  182. FRAMEOpenMap1->ExecScript(sJs);
  183. }
  184. EdNmbr->Text = AObj->CTLR_NMBR;
  185. EdCtlrId->Text = AObj->CTLR_ID;
  186. EdCtlrNm->Text = AObj->NAME;
  187. ISTL_LCTN_NM->Text = AObj->ISTL_LCTN_NM;
  188. ISTL_LCTN_ADDR->Text = AObj->ISTL_LCTN_ADDR;
  189. SePosX->Value = AObj->X_CRDN;
  190. SePosY->Value = AObj->Y_CRDN;
  191. EdCtlrIp->Text = AObj->CTLR_IP;
  192. //EdCmncPort->Text = AObj->CTLR_PORT;
  193. Se_CCTV_CTLR_PORT->Value = AObj->CTLR_PORT;
  194. Se_TYPE->Value = AObj->CCTV_TYPE.ToIntDef(1);
  195. Ed_CCTV_ENCD_IP->Text = AObj->CCTV_ENCD_IP; //인코드 IP
  196. Ed_CCTV_CAPT_IP->Text = AObj->CCTV_CAPT_IP; //자막기 IP
  197. Ed_STRM_SESN_NM->Text = AObj->STRM_SESN_NM;
  198. Ed_STRM_RTSP_ADDR->Text = AObj->STRM_RTSP_ADDR;
  199. Ed_STRM_RTMP_ADDR->Text = AObj->STRM_RTMP_ADDR;
  200. Ed_STRM_HTTP_ADDR->Text = AObj->STRM_HTTP_ADDR;
  201. Ed_INTR_RTMP_ADDR->Text = AObj->INTR_RTMP_ADDR;
  202. Ed_LINK_ID->Text = AObj->LINK_ID;
  203. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  204. ChangeEditMode(3);
  205. DisplayLink(AObj);
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TCTVM100M::DisplayLink(TCctvCtlr* AObj)
  209. {
  210. if (!AObj) return;
  211. String sLinkId = AObj->LINK_ID;
  212. if (sLinkId != "")
  213. {
  214. sJs.printf(L"updateEditLink('%s', %d)", sLinkId.c_str(), 3);
  215. FRAMEOpenMap1->ExecScript(sJs);
  216. }
  217. }
  218. //---------------------------------------------------------------------------
  219. void __fastcall TCTVM100M::UpdateIcon()
  220. {
  221. if (!FRAMEOpenMap1->MapStart) return;
  222. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  223. FRAMEOpenMap1->ExecScript(sJs);
  224. String arrObj = "";
  225. String sTemp;
  226. CctvCtlrManager->FLists.Lock();
  227. try
  228. {
  229. FOR_STL(TCctvCtlr*, pObj, CctvCtlrManager->FLists)
  230. {
  231. if (pObj->DEL_YN == "Y") continue;
  232. if (arrObj != "") arrObj += "|";
  233. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->CTLR_NMBR.c_str(), pObj->CTLR_ID.c_str(), pObj->NAME.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  234. arrObj += sTemp;
  235. }
  236. }
  237. __finally
  238. {
  239. CctvCtlrManager->FLists.UnLock();
  240. if (arrObj != "")
  241. {
  242. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  243. FRAMEOpenMap1->ExecScript(sJs);
  244. }
  245. }
  246. }
  247. //---------------------------------------------------------------------------
  248. void __fastcall TCTVM100M::BtnEditClick(TObject *Sender)
  249. {
  250. String sId = EdNmbr->Text;
  251. TCctvCtlr *pObj = CctvCtlrManager->FLists.Find(sId);
  252. FNewDb = false;
  253. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  254. {
  255. //편집모드 시작
  256. ChangeEditMode(0);
  257. if (pObj)
  258. {
  259. //시설물아이콘을 편집아이콘으로 변경
  260. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  261. sJs.printf(L"editFacilityObject(%d, %s, 1, 1)", FLayerIdx, pObj->CTLR_NMBR.c_str());
  262. FRAMEOpenMap1->ExecScript(sJs);
  263. }
  264. }
  265. else
  266. {
  267. //편집모드 취소
  268. ChangeEditMode(1);
  269. if (pObj)
  270. {
  271. //원래 정보를 화면에 표출
  272. CMM_SetGridRow(FRAMECctvList1->CxList, FRAMECctvList1->TvList, sId, FRAMECctvList1->Column01->Index);
  273. DisplayInfo(pObj, false);
  274. #if 0
  275. //지도시설물아이콘을 원래아이콘으로 변경
  276. sJs.printf(L"editFacilityObject(%d, %s, 0, 0)", FLayerIdx, pObj->CTLR_NMBR.c_str());
  277. FRAMEOpenMap1->ExecScript(sJs);
  278. #else
  279. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  280. //새롭게 다시 그리자
  281. UpdateIcon();
  282. #endif
  283. }
  284. else
  285. {
  286. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  287. sJs.printf(L"removeFacilityObject(%d, %s)", FLayerIdx, sId.c_str());
  288. FRAMEOpenMap1->ExecScript(sJs);
  289. }
  290. }
  291. }
  292. //---------------------------------------------------------------------------
  293. void __fastcall TCTVM100M::ChangeEditMode(int AEdit)
  294. {
  295. bool bEnabled = false;
  296. switch(AEdit)
  297. {
  298. case 0: //편집버튼클릭
  299. {
  300. BtnEdit->Enabled = true;
  301. BtnInsert->Enabled = false;
  302. BtnDelete->Enabled = false;
  303. BtnSave->Enabled = true;
  304. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  305. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  306. EditMode = true;
  307. }
  308. break;
  309. case 1: //편집[취소]버튼클릭
  310. {
  311. FormInit(); //화면을 모두 지운다.
  312. BtnEdit->Enabled = false;
  313. BtnInsert->Enabled = true;
  314. BtnDelete->Enabled = false;
  315. BtnSave->Enabled = false;
  316. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  317. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  318. //bEnabled = true;
  319. EditMode = false;
  320. }
  321. break;
  322. case 2: //추가
  323. {
  324. BtnEdit->Enabled = true;
  325. BtnInsert->Enabled = false;
  326. BtnDelete->Enabled = false;
  327. BtnSave->Enabled = true;
  328. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  329. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  330. EditMode = true;
  331. }
  332. break;
  333. case 3: //수정모드
  334. {
  335. BtnEdit->Enabled = true;
  336. BtnInsert->Enabled = true;
  337. BtnDelete->Enabled = true;
  338. BtnSave->Enabled = false;
  339. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  340. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  341. bEnabled = true;
  342. EditMode = false;
  343. }
  344. break;
  345. }
  346. if (AEdit == 0 || AEdit == 2)
  347. {
  348. FRAMECctvList1->CxList->Enabled = false;
  349. }
  350. else
  351. {
  352. FRAMECctvList1->CxList->Enabled = true;
  353. }
  354. PnlEdit->Enabled = EditMode;
  355. }
  356. //---------------------------------------------------------------------------
  357. void __fastcall TCTVM100M::BtnInsertClick(TObject *Sender)
  358. {
  359. FormInit();
  360. //신규아이디를 얻어와서 화면을 초기화한다.
  361. int nNmbr, nId;
  362. if (!CctvCtlrManager->GetNextCctvId(nNmbr, nId))
  363. {
  364. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 CCTV 정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  365. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  366. return;
  367. }
  368. EdNmbr->Text = String(nNmbr);
  369. SePosX->Value = FRAMEOpenMap1->CenterX;
  370. SePosY->Value = FRAMEOpenMap1->CenterY;
  371. //지도에 새로운 시설물 아이콘 추가하면서 편집모드로 변경
  372. String arrObj = "";
  373. arrObj.printf(L"%d,New,New,%.6f,%.6f,0", nNmbr, FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY);
  374. sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str());
  375. FRAMEOpenMap1->ExecScript(sJs);
  376. ChangeEditMode(2);
  377. FNewDb = true;
  378. }
  379. //---------------------------------------------------------------------------
  380. void __fastcall TCTVM100M::BtnDeleteClick(TObject *Sender)
  381. {
  382. if (!FRAMEOpenMap1->MapStart) return;
  383. int nIdx = m_pGDC->FocusedRecordIndex;
  384. if (nIdx < 0) return;
  385. String sId = EdNmbr->Text;
  386. if (sId.IsEmpty())
  387. {
  388. Application->MessageBox(lblText2->Caption.c_str(),//L"삭제할 CCTV를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  389. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  390. return;
  391. }
  392. String sMsg;
  393. sMsg = lblText3->Caption + ": " + sId;//"CCTV번호: " + sId;
  394. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 CCTV 정보를 삭제하시겠습니까?";
  395. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  396. TCctvCtlr *pObj = CctvCtlrManager->FLists.Find(sId);
  397. if (pObj)
  398. {
  399. if (CctvCtlrManager->DeleteCctv(pObj))
  400. {
  401. pObj->DEL_YN = "Y";
  402. FRAMECctvList1->UpdateList();
  403. UpdateIcon();
  404. }
  405. FUpdate = true;
  406. Application->MessageBox(lblText5->Caption.c_str(),//L"CCTV 정보삭제\r\nCCTV 정보를 삭제 하였습니다.",
  407. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  408. FormInit();
  409. ChangeEditMode(1);
  410. UpdateIcon();
  411. }
  412. }
  413. //---------------------------------------------------------------------------
  414. void __fastcall TCTVM100M::BtnSaveClick(TObject *Sender)
  415. {
  416. if (EdNmbr->Text.IsEmpty() ||
  417. EdCtlrId->Text.Trim().IsEmpty() ||
  418. EdCtlrNm->Text.Trim().IsEmpty() ||
  419. SePosX->Value == 0 ||
  420. SePosY->Value == 0 ||
  421. EdCtlrIp->Text.IsEmpty())
  422. {
  423. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  424. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  425. return;
  426. }
  427. String sNmbr = EdNmbr->Text;
  428. String sCtlrId = EdCtlrId->Text.Trim();
  429. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  430. {
  431. Application->MessageBox(lblText6->Caption.c_str(),//L"제어기 IP가 유효하지 않습니다.",
  432. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  433. return;
  434. }
  435. if (Ed_CCTV_ENCD_IP->Text.Trim() != "")
  436. {
  437. if (!ITSUtil_CheckIpAddress(Ed_CCTV_ENCD_IP->Text.Trim()))
  438. {
  439. Application->MessageBox(L"인코더 IP가 유효하지 않습니다.",
  440. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  441. Ed_CCTV_ENCD_IP->SetFocus();
  442. return;
  443. }
  444. }
  445. if (Ed_CCTV_CAPT_IP->Text.Trim() != "")
  446. {
  447. if (!ITSUtil_CheckIpAddress(Ed_CCTV_CAPT_IP->Text.Trim()))
  448. {
  449. Application->MessageBox(L"자막기 IP가 유효하지 않습니다.",
  450. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  451. Ed_CCTV_CAPT_IP->SetFocus();
  452. return;
  453. }
  454. }
  455. CctvCtlrManager->FLists.Lock();
  456. FOR_STL(TCctvCtlr*, pTmpObj, CctvCtlrManager->FLists)
  457. {
  458. if (pTmpObj->DEL_YN == "Y") continue;
  459. if (pTmpObj->CTLR_NMBR == sNmbr) continue; //자기자신
  460. if (pTmpObj->CTLR_ID == sCtlrId)
  461. {
  462. Application->MessageBox(lblText8->Caption.c_str(),//L"CCTV ID가 이미 사용 중입니다. CCTV ID를 확인하세요.",
  463. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  464. return;
  465. }
  466. }
  467. CctvCtlrManager->FLists.UnLock();
  468. TCctvCtlr *pObj;
  469. if (FNewDb)
  470. pObj = new TCctvCtlr();
  471. else
  472. pObj = CctvCtlrManager->FLists.Find(sNmbr);
  473. if (pObj)
  474. {
  475. pObj->CTLR_NMBR = sNmbr;
  476. pObj->CTLR_ID = sCtlrId;
  477. pObj->NAME = EdCtlrNm->Text.Trim();
  478. pObj->CTLR_IP = EdCtlrIp->Text;
  479. pObj->CTLR_PORT = Se_CCTV_CTLR_PORT->Value; //EdCmncPort->Text.ToIntDef(0);
  480. pObj->CTLR_LOCAL_NO = 0;
  481. //pObj->CCTV_TYPE = APP_GetCode(CbType);
  482. pObj->ISTL_LCTN_NM = ISTL_LCTN_NM->Text.Trim();
  483. pObj->ISTL_LCTN_ADDR = ISTL_LCTN_ADDR->Text.Trim();
  484. pObj->X_CRDN = SePosX->Value;
  485. pObj->Y_CRDN = SePosY->Value;
  486. pObj->CCTV_TYPE = Se_TYPE->Value;
  487. pObj->CCTV_ENCD_IP = Ed_CCTV_ENCD_IP->Text; //인코드 IP
  488. pObj->CCTV_CAPT_IP = Ed_CCTV_CAPT_IP->Text; //자막기 IP
  489. pObj->STRM_SESN_NM = Ed_STRM_SESN_NM->Text;
  490. pObj->STRM_RTSP_ADDR = Ed_STRM_RTSP_ADDR->Text;
  491. pObj->STRM_RTMP_ADDR = Ed_STRM_RTMP_ADDR->Text;
  492. pObj->STRM_HTTP_ADDR = Ed_STRM_HTTP_ADDR->Text;
  493. pObj->INTR_RTMP_ADDR = Ed_INTR_RTMP_ADDR->Text;
  494. pObj->LINK_ID = Ed_LINK_ID->Text;
  495. pObj->Completed = true;
  496. pObj->MEM_DEL = "N";
  497. bool bResult;
  498. if (FNewDb)
  499. {
  500. pObj->DEL_YN = "N";
  501. bResult = CctvCtlrManager->InsertCctv(pObj);
  502. if (bResult)
  503. {
  504. CctvCtlrManager->FLists.Push(sNmbr, pObj);
  505. }
  506. }
  507. else
  508. {
  509. bResult = CctvCtlrManager->UpdateCctv(pObj);
  510. }
  511. if (bResult)
  512. {
  513. Application->MessageBox(lblText9->Caption.c_str(),//L"CCTV 정보저장\r\nCCTV 정보를 저장 하였습니다.",
  514. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  515. FUpdate = true;
  516. FRAMECctvList1->UpdateList();
  517. UpdateIcon();
  518. CMM_SetGridRow(FRAMECctvList1->CxList, FRAMECctvList1->TvList, sNmbr, FRAMECctvList1->Column01->Index);
  519. DisplayInfo(pObj, true);
  520. }
  521. }
  522. }
  523. //---------------------------------------------------------------------------
  524. void __fastcall TCTVM100M::Ed_CMRA_PORTKeyPress(TObject *Sender, wchar_t &Key)
  525. {
  526. if (Key > '9' || Key < '0')
  527. {
  528. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  529. Key = 0;
  530. }
  531. }
  532. //---------------------------------------------------------------------------
  533. void __fastcall TCTVM100M::Se_CMRA_CHNLPropertiesChange(TObject *Sender)
  534. {
  535. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  536. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  537. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  538. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  539. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  540. }
  541. //---------------------------------------------------------------------------
  542. void __fastcall TCTVM100M::UpdateEditLink()
  543. {
  544. if (!FRAMEOpenMap1->MapStart) return;
  545. TItsNode* pNode;
  546. String STRT_NM;
  547. String END_NM;
  548. try
  549. {
  550. ItsLinkManager->FLists.Lock();
  551. try
  552. {
  553. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  554. {
  555. if (pLink->DEL_YN == "Y") continue;
  556. #if 0
  557. pVrtx = pLink->Vrtxs.Find(nZoom);
  558. if (!pVrtx) continue;
  559. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  560. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  561. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  562. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  563. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  564. pLink->LINK_ID.c_str(),
  565. pLink->ROAD_NAME.c_str(),
  566. STRT_NM.c_str(),
  567. END_NM.c_str(),
  568. pVrtx->X_CRDN_ARR.c_str(),
  569. pVrtx->Y_CRDN_ARR.c_str());
  570. FRAMEOpenMap1->ExecScript(sJs);
  571. #else
  572. if (pLink->IsVertex)
  573. {
  574. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  575. if (pNode) STRT_NM = pNode->NODE_NAME; else STRT_NM = " ";
  576. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  577. if (pNode) END_NM = pNode->NODE_NAME; else END_NM = " ";
  578. sJs.printf(L"addEditLink('%s', '%s', '%s', '%s', '%s', '%s')",
  579. pLink->LINK_ID.c_str(),
  580. pLink->ROAD_NAME.c_str(),
  581. STRT_NM.c_str(),
  582. END_NM.c_str(),
  583. pLink->X_CRDN_ARR.c_str(),
  584. pLink->Y_CRDN_ARR.c_str());
  585. FRAMEOpenMap1->ExecScript(sJs);
  586. }
  587. #endif
  588. }
  589. }
  590. __finally
  591. {
  592. ItsLinkManager->FLists.UnLock();
  593. }
  594. FRAMEOpenMap1->ExecScript("makeEditLinkLayer()");
  595. }
  596. catch(...)
  597. {
  598. }
  599. }
  600. //---------------------------------------------------------------------------
  601. void __fastcall TCTVM100M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  602. {
  603. try
  604. {
  605. if (AFirst)
  606. {
  607. //지도를 편집모드로 변경
  608. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  609. FRAMEOpenMap1->ExecScript(sJs);
  610. //편집레이어 생성
  611. FRAMEOpenMap1->ExecScript("initEditLayer()");
  612. //배경링크레이어 생성
  613. UpdateEditLink();
  614. //시설물아이콘 등록
  615. UpdateIcon();
  616. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  617. FRAMEOpenMap1->ExecScript(sJs);
  618. return;
  619. }
  620. if (AFunc.Pos("onlinkclick"))
  621. {
  622. TStringList *pStringList = new TStringList;
  623. pStringList->CommaText = AArgs;
  624. try
  625. {
  626. String sLyrType = pStringList->Strings[0];
  627. String sLinkId = pStringList->Strings[1];
  628. if (EditMode)
  629. {
  630. EdTmpLinkId->Text = sLinkId;
  631. }
  632. }
  633. catch(Exception &e)
  634. {
  635. }
  636. delete pStringList;
  637. }
  638. if (AFunc.Pos("onfacilitydragend"))
  639. {
  640. TStringList *pStringList = new TStringList;
  641. pStringList->CommaText = AArgs;
  642. try
  643. {
  644. String sNmbr = pStringList->Strings[0];
  645. String sCenterLat = pStringList->Strings[1];
  646. String sCenterLng = pStringList->Strings[2];
  647. SePosX->Value = sCenterLat.ToDouble();
  648. SePosY->Value = sCenterLng.ToDouble();
  649. }
  650. catch(Exception &e)
  651. {
  652. }
  653. delete pStringList;
  654. }
  655. }
  656. catch(Exception &exception)
  657. {
  658. }
  659. }
  660. //---------------------------------------------------------------------------
  661. void __fastcall TCTVM100M::FRAMECctvList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  662. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  663. {
  664. if (!ACellViewInfo) return;
  665. int nRow = FRAMECctvList1->TvList->DataController->FocusedRecordIndex;
  666. if( nRow <= -1 )
  667. return;
  668. int nMemPtr = FRAMECctvList1->TvList->DataController->Values[nRow][FRAMECctvList1->Column99->Index];
  669. TCctvCtlr* pObj = (TCctvCtlr*)nMemPtr;
  670. DisplayInfo(pObj, true);
  671. }
  672. //---------------------------------------------------------------------------
  673. void __fastcall TCTVM100M::BtnApplyClick(TObject *Sender)
  674. {
  675. if (EditMode)
  676. {
  677. Ed_LINK_ID->Text = EdTmpLinkId->Text.Trim();
  678. }
  679. }
  680. //---------------------------------------------------------------------------