VMSM100MF.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  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. cxTimeOn->Clear();
  308. cxTimeOn->EditValue = Now().FormatString("hh:nn");
  309. cxTimeOn->EditValue = "00:00";
  310. cxTimeOff->Clear();
  311. cxTimeOff->EditValue = Now().FormatString("hh:nn");
  312. cxTimeOff->EditValue = "00:00";
  313. try
  314. {
  315. if (AObj->PANL_ON_TIME.Length() == 4) // 전팡관ON시각
  316. {
  317. String sPowerOnTime = AObj->PANL_ON_TIME;
  318. sPowerOnTime.Insert(":", 3);
  319. cxTimeOn->EditValue = sPowerOnTime;
  320. }
  321. }
  322. catch(Exception &e) { }
  323. try
  324. {
  325. if (AObj->PANL_OFF_TIME.Length() == 4) // 전광판OFF시각
  326. {
  327. String sPowerOffTime = AObj->PANL_OFF_TIME;
  328. sPowerOffTime.Insert(":", 3);
  329. cxTimeOff->EditValue = sPowerOffTime;
  330. }
  331. }
  332. catch(Exception &e) { }
  333. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  334. ChangeEditMode(3);
  335. }
  336. //---------------------------------------------------------------------------
  337. void __fastcall TVMSM100M::UpdateIcon()
  338. {
  339. if (!FRAMEOpenMap1->MapStart) return;
  340. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  341. FRAMEOpenMap1->ExecScript(sJs);
  342. String arrObj = "";
  343. String sTemp;
  344. VmsCtlrManager->FLists.Lock();
  345. try
  346. {
  347. FOR_STL(TVmsCtlr*, pObj, VmsCtlrManager->FLists)
  348. {
  349. if (pObj->DEL_YN == "Y") continue;
  350. if (arrObj != "") arrObj += "|";
  351. 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);
  352. arrObj += sTemp;
  353. }
  354. }
  355. __finally
  356. {
  357. VmsCtlrManager->FLists.UnLock();
  358. if (arrObj != "")
  359. {
  360. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  361. FRAMEOpenMap1->ExecScript(sJs);
  362. }
  363. }
  364. }
  365. //---------------------------------------------------------------------------
  366. void __fastcall TVMSM100M::BtnEditClick(TObject *Sender)
  367. {
  368. String sId = EdNmbr->Text;
  369. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sId);
  370. FNewDb = false;
  371. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  372. {
  373. //편집모드 시작
  374. ChangeEditMode(0);
  375. if (pObj)
  376. {
  377. //시설물아이콘을 편집아이콘으로 변경
  378. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  379. sJs.printf(L"editFacilityObject(%d, %s, 1, 1)", FLayerIdx, pObj->VMS_CTLR_NMBR.c_str());
  380. FRAMEOpenMap1->ExecScript(sJs);
  381. }
  382. }
  383. else
  384. {
  385. //편집모드 취소
  386. ChangeEditMode(1);
  387. if (pObj)
  388. {
  389. //원래 정보를 화면에 표출
  390. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  391. DisplayInfo(pObj, false);
  392. #if 0
  393. //지도시설물아이콘을 원래아이콘으로 변경
  394. sJs.printf(L"editFacilityObject(%d, %s, 0, 0)", FLayerIdx, pObj->VMS_CTLR_NMBR.c_str());
  395. FRAMEOpenMap1->ExecScript(sJs);
  396. #else
  397. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  398. //새롭게 다시 그리자
  399. UpdateIcon();
  400. #endif
  401. }
  402. else
  403. {
  404. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  405. sJs.printf(L"removeFacilityObject(%d, %s)", FLayerIdx, sId.c_str());
  406. FRAMEOpenMap1->ExecScript(sJs);
  407. }
  408. }
  409. }
  410. //---------------------------------------------------------------------------
  411. void __fastcall TVMSM100M::ChangeEditMode(int AEdit)
  412. {
  413. bool bEnabled = false;
  414. switch(AEdit)
  415. {
  416. case 0: //편집버튼클릭
  417. {
  418. BtnEdit->Enabled = true;
  419. BtnInsert->Enabled = false;
  420. BtnDelete->Enabled = false;
  421. BtnSave->Enabled = true;
  422. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  423. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  424. EditMode = true;
  425. }
  426. break;
  427. case 1: //편집[취소]버튼클릭
  428. {
  429. FormInit(); //화면을 모두 지운다.
  430. BtnEdit->Enabled = false;
  431. BtnInsert->Enabled = true;
  432. BtnDelete->Enabled = false;
  433. BtnSave->Enabled = false;
  434. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  435. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  436. //bEnabled = true;
  437. EditMode = false;
  438. }
  439. break;
  440. case 2: //추가
  441. {
  442. BtnEdit->Enabled = true;
  443. BtnInsert->Enabled = false;
  444. BtnDelete->Enabled = false;
  445. BtnSave->Enabled = true;
  446. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  447. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  448. EditMode = true;
  449. }
  450. break;
  451. case 3: //수정모드
  452. {
  453. BtnEdit->Enabled = true;
  454. BtnInsert->Enabled = true;
  455. BtnDelete->Enabled = true;
  456. BtnSave->Enabled = false;
  457. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  458. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  459. bEnabled = true;
  460. EditMode = false;
  461. }
  462. break;
  463. }
  464. if (AEdit == 0 || AEdit == 2)
  465. {
  466. FRAMEVmsList1->CxList->Enabled = false;
  467. }
  468. else
  469. {
  470. FRAMEVmsList1->CxList->Enabled = true;
  471. }
  472. PnlEdit->Enabled = EditMode;
  473. #if 0
  474. EdVmsId->Enabled = bEnabled;
  475. EdVmsNm->Enabled = bEnabled;
  476. CbUsagType->Enabled = bEnabled;
  477. CbType->Enabled = bEnabled;
  478. SePosX->Enabled = bEnabled;
  479. SePosY->Enabled = bEnabled;
  480. EdCtlrIp->Enabled = bEnabled;
  481. EdWebCamIp->Enabled = bEnabled;
  482. EdWebCamPort->Enabled = bEnabled;
  483. EdWebCamId->Enabled = bEnabled;
  484. EdWebCamPswd->Enabled = bEnabled;
  485. EdWebCamStrm->Enabled = bEnabled;
  486. cxTimeOn->Enabled = bEnabled;
  487. cxTimeOff->Enabled = bEnabled;
  488. #endif
  489. #if 0
  490. EdRseId->Properties->ReadOnly = bEnabled;
  491. EdRoadSpotId->Properties->ReadOnly = bEnabled;
  492. EdLogCnncId->Properties->ReadOnly = bEnabled;
  493. EdLogCnncPwd->Properties->ReadOnly = bEnabled;
  494. EdIstlLctnNm->Properties->ReadOnly = bEnabled;
  495. SePosX->Properties->ReadOnly = bEnabled;
  496. SePosY->Properties->ReadOnly = bEnabled;
  497. EdIP->Properties->ReadOnly = bEnabled;
  498. EdPort->Properties->ReadOnly = bEnabled;
  499. CbMnfcCmpyCd->Properties->ReadOnly = bEnabled;
  500. SeCLCT_ABNR_BASI->Properties->ReadOnly = bEnabled;
  501. #endif
  502. }
  503. //---------------------------------------------------------------------------
  504. void __fastcall TVMSM100M::BtnInsertClick(TObject *Sender)
  505. {
  506. FormInit();
  507. //신규아이디를 얻어와서 화면을 초기화한다.
  508. int nNmbr, nId;
  509. if (!VmsCtlrManager->GetNextVmsId(nNmbr, nId))
  510. {
  511. Application->MessageBox(lblText1->Caption.c_str(),//L"새로운 VMS 정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  512. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  513. return;
  514. }
  515. EdNmbr->Text = String(nNmbr);
  516. SePosX->Value = FRAMEOpenMap1->CenterX;
  517. SePosY->Value = FRAMEOpenMap1->CenterY;
  518. //지도에 새로운 시설물 아이콘 추가하면서 편집모드로 변경
  519. String arrObj = "";
  520. arrObj.printf(L"%d,New,New,%.6f,%.6f,0", nNmbr, FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY);
  521. sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str());
  522. FRAMEOpenMap1->ExecScript(sJs);
  523. ChangeEditMode(2);
  524. FNewDb = true;
  525. }
  526. //---------------------------------------------------------------------------
  527. void __fastcall TVMSM100M::BtnDeleteClick(TObject *Sender)
  528. {
  529. if (!FRAMEOpenMap1->MapStart) return;
  530. int nIdx = m_pGDC->FocusedRecordIndex;
  531. if (nIdx < 0) return;
  532. String sId = EdNmbr->Text;
  533. if (sId.IsEmpty())
  534. {
  535. Application->MessageBox(lblText2->Caption.c_str(),//L"삭제할 VMS를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.",
  536. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  537. return;
  538. }
  539. String sMsg;
  540. sMsg = lblText3->Caption + ": " + sId;//"VMS번호: " + sId;
  541. sMsg+= "\r\n" + lblText4->Caption;//"선택하신 VMS 정보를 삭제하시겠습니까?";
  542. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  543. TVmsCtlr *pObj = VmsCtlrManager->FLists.Find(sId);
  544. if (pObj)
  545. {
  546. if (VmsCtlrManager->DeleteVms(pObj))
  547. {
  548. pObj->DEL_YN = "Y";
  549. FRAMEVmsList1->UpdateList();
  550. UpdateIcon();
  551. }
  552. FUpdate = true;
  553. Application->MessageBox(lblText5->Caption.c_str(),//L"VMS 정보삭제\r\nVMS 정보를 삭제 하였습니다.",
  554. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  555. FormInit();
  556. ChangeEditMode(1);
  557. UpdateIcon();
  558. }
  559. }
  560. //---------------------------------------------------------------------------
  561. void __fastcall TVMSM100M::BtnSaveClick(TObject *Sender)
  562. {
  563. if (EdNmbr->Text.IsEmpty() ||
  564. EdVmsId->Text.Trim().IsEmpty() ||
  565. EdVmsNm->Text.Trim().IsEmpty() ||
  566. SePosX->Value == 0 ||
  567. SePosY->Value == 0 ||
  568. CbType->Text.IsEmpty() ||
  569. EdCtlrIp->Text.IsEmpty())
  570. {
  571. Application->MessageBox(FrmLang->lblNecessary->Caption.c_str(),//L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  572. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  573. return;
  574. }
  575. String sNmbr = EdNmbr->Text;
  576. int nNmbr = sNmbr.ToInt();
  577. String sVmsId = EdVmsId->Text.Trim();
  578. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  579. {
  580. Application->MessageBox(lblText6->Caption.c_str(),//L"제어기 IP가 유효하지 않습니다.",
  581. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  582. return;
  583. }
  584. if (EdWebCamIp->Text.Trim() != "")
  585. {
  586. if (!ITSUtil_CheckIpAddress(EdCtlrIp->Text.Trim()))
  587. {
  588. Application->MessageBox(lblText7->Caption.c_str(),//L"웹카메라 IP가 유효하지 않습니다.",
  589. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  590. return;
  591. }
  592. }
  593. VmsCtlrManager->FLists.Lock();
  594. FOR_STL(TVmsCtlr*, pTmpObj, VmsCtlrManager->FLists)
  595. {
  596. if (pTmpObj->DEL_YN == "Y") continue;
  597. if (pTmpObj->VMS_CTLR_NMBR == sNmbr) continue; //자기자신
  598. if (pTmpObj->VMS_CTLR_ID == sVmsId)
  599. {
  600. Application->MessageBox(lblText8->Caption.c_str(),//L"VMS ID가 이미 사용 중입니다. VMS ID를 확인하세요.",
  601. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  602. return;
  603. }
  604. }
  605. VmsCtlrManager->FLists.UnLock();
  606. TVmsCtlr *pObj;
  607. if (FNewDb)
  608. pObj = new TVmsCtlr();
  609. else
  610. pObj = VmsCtlrManager->FLists.Find(sNmbr);
  611. if (pObj)
  612. {
  613. pObj->VMS_CTLR_NMBR = nNmbr;
  614. pObj->VMS_CTLR_ID = sVmsId;
  615. pObj->VMS_NM = EdVmsNm->Text.Trim();
  616. pObj->VMS_CTLR_IP = EdCtlrIp->Text;
  617. pObj->VMS_CTLR_PORT = EdCmncPort->Text.ToIntDef(0);
  618. pObj->VMS_CTLR_LOCAL_NO = 0;
  619. pObj->VMS_TYPE_CD = APP_GetCode(CbType);
  620. pObj->ISTL_LCTN_NM = ISTL_LCTN_NM->Text.Trim();
  621. pObj->ISTL_LCTN_ADDR = ISTL_LCTN_ADDR->Text.Trim();
  622. pObj->X_CRDN = SePosX->Value;
  623. pObj->Y_CRDN = SePosY->Value;
  624. pObj->WEB_CMRA_IP = EdWebCamIp->Text;
  625. pObj->WEB_CMRA_PORT = EdWebCamPort->Text.ToIntDef(0);
  626. pObj->WEB_CMRA_ID = EdWebCamId->Text;
  627. pObj->WEB_CMRA_PWD = EdWebCamPswd->Text;
  628. pObj->STRM_SESN_NM = EdWebCamStrm->Text;
  629. pObj->VMS_MAX_PHSE_NUM = SeMaxPhase->Value;
  630. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  631. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  632. pObj->Completed = true;
  633. pObj->MEM_DEL = "N";
  634. bool bResult;
  635. if (FNewDb)
  636. {
  637. pObj->DEL_YN = "N";
  638. bResult = VmsCtlrManager->InsertVms(pObj);
  639. if (bResult)
  640. {
  641. VmsCtlrManager->FLists.Push(sNmbr, pObj);
  642. }
  643. }
  644. else
  645. {
  646. bResult = VmsCtlrManager->UpdateVms(pObj);
  647. }
  648. if (bResult)
  649. {
  650. Application->MessageBox(lblText9->Caption.c_str(),//L"VMS 정보저장\r\nVMS 정보를 저장 하였습니다.",
  651. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  652. FUpdate = true;
  653. FRAMEVmsList1->UpdateList();
  654. UpdateIcon();
  655. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sNmbr, FRAMEVmsList1->Column01->Index);
  656. DisplayInfo(pObj, true);
  657. }
  658. }
  659. }
  660. //---------------------------------------------------------------------------
  661. void __fastcall TVMSM100M::FRAMEVmsList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  662. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  663. TShiftState AShift, bool &AHandled)
  664. {
  665. if (!ACellViewInfo) return;
  666. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  667. if( nRow <= -1 )
  668. return;
  669. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  670. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  671. DisplayInfo(pObj, true);
  672. }
  673. //---------------------------------------------------------------------------
  674. void __fastcall TVMSM100M::EdWebCamPortKeyPress(TObject *Sender, wchar_t &Key)
  675. {
  676. if (Key > '9' || Key < '0')
  677. {
  678. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  679. Key = 0;
  680. }
  681. }
  682. //---------------------------------------------------------------------------
  683. void __fastcall TVMSM100M::BtnSaveAllClick(TObject *Sender)
  684. {
  685. String sMsg;
  686. sMsg = "";
  687. sMsg+= "\r\n" + lblText10->Caption;//제어기 설정 정보를 전체 VMS에 동일하게 적용 하시겠습니까?";
  688. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  689. TVmsCtlr* pObj = NULL;
  690. try
  691. {
  692. pObj = new TVmsCtlr();
  693. pObj->PANL_ON_TIME = cxTimeOn->Time.FormatString("HHNN");
  694. pObj->PANL_OFF_TIME = cxTimeOff->Time.FormatString("HHNN");
  695. if (VmsCtlrManager->UpdateCtlrInfo(pObj))
  696. {
  697. FUpdate = true;
  698. VmsCtlrManager->FLists.Lock();
  699. FOR_STL(TVmsCtlr*, pTmpObj, VmsCtlrManager->FLists)
  700. {
  701. if (pTmpObj->DEL_YN == "Y") continue;
  702. pTmpObj->PANL_ON_TIME = pObj->PANL_ON_TIME;
  703. pTmpObj->PANL_OFF_TIME = pObj->PANL_OFF_TIME;
  704. }
  705. VmsCtlrManager->FLists.UnLock();
  706. Application->MessageBox(lblText11->Caption.c_str(),//L"VMS 제어기설정 정보저장\r\n제어기 설정 정보를 전체 제어기에 적용 하였습니다.",
  707. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  708. }
  709. }
  710. __finally
  711. {
  712. if (pObj)
  713. {
  714. delete pObj;
  715. pObj = NULL;
  716. }
  717. }
  718. }
  719. //---------------------------------------------------------------------------
  720. void __fastcall TVMSM100M::SeMaxPhasePropertiesChange(TObject *Sender)
  721. {
  722. if (((TcxSpinEdit*)Sender)->Value < ((TcxSpinEdit*)Sender)->Properties->MinValue)
  723. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MinValue;
  724. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  725. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  726. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  727. }
  728. //---------------------------------------------------------------------------
  729. void __fastcall TVMSM100M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  730. {
  731. try
  732. {
  733. if (AFirst)
  734. {
  735. //지도를 편집모드로 변경
  736. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  737. FRAMEOpenMap1->ExecScript(sJs);
  738. //시설물아이콘 등록
  739. UpdateIcon();
  740. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  741. FRAMEOpenMap1->ExecScript(sJs);
  742. return;
  743. }
  744. if (AFunc.Pos("onfacilitydragend"))
  745. {
  746. TStringList *pStringList = new TStringList;
  747. pStringList->CommaText = AArgs;
  748. try
  749. {
  750. String sNmbr = pStringList->Strings[0];
  751. String sCenterLat = pStringList->Strings[1];
  752. String sCenterLng = pStringList->Strings[2];
  753. SePosX->Value = sCenterLat.ToDouble();
  754. SePosY->Value = sCenterLng.ToDouble();
  755. }
  756. catch(Exception &e)
  757. {
  758. }
  759. delete pStringList;
  760. }
  761. }
  762. catch(Exception &exception)
  763. {
  764. }
  765. }
  766. //---------------------------------------------------------------------------