VMSM100MF.cpp 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946
  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. #pragma hdrstop
  10. #include "VMSM100MF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxContainer"
  15. #pragma link "cxControls"
  16. #pragma link "cxDropDownEdit"
  17. #pragma link "cxEdit"
  18. #pragma link "cxGraphics"
  19. #pragma link "cxGroupBox"
  20. #pragma link "cxLabel"
  21. #pragma link "cxLookAndFeelPainters"
  22. #pragma link "cxLookAndFeels"
  23. #pragma link "cxMaskEdit"
  24. #pragma link "cxSpinEdit"
  25. #pragma link "cxSplitter"
  26. #pragma link "cxTextEdit"
  27. #pragma link "cxTimeEdit"
  28. #pragma link "dxSkinBlack"
  29. #pragma link "dxSkinBlue"
  30. #pragma link "dxSkinCaramel"
  31. #pragma link "dxSkinCoffee"
  32. #pragma link "dxSkinDarkRoom"
  33. #pragma link "dxSkinDarkSide"
  34. #pragma link "dxSkinFoggy"
  35. #pragma link "dxSkinGlassOceans"
  36. #pragma link "dxSkiniMaginary"
  37. #pragma link "dxSkinLilian"
  38. #pragma link "dxSkinLiquidSky"
  39. #pragma link "dxSkinLondonLiquidSky"
  40. #pragma link "dxSkinMcSkin"
  41. #pragma link "dxSkinMoneyTwins"
  42. #pragma link "dxSkinOffice2007Black"
  43. #pragma link "dxSkinOffice2007Blue"
  44. #pragma link "dxSkinOffice2007Green"
  45. #pragma link "dxSkinOffice2007Pink"
  46. #pragma link "dxSkinOffice2007Silver"
  47. #pragma link "dxSkinOffice2010Black"
  48. #pragma link "dxSkinOffice2010Blue"
  49. #pragma link "dxSkinOffice2010Silver"
  50. #pragma link "dxSkinsCore"
  51. #pragma link "dxSkinSeven"
  52. #pragma link "dxSkinSharp"
  53. #pragma link "dxSkinSilver"
  54. #pragma link "dxSkinStardust"
  55. #pragma link "FRAME_OpenMapF"
  56. #pragma link "FRAME_VmsListF"
  57. #pragma link "cxContainer"
  58. #pragma link "cxButtons"
  59. #pragma link "cxContainer"
  60. #pragma link "cxControls"
  61. #pragma link "cxDropDownEdit"
  62. #pragma link "cxEdit"
  63. #pragma link "cxGraphics"
  64. #pragma link "cxGroupBox"
  65. #pragma link "cxLabel"
  66. #pragma link "cxLookAndFeelPainters"
  67. #pragma link "cxLookAndFeels"
  68. #pragma link "cxMaskEdit"
  69. #pragma link "cxSpinEdit"
  70. #pragma link "cxSplitter"
  71. #pragma link "cxTextEdit"
  72. #pragma link "cxTimeEdit"
  73. #pragma link "dxSkinBlack"
  74. #pragma link "dxSkinBlue"
  75. #pragma link "dxSkinCaramel"
  76. #pragma link "dxSkinCoffee"
  77. #pragma link "dxSkinDarkRoom"
  78. #pragma link "dxSkinDarkSide"
  79. #pragma link "dxSkinFoggy"
  80. #pragma link "dxSkinGlassOceans"
  81. #pragma link "dxSkiniMaginary"
  82. #pragma link "dxSkinLilian"
  83. #pragma link "dxSkinLiquidSky"
  84. #pragma link "dxSkinLondonLiquidSky"
  85. #pragma link "dxSkinMcSkin"
  86. #pragma link "dxSkinMoneyTwins"
  87. #pragma link "dxSkinOffice2007Black"
  88. #pragma link "dxSkinOffice2007Blue"
  89. #pragma link "dxSkinOffice2007Green"
  90. #pragma link "dxSkinOffice2007Pink"
  91. #pragma link "dxSkinOffice2007Silver"
  92. #pragma link "dxSkinOffice2010Black"
  93. #pragma link "dxSkinOffice2010Blue"
  94. #pragma link "dxSkinOffice2010Silver"
  95. #pragma link "dxSkinsCore"
  96. #pragma link "dxSkinSeven"
  97. #pragma link "dxSkinSharp"
  98. #pragma link "dxSkinSilver"
  99. #pragma link "dxSkinStardust"
  100. #pragma link "FRAME_OpenMapF"
  101. #pragma link "FRAME_VmsListF"
  102. #pragma link "cxButtons"
  103. #pragma link "cxContainer"
  104. #pragma link "cxControls"
  105. #pragma link "cxDropDownEdit"
  106. #pragma link "cxEdit"
  107. #pragma link "cxGraphics"
  108. #pragma link "cxGroupBox"
  109. #pragma link "cxLabel"
  110. #pragma link "cxLookAndFeelPainters"
  111. #pragma link "cxLookAndFeels"
  112. #pragma link "cxMaskEdit"
  113. #pragma link "cxSpinEdit"
  114. #pragma link "cxSplitter"
  115. #pragma link "cxTextEdit"
  116. #pragma link "cxTimeEdit"
  117. #pragma link "dxSkinBlack"
  118. #pragma link "dxSkinBlue"
  119. #pragma link "dxSkinCaramel"
  120. #pragma link "dxSkinCoffee"
  121. #pragma link "dxSkinDarkRoom"
  122. #pragma link "dxSkinDarkSide"
  123. #pragma link "dxSkinFoggy"
  124. #pragma link "dxSkinGlassOceans"
  125. #pragma link "dxSkiniMaginary"
  126. #pragma link "dxSkinLilian"
  127. #pragma link "dxSkinLiquidSky"
  128. #pragma link "dxSkinLondonLiquidSky"
  129. #pragma link "dxSkinMcSkin"
  130. #pragma link "dxSkinMoneyTwins"
  131. #pragma link "dxSkinOffice2007Black"
  132. #pragma link "dxSkinOffice2007Blue"
  133. #pragma link "dxSkinOffice2007Green"
  134. #pragma link "dxSkinOffice2007Pink"
  135. #pragma link "dxSkinOffice2007Silver"
  136. #pragma link "dxSkinOffice2010Black"
  137. #pragma link "dxSkinOffice2010Blue"
  138. #pragma link "dxSkinOffice2010Silver"
  139. #pragma link "dxSkinsCore"
  140. #pragma link "dxSkinSeven"
  141. #pragma link "dxSkinSharp"
  142. #pragma link "dxSkinSilver"
  143. #pragma link "dxSkinStardust"
  144. #pragma link "FRAME_OpenMapF"
  145. #pragma link "FRAME_VmsListF"
  146. #pragma resource "*.dfm"
  147. TVMSM100M *VMSM100M = NULL;
  148. //---------------------------------------------------------------------------
  149. void TVMSM100M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  150. {
  151. try
  152. {
  153. if (!VMSM100M) return;
  154. VMSM100M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  155. }
  156. catch(Exception &exception)
  157. {
  158. }
  159. }
  160. //---------------------------------------------------------------------------
  161. __fastcall TVMSM100M::TVMSM100M(TComponent* Owner)
  162. : TForm(Owner)
  163. {
  164. LangTrans->Translate(this, ITSDb_GetConnection());
  165. ITSSkin_Load(this);
  166. CMM_LoadForm(g_sFormsDir, this);
  167. FUpdate= false;
  168. FTitle = Caption;//"VMS 기본정보 관리";
  169. //FRAMEVmsList1->Column02->Visible = false;
  170. FRAMEVmsList1->PnlTop->Visible = false;
  171. FRAMEVmsList1->PnlBottom->Visible = false;
  172. FRAMEVmsList1->ColumnSel->Visible = false;
  173. FRAMEVmsList1->Column06->Visible = true;
  174. FRAMEVmsList1->Column07->Visible = false;
  175. FRAMEVmsList1->Column08->Visible = true;
  176. FRAMEVmsList1->Column09->Visible = true;
  177. FRAMEVmsList1->Column10->Visible = true;
  178. FRAMEVmsList1->Column13->Visible = true;
  179. EdCmncPort->Visible = false;
  180. m_pGDC = FRAMEVmsList1->TvList->DataController;
  181. FLayerIdx = LyrTp_Vms;
  182. FRAMEOpenMap1->ChkShowNmbr->Caption = "VMS 번호";
  183. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  184. FRAMEOpenMap1->MapCallbackFunc = TVMSM100M_MapCallback;
  185. SeMaxPhase->Properties->MaxValue = INT_VMS_MAX_FORM;
  186. EditMode = false;
  187. }
  188. //---------------------------------------------------------------------------
  189. void __fastcall TVMSM100M::CommClose()
  190. {
  191. try
  192. {
  193. CMM_SaveForm(g_sFormsDir, this);
  194. }
  195. catch(...)
  196. {
  197. }
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TVMSM100M::FormShow(TObject *Sender)
  201. {
  202. Refresh();
  203. FRAMEOpenMap1->OpenMap();
  204. APP_FillVmsSizeType(CbType);
  205. //APP_FillCode(CbUsagType, "VUT");
  206. //APP_FillCode(CbType, "VMP");
  207. VmsCtlrManager->FLists.Lock();
  208. try
  209. {
  210. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  211. {
  212. if (pObj->DEL_YN == "Y") continue;
  213. pObj->FData3 = NULL;
  214. }
  215. }
  216. __finally
  217. {
  218. VmsCtlrManager->FLists.UnLock();
  219. }
  220. FormInit();
  221. ChangeEditMode(1);
  222. TmrShow->Enabled = true;
  223. }
  224. //---------------------------------------------------------------------------
  225. void __fastcall TVMSM100M::FormInit()
  226. {
  227. EdNmbr->Text = "";
  228. EdVmsId->Text = "";
  229. EdVmsNm->Text = "";
  230. SeMaxPhase->Value = INT_VMS_MAX_FORM;
  231. //CbUsagType->ItemIndex = 0;
  232. CbType->ItemIndex = 0;
  233. SePosX->Value = 0;
  234. SePosY->Value = 0;
  235. EdCtlrIp->Text = "";
  236. EdCmncPort->Text = "";
  237. EdWebCamIp->Text = "";
  238. EdWebCamPort->Text = "";
  239. EdWebCamId->Text = "";
  240. EdWebCamPswd->Text = "";
  241. EdWebCamStrm->Text = "";
  242. ISTL_LCTN_NM->Text = "";
  243. ISTL_LCTN_ADDR->Text = "";
  244. cxTimeOn->Clear();
  245. cxTimeOff->Clear();
  246. cxTimeOn->EditValue = Now().FormatString("hh:nn");
  247. cxTimeOn->EditValue = "00:00";
  248. cxTimeOff->EditValue = Now().FormatString("hh:nn");
  249. cxTimeOff->EditValue = "00:00";
  250. FNewDb = false;
  251. }
  252. //---------------------------------------------------------------------------
  253. void __fastcall TVMSM100M::TmrShowTimer(TObject *Sender)
  254. {
  255. TmrShow->Enabled = false;
  256. FRAMEVmsList1->UpdateList();
  257. }
  258. //---------------------------------------------------------------------------
  259. void __fastcall TVMSM100M::BtnCloseClick(TObject *Sender)
  260. {
  261. Close();
  262. }
  263. //---------------------------------------------------------------------------
  264. void __fastcall TVMSM100M::FormClose(TObject *Sender, TCloseAction &Action)
  265. {
  266. CommClose();
  267. VMSM100M = NULL;
  268. Action = caFree;
  269. }
  270. //---------------------------------------------------------------------------
  271. void __fastcall TVMSM100M::FormCloseQuery(TObject *Sender, bool &CanClose)
  272. {
  273. if (FUpdate)
  274. {
  275. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  276. }
  277. FRAMEVmsList1->OnCloseQuery(CanClose);
  278. FRAMEOpenMap1->OnCloseQuery(CanClose);
  279. }
  280. //---------------------------------------------------------------------------
  281. void __fastcall TVMSM100M::DisplayInfo(TVmsCtlr* AObj, bool AMoveObj/*=true*/)
  282. {
  283. FormInit();
  284. if (!AObj) return;
  285. if (AMoveObj)
  286. {
  287. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->VMS_CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  288. FRAMEOpenMap1->ExecScript(sJs);
  289. }
  290. EdNmbr->Text = String(AObj->VMS_CTLR_NMBR);
  291. EdVmsId->Text = AObj->VMS_CTLR_ID;
  292. EdVmsNm->Text = AObj->VMS_NM;
  293. //APP_SetCode(CbUsagType, AObj->VMS_USAG_TYPE_CD);
  294. APP_SetCode(CbType, AObj->VMS_TYPE_CD);
  295. SePosX->Value = AObj->X_CRDN;
  296. SePosY->Value = AObj->Y_CRDN;
  297. EdCtlrIp->Text = AObj->VMS_CTLR_IP;
  298. //EdCmncPort->Text = AObj->VMS_CMNC_PORT;
  299. EdWebCamIp->Text = AObj->WEB_CMRA_IP;
  300. EdWebCamPort->Text = AObj->WEB_CMRA_PORT;
  301. EdWebCamId->Text = AObj->WEB_CMRA_ID;
  302. EdWebCamPswd->Text = AObj->WEB_CMRA_PWD;
  303. EdWebCamStrm->Text = AObj->STRM_SESN_NM;
  304. ISTL_LCTN_NM->Text = AObj->ISTL_LCTN_NM;
  305. ISTL_LCTN_ADDR->Text = AObj->ISTL_LCTN_ADDR;
  306. SeMaxPhase->Value = AObj->VMS_MAX_PHSE_NUM;
  307. Se_VMS_CTLR_LOCAL_NO->Value = AObj->VMS_CTLR_LOCAL_NO;
  308. cxTimeOn->Clear();
  309. cxTimeOn->EditValue = Now().FormatString("hh:nn");
  310. cxTimeOn->EditValue = "00:00";
  311. cxTimeOff->Clear();
  312. cxTimeOff->EditValue = Now().FormatString("hh:nn");
  313. cxTimeOff->EditValue = "00:00";
  314. try
  315. {
  316. if (AObj->PANL_ON_TIME.Length() == 4) // 전팡관ON시각
  317. {
  318. String sPowerOnTime = AObj->PANL_ON_TIME;
  319. sPowerOnTime.Insert(":", 3);
  320. cxTimeOn->EditValue = sPowerOnTime;
  321. }
  322. }
  323. catch(Exception &e) { }
  324. try
  325. {
  326. if (AObj->PANL_OFF_TIME.Length() == 4) // 전광판OFF시각
  327. {
  328. String sPowerOffTime = AObj->PANL_OFF_TIME;
  329. sPowerOffTime.Insert(":", 3);
  330. cxTimeOff->EditValue = sPowerOffTime;
  331. }
  332. }
  333. catch(Exception &e) { }
  334. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  335. ChangeEditMode(3);
  336. }
  337. //---------------------------------------------------------------------------
  338. void __fastcall TVMSM100M::UpdateIcon()
  339. {
  340. if (!FRAMEOpenMap1->MapStart) return;
  341. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  342. FRAMEOpenMap1->ExecScript(sJs);
  343. String arrObj = "";
  344. String sTemp;
  345. VmsCtlrManager->FLists.Lock();
  346. try
  347. {
  348. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  349. {
  350. if (pObj->DEL_YN == "Y") continue;
  351. if (arrObj != "") arrObj += "|";
  352. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->VMS_CTLR_NMBR.c_str(), pObj->VMS_CTLR_ID.c_str(), pObj->VMS_NM.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  353. arrObj += sTemp;
  354. }
  355. }
  356. __finally
  357. {
  358. VmsCtlrManager->FLists.UnLock();
  359. if (arrObj != "")
  360. {
  361. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  362. FRAMEOpenMap1->ExecScript(sJs);
  363. }
  364. }
  365. }
  366. //---------------------------------------------------------------------------
  367. void __fastcall TVMSM100M::BtnEditClick(TObject *Sender)
  368. {
  369. String sId = EdNmbr->Text;
  370. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sId);
  371. FNewDb = false;
  372. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  373. {
  374. //편집모드 시작
  375. ChangeEditMode(0);
  376. if (pObj)
  377. {
  378. //시설물아이콘을 편집아이콘으로 변경
  379. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  380. sJs.printf(L"editFacilityObject(%d, %s, 1, 1)", FLayerIdx, pObj->VMS_CTLR_NMBR.c_str());
  381. FRAMEOpenMap1->ExecScript(sJs);
  382. }
  383. }
  384. else
  385. {
  386. //편집모드 취소
  387. ChangeEditMode(1);
  388. if (pObj)
  389. {
  390. //원래 정보를 화면에 표출
  391. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  392. DisplayInfo(pObj, false);
  393. #if 0
  394. //지도시설물아이콘을 원래아이콘으로 변경
  395. sJs.printf(L"editFacilityObject(%d, %s, 0, 0)", FLayerIdx, pObj->VMS_CTLR_NMBR.c_str());
  396. FRAMEOpenMap1->ExecScript(sJs);
  397. #else
  398. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  399. //새롭게 다시 그리자
  400. UpdateIcon();
  401. #endif
  402. }
  403. else
  404. {
  405. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  406. sJs.printf(L"removeFacilityObject(%d, %s)", FLayerIdx, sId.c_str());
  407. FRAMEOpenMap1->ExecScript(sJs);
  408. }
  409. }
  410. }
  411. //---------------------------------------------------------------------------
  412. void __fastcall TVMSM100M::ChangeEditMode(int AEdit)
  413. {
  414. bool bEnabled = false;
  415. switch(AEdit)
  416. {
  417. case 0: //편집버튼클릭
  418. {
  419. BtnEdit->Enabled = true;
  420. BtnInsert->Enabled = false;
  421. BtnDelete->Enabled = false;
  422. BtnSave->Enabled = true;
  423. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  424. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  425. EditMode = true;
  426. }
  427. break;
  428. case 1: //편집[취소]버튼클릭
  429. {
  430. FormInit(); //화면을 모두 지운다.
  431. BtnEdit->Enabled = false;
  432. BtnInsert->Enabled = true;
  433. BtnDelete->Enabled = false;
  434. BtnSave->Enabled = false;
  435. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  436. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  437. //bEnabled = true;
  438. EditMode = false;
  439. }
  440. break;
  441. case 2: //추가
  442. {
  443. BtnEdit->Enabled = true;
  444. BtnInsert->Enabled = false;
  445. BtnDelete->Enabled = false;
  446. BtnSave->Enabled = true;
  447. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  448. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  449. EditMode = true;
  450. }
  451. break;
  452. case 3: //수정모드
  453. {
  454. BtnEdit->Enabled = true;
  455. BtnInsert->Enabled = true;
  456. BtnDelete->Enabled = true;
  457. BtnSave->Enabled = false;
  458. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  459. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  460. bEnabled = true;
  461. EditMode = false;
  462. }
  463. break;
  464. }
  465. if (AEdit == 0 || AEdit == 2)
  466. {
  467. FRAMEVmsList1->CxList->Enabled = false;
  468. }
  469. else
  470. {
  471. FRAMEVmsList1->CxList->Enabled = true;
  472. }
  473. PnlEdit->Enabled = EditMode;
  474. #if 0
  475. EdVmsId->Enabled = bEnabled;
  476. EdVmsNm->Enabled = bEnabled;
  477. CbUsagType->Enabled = bEnabled;
  478. CbType->Enabled = bEnabled;
  479. SePosX->Enabled = bEnabled;
  480. SePosY->Enabled = bEnabled;
  481. EdCtlrIp->Enabled = bEnabled;
  482. EdWebCamIp->Enabled = bEnabled;
  483. EdWebCamPort->Enabled = bEnabled;
  484. EdWebCamId->Enabled = bEnabled;
  485. EdWebCamPswd->Enabled = bEnabled;
  486. EdWebCamStrm->Enabled = bEnabled;
  487. cxTimeOn->Enabled = bEnabled;
  488. cxTimeOff->Enabled = bEnabled;
  489. #endif
  490. #if 0
  491. EdRseId->Properties->ReadOnly = bEnabled;
  492. EdRoadSpotId->Properties->ReadOnly = bEnabled;
  493. EdLogCnncId->Properties->ReadOnly = bEnabled;
  494. EdLogCnncPwd->Properties->ReadOnly = bEnabled;
  495. EdIstlLctnNm->Properties->ReadOnly = bEnabled;
  496. SePosX->Properties->ReadOnly = bEnabled;
  497. SePosY->Properties->ReadOnly = bEnabled;
  498. EdIP->Properties->ReadOnly = bEnabled;
  499. EdPort->Properties->ReadOnly = bEnabled;
  500. CbMnfcCmpyCd->Properties->ReadOnly = bEnabled;
  501. SeCLCT_ABNR_BASI->Properties->ReadOnly = bEnabled;
  502. #endif
  503. }
  504. //---------------------------------------------------------------------------
  505. void __fastcall TVMSM100M::BtnInsertClick(TObject *Sender)
  506. {
  507. FormInit();
  508. //신규아이디를 얻어와서 화면을 초기화한다.
  509. int nNmbr, nId;
  510. if (!VmsCtlrManager->GetNextVmsId(nNmbr, nId))
  511. {
  512. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  513. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  514. return;
  515. }
  516. EdNmbr->Text = String(nNmbr);
  517. SePosX->Value = FRAMEOpenMap1->CenterX;
  518. SePosY->Value = FRAMEOpenMap1->CenterY;
  519. //지도에 새로운 시설물 아이콘 추가하면서 편집모드로 변경
  520. String arrObj = "";
  521. arrObj.printf(L"%d,New,New,%.6f,%.6f,0", nNmbr, FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY);
  522. sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str());
  523. FRAMEOpenMap1->ExecScript(sJs);
  524. ChangeEditMode(2);
  525. FNewDb = true;
  526. }
  527. //---------------------------------------------------------------------------
  528. void __fastcall TVMSM100M::BtnDeleteClick(TObject *Sender)
  529. {
  530. if (!FRAMEOpenMap1->MapStart) return;
  531. int nIdx = m_pGDC->FocusedRecordIndex;
  532. if (nIdx < 0) return;
  533. String sId = EdNmbr->Text;
  534. if (sId.IsEmpty())
  535. {
  536. Application->MessageBox(lblText2->Caption.c_str(),//L"삭제할 VMS를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  537. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  538. return;
  539. }
  540. String sMsg;
  541. sMsg = lblText3->Caption + ": " + sId;//"VMS번호: " + sId;
  542. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 정보를 삭제하시겠습니까?";
  543. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  544. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sId);
  545. if (pObj)
  546. {
  547. if (VmsCtlrManager->DeleteVms(pObj))
  548. {
  549. pObj->DEL_YN = "Y";
  550. FRAMEVmsList1->UpdateList();
  551. UpdateIcon();
  552. }
  553. FUpdate = true;
  554. Application->MessageBox(lblText5->Caption.c_str(),//L"VMS 정보삭제\r\nVMS 정보를 삭제 하였습니다.",
  555. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  556. FormInit();
  557. ChangeEditMode(1);
  558. UpdateIcon();
  559. }
  560. }
  561. //---------------------------------------------------------------------------
  562. void __fastcall TVMSM100M::BtnSaveClick(TObject *Sender)
  563. {
  564. if (EdNmbr->Text.IsEmpty() ||
  565. EdVmsId->Text.Trim().IsEmpty() ||
  566. EdVmsNm->Text.Trim().IsEmpty() ||
  567. SePosX->Value == 0 ||
  568. SePosY->Value == 0 ||
  569. CbType->Text.IsEmpty() ||
  570. EdCtlrIp->Text.IsEmpty())
  571. {
  572. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  573. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  574. return;
  575. }
  576. String sNmbr = EdNmbr->Text;
  577. int nNmbr = sNmbr.ToInt();
  578. String sVmsId = EdVmsId->Text.Trim();
  579. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  580. {
  581. Application->MessageBox(lblText6->Caption.c_str(),//L"제어기 IP가 유효하지 않습니다.",
  582. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  583. return;
  584. }
  585. if (EdWebCamIp->Text.Trim() != "")
  586. {
  587. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  588. {
  589. Application->MessageBox(lblText7->Caption.c_str(),//L"웹카메라 IP가 유효하지 않습니다.",
  590. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  591. return;
  592. }
  593. }
  594. VmsCtlrManager->FLists.Lock();
  595. FOR_STL(TVmsCtlr*, pTmpObj, VmsCtlrManager->FLists)
  596. {
  597. if (pTmpObj->DEL_YN == "Y") continue;
  598. if (pTmpObj->VMS_CTLR_NMBR == sNmbr) continue; //자기자신
  599. if (pTmpObj->VMS_CTLR_ID == sVmsId)
  600. {
  601. Application->MessageBox(lblText8->Caption.c_str(),//L"VMS ID가 이미 사용 중입니다. VMS ID를 확인하세요.",
  602. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  603. return;
  604. }
  605. }
  606. VmsCtlrManager->FLists.UnLock();
  607. TVmsCtlr *pObj;
  608. if (FNewDb)
  609. pObj = new TVmsCtlr();
  610. else
  611. pObj = VmsCtlrManager->FLists.Find(sNmbr);
  612. if (pObj)
  613. {
  614. pObj->VMS_CTLR_NMBR = nNmbr;
  615. pObj->VMS_CTLR_ID = sVmsId;
  616. pObj->VMS_NM = EdVmsNm->Text.Trim();
  617. pObj->VMS_CTLR_IP = EdCtlrIp->Text;
  618. pObj->VMS_CTLR_PORT = EdCmncPort->Text.ToIntDef(0);
  619. pObj->VMS_CTLR_LOCAL_NO = Se_VMS_CTLR_LOCAL_NO->Value;
  620. pObj->VMS_TYPE_CD = APP_GetCode(CbType);
  621. pObj->ISTL_LCTN_NM = ISTL_LCTN_NM->Text.Trim();
  622. pObj->ISTL_LCTN_ADDR = ISTL_LCTN_ADDR->Text.Trim();
  623. pObj->X_CRDN = SePosX->Value;
  624. pObj->Y_CRDN = SePosY->Value;
  625. pObj->WEB_CMRA_IP = EdWebCamIp->Text;
  626. pObj->WEB_CMRA_PORT = EdWebCamPort->Text.ToIntDef(0);
  627. pObj->WEB_CMRA_ID = EdWebCamId->Text;
  628. pObj->WEB_CMRA_PWD = EdWebCamPswd->Text;
  629. pObj->STRM_SESN_NM = EdWebCamStrm->Text;
  630. pObj->VMS_MAX_PHSE_NUM = SeMaxPhase->Value;
  631. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  632. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  633. pObj->Completed = true;
  634. pObj->MEM_DEL = "N";
  635. bool bResult;
  636. if (FNewDb)
  637. {
  638. pObj->DEL_YN = "N";
  639. bResult = VmsCtlrManager->InsertVms(pObj);
  640. if (bResult)
  641. {
  642. VmsCtlrManager->FLists.Push(sNmbr, pObj);
  643. }
  644. }
  645. else
  646. {
  647. bResult = VmsCtlrManager->UpdateVms(pObj);
  648. }
  649. if (bResult)
  650. {
  651. Application->MessageBox(lblText9->Caption.c_str(),//L"VMS 정보저장\r\nVMS 정보를 저장 하였습니다.",
  652. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  653. FUpdate = true;
  654. FRAMEVmsList1->UpdateList();
  655. UpdateIcon();
  656. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sNmbr, FRAMEVmsList1->Column01->Index);
  657. DisplayInfo(pObj, true);
  658. }
  659. }
  660. }
  661. //---------------------------------------------------------------------------
  662. void __fastcall TVMSM100M::FRAMEVmsList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  663. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  664. TShiftState AShift, bool &AHandled)
  665. {
  666. if (!ACellViewInfo) return;
  667. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  668. if( nRow <= -1 )
  669. return;
  670. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  671. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  672. DisplayInfo(pObj, true);
  673. }
  674. //---------------------------------------------------------------------------
  675. void __fastcall TVMSM100M::EdWebCamPortKeyPress(TObject *Sender, wchar_t &Key)
  676. {
  677. if (Key > '9' || Key < '0')
  678. {
  679. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  680. Key = 0;
  681. }
  682. }
  683. //---------------------------------------------------------------------------
  684. void __fastcall TVMSM100M::BtnSaveAllClick(TObject *Sender)
  685. {
  686. String sMsg;
  687. sMsg = "";
  688. sMsg+= "\r\n" + lblText10->Caption;//제어기 설정 정보를 전체 VMS에 동일하게 적용 하시겠습니까?";
  689. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  690. TVmsCtlr* pObj = NULL;
  691. try
  692. {
  693. pObj = new TVmsCtlr();
  694. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  695. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  696. if (VmsCtlrManager->UpdateCtlrInfo(pObj))
  697. {
  698. FUpdate = true;
  699. VmsCtlrManager->FLists.Lock();
  700. FOR_STL(TVmsCtlr*, pTmpObj, VmsCtlrManager->FLists)
  701. {
  702. if (pTmpObj->DEL_YN == "Y") continue;
  703. pTmpObj->PANL_ON_TIME = pObj->PANL_ON_TIME;
  704. pTmpObj->PANL_OFF_TIME = pObj->PANL_OFF_TIME;
  705. }
  706. VmsCtlrManager->FLists.UnLock();
  707. Application->MessageBox(lblText11->Caption.c_str(),//L"VMS 제어기설정 정보저장\r\n제어기 설정 정보를 전체 제어기에 적용 하였습니다.",
  708. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  709. }
  710. }
  711. __finally
  712. {
  713. if (pObj)
  714. {
  715. delete pObj;
  716. pObj = NULL;
  717. }
  718. }
  719. }
  720. //---------------------------------------------------------------------------
  721. void __fastcall TVMSM100M::SeMaxPhasePropertiesChange(TObject *Sender)
  722. {
  723. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  724. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  725. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  726. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  727. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  728. }
  729. //---------------------------------------------------------------------------
  730. void __fastcall TVMSM100M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  731. {
  732. try
  733. {
  734. if (AFirst)
  735. {
  736. //지도를 편집모드로 변경
  737. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  738. FRAMEOpenMap1->ExecScript(sJs);
  739. //시설물아이콘 등록
  740. UpdateIcon();
  741. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  742. FRAMEOpenMap1->ExecScript(sJs);
  743. return;
  744. }
  745. if (AFunc.Pos("onfacilitydragend"))
  746. {
  747. TStringList *pStringList = new TStringList;
  748. pStringList->CommaText = AArgs;
  749. try
  750. {
  751. String sNmbr = pStringList->Strings[0];
  752. String sCenterLat = pStringList->Strings[1];
  753. String sCenterLng = pStringList->Strings[2];
  754. SePosX->Value = sCenterLat.ToDouble();
  755. SePosY->Value = sCenterLng.ToDouble();
  756. }
  757. catch(Exception &e)
  758. {
  759. }
  760. delete pStringList;
  761. }
  762. }
  763. catch(Exception &exception)
  764. {
  765. }
  766. }
  767. //---------------------------------------------------------------------------
  768. #if 0
  769. String __fastcall TVMSM100M::GetPassword(String APswd)
  770. {
  771. int nRes;
  772. String sEncPswd = "";
  773. String sQry;
  774. #if 0
  775. select scp.enc_b64('DAMO','SCP','ARIA_256.SCPS','admin13579') from dual;
  776. select scp.dec_b64('DAMO','SCP','ARIA_256.SCPS','+58lKndUaKrNQxoLEKc4Ew==') from dual;
  777. #endif
  778. #if 1
  779. sQry = "SELECT SCP.HASH_B64('71', :p01) AS PWD FROM DUAL \r\n";
  780. TADOQuery *pADO = NULL;
  781. try
  782. {
  783. try
  784. {
  785. pADO = new TADOQuery(NULL);
  786. pADO->Connection = ITSDb_GetConnection();
  787. pADO->Close();
  788. pADO->SQL->Text = sQry;
  789. pADO->Parameters->ParamByName("p01")->Value = APswd;
  790. pADO->Prepared = true;
  791. pADO->Open();
  792. if (!pADO->Eof)
  793. {
  794. pADO->First();
  795. sEncPswd = pADO->FieldByName("PWD")->AsString;
  796. }
  797. pADO->Close();
  798. }
  799. catch(EDatabaseError &E)
  800. {
  801. throw Exception(String(E.ClassName())+E.Message);
  802. }
  803. catch (Exception &exception)
  804. {
  805. throw Exception(String(exception.ClassName())+exception.Message);
  806. }
  807. }
  808. __finally
  809. {
  810. if (pADO)
  811. {
  812. pADO->Close();
  813. delete pADO;
  814. }
  815. }
  816. #else
  817. sEncPswd = String(ITSSHA256_Encrpyt(AnsiString(APswd)));
  818. #endif
  819. return sEncPswd;
  820. }
  821. //---------------------------------------------------------------------------
  822. #endif