PIS0010MF.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  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 "ITSMapF.h"
  9. #include "ITS_OPLibF.h"
  10. #pragma hdrstop
  11. #include "PIS0010MF.h"
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "cxButtons"
  15. #pragma link "cxCheckBox"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxFilter"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGrid"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridLevel"
  30. #pragma link "cxGridTableView"
  31. #pragma link "cxGroupBox"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxMaskEdit"
  36. #pragma link "cxSpinEdit"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "cxTextEdit"
  40. #pragma link "cxTimeEdit"
  41. #pragma link "dxSkinBlack"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinsCore"
  44. #pragma link "dxSkinscxPCPainter"
  45. #pragma link "FRAME_ParkingListF"
  46. #pragma link "FRAME_OpenMapF"
  47. #pragma link "dxSkinMcSkin"
  48. #pragma resource "*.dfm"
  49. TPIS0010M *PIS0010M = NULL;
  50. //---------------------------------------------------------------------------
  51. void TPIS0010M_MapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  52. {
  53. try
  54. {
  55. if (!PIS0010M) return;
  56. PIS0010M->OpenMapCallback(ASender, AFunc, AArgs, AFirst);
  57. }
  58. catch(Exception &exception)
  59. {
  60. }
  61. }
  62. //---------------------------------------------------------------------------
  63. __fastcall TPIS0010M::TPIS0010M(TComponent* Owner)
  64. : TForm(Owner)
  65. {
  66. ITSSkin_Load(this);
  67. CMM_LoadForm(g_sFormsDir, this);
  68. FUpdate= false;
  69. FTitle = "주차장 관리";
  70. MapStart = false;
  71. FRAMEParkingList1->PnlTop->Visible = false;
  72. FRAMEParkingList1->PnlBottom->Visible = false;
  73. FRAMEParkingList1->ColumnSel->Visible = false;
  74. FRAMEParkingList1->Column02->Visible = true;
  75. FRAMEParkingList1->Column03->Visible = true;
  76. //FRAMEParkingList1->Column05->Visible = true;
  77. FRAMEParkingList1->Column06->Visible = true;
  78. //FRAMEParkingList1->Column07->Visible = true;
  79. //FRAMEParkingList1->Column08->Visible = true;
  80. //FRAMEParkingList1->Column09->Visible = true;
  81. FRAMEParkingList1->Column10->Visible = true;
  82. FRAMEParkingList1->Column13->Visible = true;
  83. m_pGDC = FRAMEParkingList1->TvList->DataController;
  84. TvLink->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<주차장 층정보>";
  85. FLayerIdx = LyrTp_Park;
  86. FRAMEOpenMap1->LayerIdx = FLayerIdx;
  87. FRAMEOpenMap1->MapCallbackFunc = TPIS0010M_MapCallback;
  88. EditMode = false;
  89. }
  90. //---------------------------------------------------------------------------
  91. void __fastcall TPIS0010M::CommClose()
  92. {
  93. try
  94. {
  95. CMM_SaveForm(g_sFormsDir, this);
  96. }
  97. catch(...)
  98. {
  99. }
  100. }
  101. //---------------------------------------------------------------------------
  102. void __fastcall TPIS0010M::FormShow(TObject *Sender)
  103. {
  104. Refresh();
  105. FRAMEOpenMap1->OpenMap();
  106. TcxComboBox *pCombo = CbPRLT_OPER_DVSN_CD;
  107. pCombo->Properties->Items->Clear();
  108. TItsCode *pCode = ItsCodeManager->FLists.Find("POT");
  109. if (pCode)
  110. {
  111. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  112. {
  113. if (pSubCode->USE_YN == "N") continue;
  114. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  115. }
  116. }
  117. pCombo->ItemIndex = 0;
  118. pCombo = CbPRLT_TYPE_DVSN_CD;
  119. pCombo->Properties->Items->Clear();
  120. pCode = ItsCodeManager->FLists.Find("PFT");
  121. if (pCode)
  122. {
  123. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  124. {
  125. if (pSubCode->USE_YN == "N") continue;
  126. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  127. }
  128. }
  129. pCombo->ItemIndex = 0;
  130. pCombo = PARK_NDSY_CD;
  131. pCombo->Properties->Items->Clear();
  132. pCode = ItsCodeManager->FLists.Find("PND");
  133. if (pCode)
  134. {
  135. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  136. {
  137. if (pSubCode->USE_YN == "N") continue;
  138. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  139. }
  140. }
  141. pCombo->ItemIndex = 0;
  142. pCombo = PARK_OPER_DAY_CD;
  143. pCombo->Properties->Items->Clear();
  144. pCode = ItsCodeManager->FLists.Find("POD");
  145. if (pCode)
  146. {
  147. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  148. {
  149. if (pSubCode->USE_YN == "N") continue;
  150. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  151. }
  152. }
  153. pCombo->ItemIndex = 0;
  154. pCombo = PARK_OPDR_CD;
  155. pCombo->Properties->Items->Clear();
  156. pCode = ItsCodeManager->FLists.Find("POP");
  157. if (pCode)
  158. {
  159. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  160. {
  161. if (pSubCode->USE_YN == "N") continue;
  162. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  163. }
  164. }
  165. pCombo->ItemIndex = 0;
  166. pCombo = PARK_FARE_IMPS_CD;
  167. pCombo->Properties->Items->Clear();
  168. pCode = ItsCodeManager->FLists.Find("PFS");
  169. if (pCode)
  170. {
  171. FOR_STL(TItsSubCode *, pSubCode, pCode->FSubLists)
  172. {
  173. if (pSubCode->USE_YN == "N") continue;
  174. pCombo->Properties->Items->Add(" [" + pSubCode->CMMN_CD + "] " + pSubCode->CMMN_CD_KOR_NM);
  175. }
  176. }
  177. pCombo->ItemIndex = 0;
  178. FormInit();
  179. ChangeEditMode(1);
  180. TmrShow->Enabled = true;
  181. }
  182. //---------------------------------------------------------------------------
  183. void __fastcall TPIS0010M::FormInit()
  184. {
  185. EdNmbr->Text = "";
  186. EdPRLT_CTLR_ID->Text = "";
  187. EdPRLT_NM->Text = "";
  188. EdPRLT_CTLR_IP->Text = "";
  189. EdPRLT_CTLR_PORT->Text = "";
  190. //EdPRLT_CTLR_LOCAL_NO->Text = "";
  191. CbPRLT_OPER_DVSN_CD->ItemIndex = 0;
  192. CbPRLT_TYPE_DVSN_CD->ItemIndex = 0;
  193. EdISTL_LCTN_NM->Text = "";
  194. EdPRLT_TEL->Text = "";
  195. EdISTL_LCTN_ADDR->Text = "";
  196. SePosX->Value = 0;
  197. SePosY->Value = 0;
  198. SeCTLR_CLCT_CYCL->Value = 60;
  199. SeCTLR_STTS_CYCL->Value = 60;
  200. SeWHOL_NPLS->Value = 0;
  201. SeWHOL_NPLS->Value = 0;
  202. SeGNRL_NPLS->Value = 0;
  203. SeLGVH_NPLS->Value = 0;
  204. SeHVVH_NPLS->Value = 0;
  205. SeEMVH_NPLS->Value = 0;
  206. SeHNDC_NPLS->Value = 0;
  207. SeWMON_NPLS->Value = 0;
  208. SeELVH_NPLS->Value = 0;
  209. SeETC_NPLS->Value = 0;
  210. CbREAL_DATA_YN->ItemIndex = 1;
  211. EdPRLT_CTLR_IP->Text = "";
  212. EdPRLT_CTLR_PORT->Text = "";
  213. SeCNGT_NPLS->Value = 10;
  214. PRLT_MNGM_INTN_NM->Text = "";
  215. PRLT_MNGM_INTN_TEL->Text = "";
  216. MoPRLT_CHARGE_DESC->Lines->Clear();
  217. MoPRLT_OPER_DESC->Lines->Clear();
  218. MoPRLT_ETC_DESC->Lines->Clear();
  219. VALD_YN->ItemIndex = 0;
  220. PARK_NDSY_CD->ItemIndex = 0;
  221. PARK_OPER_DAY_CD->ItemIndex = 0;
  222. PARK_OPDR_CD->ItemIndex = 0;
  223. PARK_FARE_IMPS_CD->ItemIndex = 0;
  224. PARK_APNT_OFFR_YN->ItemIndex = 0;
  225. PARK_WKDY_STRT_HH->Clear();
  226. PARK_WKDY_STRT_HH->EditValue = Now().FormatString("hh:nn");
  227. PARK_WKDY_STRT_HH->EditValue = "00:00";
  228. PARK_WKDY_END_HH->Clear();
  229. PARK_WKDY_END_HH->EditValue = Now().FormatString("hh:nn");
  230. PARK_WKDY_END_HH->EditValue = "00:00";
  231. PARK_LHDY_STRT_HH->Clear();
  232. PARK_LHDY_STRT_HH->EditValue = Now().FormatString("hh:nn");
  233. PARK_LHDY_STRT_HH->EditValue = "00:00";
  234. PARK_LHDY_END_HH->Clear();
  235. PARK_LHDY_END_HH->EditValue = Now().FormatString("hh:nn");
  236. PARK_LHDY_END_HH->EditValue = "00:00";
  237. CMM_ClearGridTableView(TvLink);
  238. FNewDb = false;
  239. }
  240. //---------------------------------------------------------------------------
  241. void __fastcall TPIS0010M::TmrShowTimer(TObject *Sender)
  242. {
  243. TmrShow->Enabled = false;
  244. FRAMEParkingList1->UpdateList();
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TPIS0010M::BtnCloseClick(TObject *Sender)
  248. {
  249. Close();
  250. }
  251. //---------------------------------------------------------------------------
  252. void __fastcall TPIS0010M::FormClose(TObject *Sender, TCloseAction &Action)
  253. {
  254. CommClose();
  255. PIS0010M = NULL;
  256. Action = caFree;
  257. }
  258. //---------------------------------------------------------------------------
  259. void __fastcall TPIS0010M::FormCloseQuery(TObject *Sender, bool &CanClose)
  260. {
  261. if (FUpdate)
  262. {
  263. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  264. }
  265. FRAMEParkingList1->OnCloseQuery(CanClose);
  266. }
  267. //---------------------------------------------------------------------------
  268. void __fastcall TPIS0010M::DisplayInfo(TPrltCtlr* AObj, bool AMoveObj/*=true*/)
  269. {
  270. FormInit();
  271. if (!AObj) return;
  272. if (AMoveObj)
  273. {
  274. sJs.printf(L"selectLayerObject(%d, '%s', %d)", FLayerIdx, AObj->PRLT_CTLR_NMBR.c_str(), FRAMEOpenMap1->MapZoom);
  275. FRAMEOpenMap1->ExecScript(sJs);
  276. }
  277. EdNmbr->Text = AObj->PRLT_CTLR_NMBR;
  278. EdPRLT_CTLR_ID->Text = AObj->PRLT_CTLR_ID;
  279. EdPRLT_NM->Text = AObj->PRLT_NM;
  280. EdISTL_LCTN_NM->Text = AObj->ISTL_LCTN_NM;
  281. EdISTL_LCTN_ADDR->Text = AObj->ISTL_LCTN_ADDR;
  282. EdPRLT_TEL->Text = AObj->PRLT_TEL;
  283. EdPRLT_CTLR_IP->Text = AObj->PRLT_CTLR_IP;
  284. SeCNGT_NPLS->Value = AObj->CNGT_NPLS;
  285. EdPRLT_CTLR_PORT->Text = String(AObj->PRLT_CTLR_PORT);
  286. //PRLT_MNGM_INTN_NM->Text = AObj->PRLT_MNGM_INTN_NM;
  287. //PRLT_MNGM_INTN_TEL->Text = AObj->PRLT_MNGM_INTN_TEL;
  288. SePosX->Value = StrToFloatDef(AObj->X_CRDN, 0);
  289. SePosY->Value = StrToFloatDef(AObj->Y_CRDN, 0);
  290. SeCTLR_CLCT_CYCL->Value = AObj->CTLR_CLCT_CYCL;
  291. SeCTLR_STTS_CYCL->Value = AObj->CTLR_STTS_CYCL;
  292. SeWHOL_NPLS->Value = AObj->WHOL_NPLS;
  293. SeGNRL_NPLS->Value = AObj->GNRL_NPLS;
  294. SeLGVH_NPLS->Value = AObj->LGVH_NPLS;
  295. SeHVVH_NPLS->Value = AObj->HVVH_NPLS;
  296. SeEMVH_NPLS->Value = AObj->EMVH_NPLS;
  297. SeHNDC_NPLS->Value = AObj->HNDC_NPLS;
  298. SeWMON_NPLS->Value = AObj->WMON_NPLS;
  299. SeELVH_NPLS->Value = AObj->ELVH_NPLS;
  300. SeETC_NPLS->Value = AObj->ETC_NPLS;
  301. CMM_SetComboBoxItem(CbPRLT_OPER_DVSN_CD, AObj->PRLT_OPER_DVSN_CD);
  302. CMM_SetComboBoxItem(CbPRLT_TYPE_DVSN_CD, AObj->PRLT_TYPE_DVSN_CD);
  303. //CMM_SetComboBoxItem(VALD_YN, AObj->VALD_YN);
  304. CMM_SetComboBoxItem(CbREAL_DATA_YN, AObj->REAL_DATA_YN);
  305. //CMM_SetComboBoxItem(PARK_NDSY_CD, AObj->PARK_NDSY_CD);
  306. //CMM_SetComboBoxItem(PARK_OPER_DAY_CD, AObj->PARK_OPER_DAY_CD);
  307. //CMM_SetComboBoxItem(PARK_OPDR_CD, AObj->PARK_OPDR_CD);
  308. //CMM_SetComboBoxItem(PARK_FARE_IMPS_CD, AObj->PARK_FARE_IMPS_CD);
  309. //CMM_SetComboBoxItem(PARK_APNT_OFFR_YN, AObj->PARK_APNT_OFFR_YN);
  310. // FRAMEGisMap1->SelectObjectByPos(SePosX->Value, SePosY->Value, true);
  311. MoPRLT_CHARGE_DESC->Lines->Text = AObj->PRLT_CHARGE_DESC;
  312. MoPRLT_OPER_DESC->Lines->Text = AObj->PRLT_OPER_DESC;
  313. MoPRLT_ETC_DESC->Lines->Text = AObj->PRLT_ETC_DESC;
  314. ChangeEditMode(3);
  315. }
  316. //---------------------------------------------------------------------------
  317. void __fastcall TPIS0010M::UpdateIcon()
  318. {
  319. if (!FRAMEOpenMap1->MapStart) return;
  320. sJs.printf(L"removeLayerObject(%d)", FLayerIdx);
  321. FRAMEOpenMap1->ExecScript(sJs);
  322. String arrObj = "";
  323. String sTemp;
  324. PrltCtlrManager->FLists.Lock();
  325. try
  326. {
  327. FOR_STL(TPrltCtlr*, pObj, PrltCtlrManager->FLists)
  328. {
  329. if (pObj->DEL_YN == "Y") continue;
  330. if (arrObj != "") arrObj += "|";
  331. sTemp.printf(L"%s,%s,%s,%.6f,%.6f,0,0,0,0", pObj->PRLT_CTLR_NMBR.c_str(), pObj->PRLT_CTLR_ID.c_str(), pObj->PRLT_NM.c_str(), pObj->X_CRDN, pObj->Y_CRDN);
  332. arrObj += sTemp;
  333. }
  334. }
  335. __finally
  336. {
  337. PrltCtlrManager->FLists.UnLock();
  338. if (arrObj != "")
  339. {
  340. sJs.printf(L"addFacility(%d, '%s')", FLayerIdx, arrObj.c_str());
  341. FRAMEOpenMap1->ExecScript(sJs);
  342. }
  343. }
  344. }
  345. //---------------------------------------------------------------------------
  346. void __fastcall TPIS0010M::BtnEditClick(TObject *Sender)
  347. {
  348. String sId = EdNmbr->Text;
  349. TPrltCtlr *pObj = PrltCtlrManager->FLists.Find(sId);
  350. FNewDb = false;
  351. if (BtnEdit->Caption == FrmLang->lblEdit->Caption)//"편집")
  352. {
  353. //편집모드 시작
  354. ChangeEditMode(0);
  355. if (pObj)
  356. {
  357. //시설물아이콘을 편집아이콘으로 변경
  358. //function editFacilityObject(ALyrIdx, ANmbr, AComm(0:오류-편집,1:정상), AEdit(편집모드:1-편집,0-편집취소))
  359. sJs.printf(L"editFacilityObject(%d, %s, 1, 1)", FLayerIdx, pObj->PRLT_CTLR_NMBR.c_str());
  360. FRAMEOpenMap1->ExecScript(sJs);
  361. }
  362. }
  363. else
  364. {
  365. //편집모드 취소
  366. ChangeEditMode(1);
  367. if (pObj)
  368. {
  369. CMM_SetGridRow(FRAMEParkingList1->CxList, FRAMEParkingList1->TvList, sId, FRAMEParkingList1->Column01->Index);
  370. DisplayInfo(pObj, false);
  371. //추가 모드에서 취소하는 경우 지도에 신규로 추가한 객체를 찾아서 삭제해 주는것 보다
  372. //새롭게 다시 그리자
  373. UpdateIcon();
  374. }
  375. else
  376. {
  377. //객체가 없는 경우는 추가 모드에서 취소한 경우임
  378. sJs.printf(L"removeFacilityObject(%d, %s)", FLayerIdx, sId.c_str());
  379. FRAMEOpenMap1->ExecScript(sJs);
  380. }
  381. }
  382. }
  383. //---------------------------------------------------------------------------
  384. void __fastcall TPIS0010M::ChangeEditMode(int AEdit)
  385. {
  386. bool bEnabled = false;
  387. switch(AEdit)
  388. {
  389. case 0: //편집버튼클릭
  390. {
  391. BtnEdit->Enabled = true;
  392. BtnInsert->Enabled = false;
  393. BtnDelete->Enabled = false;
  394. BtnSave->Enabled = true;
  395. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  396. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  397. }
  398. break;
  399. case 1: //편집[취소]버튼클릭
  400. {
  401. FormInit(); //화면을 모두 지운다.
  402. BtnEdit->Enabled = false;
  403. BtnInsert->Enabled = true;
  404. BtnDelete->Enabled = false;
  405. BtnSave->Enabled = false;
  406. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  407. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  408. bEnabled = true;
  409. }
  410. break;
  411. case 2: //추가
  412. {
  413. BtnEdit->Enabled = true;
  414. BtnInsert->Enabled = false;
  415. BtnDelete->Enabled = false;
  416. BtnSave->Enabled = true;
  417. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  418. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  419. }
  420. break;
  421. case 3: //수정모드
  422. {
  423. BtnEdit->Enabled = true;
  424. BtnInsert->Enabled = true;
  425. BtnDelete->Enabled = true;
  426. BtnSave->Enabled = false;
  427. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  428. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  429. bEnabled = true;
  430. }
  431. break;
  432. }
  433. if (AEdit == 0 || AEdit == 2)
  434. {
  435. FRAMEParkingList1->CxList->Enabled = false;
  436. GrpInfo->Enabled = true;
  437. }
  438. else
  439. {
  440. FRAMEParkingList1->CxList->Enabled = true;
  441. GrpInfo->Enabled = false;
  442. }
  443. //PnlEdit->Enabled = EditMode;
  444. }
  445. //---------------------------------------------------------------------------
  446. void __fastcall TPIS0010M::BtnInsertClick(TObject *Sender)
  447. {
  448. FormInit();
  449. //신규아이디를 얻어와서 화면을 초기화한다.
  450. int nNmbr, nId;
  451. if (!PrltCtlrManager->GetNextPrltId(nNmbr, nId))
  452. {
  453. Application->MessageBox(L"새로운 주차장 정보를 생성하지 못하였습니다.\r\n프로그램 종료후에 다시 시도해 보세요.",
  454. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  455. return;
  456. }
  457. EdNmbr->Text = String(nNmbr);
  458. SePosX->Value = FRAMEOpenMap1->CenterX;
  459. SePosY->Value = FRAMEOpenMap1->CenterY;
  460. SePosX->Value = FRAMEOpenMap1->CenterX;
  461. SePosY->Value = FRAMEOpenMap1->CenterY;
  462. //지도에 새로운 시설물 아이콘 추가하면서 편집모드로 변경
  463. String arrObj = "";
  464. arrObj.printf(L"%d,New,New,%.6f,%.6f,0", nNmbr, FRAMEOpenMap1->CenterX, FRAMEOpenMap1->CenterY);
  465. sJs.printf(L"addFacilityObject(%d, '%s')", FLayerIdx, arrObj.c_str());
  466. FRAMEOpenMap1->ExecScript(sJs);
  467. ChangeEditMode(2);
  468. FNewDb = true;
  469. }
  470. //---------------------------------------------------------------------------
  471. void __fastcall TPIS0010M::BtnDeleteClick(TObject *Sender)
  472. {
  473. if (!FRAMEOpenMap1->MapStart) return;
  474. int nIdx = m_pGDC->FocusedRecordIndex;
  475. if (nIdx < 0) return;
  476. String sId = EdNmbr->Text;
  477. if (sId.IsEmpty())
  478. {
  479. Application->MessageBox(L"삭제할 주차장정보를 목록에서 선택하세요.\r\n목록에서 더블클릭하여 선택합니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  480. return;
  481. }
  482. String sMsg;
  483. sMsg = "ID: " + sId;
  484. sMsg+= "\r\n선택하신 주차장 정보를 삭제하시겠습니까?";
  485. if (Application->MessageBox(sMsg.c_str(), FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  486. TPrltCtlr *pObj = PrltCtlrManager->FLists.Find(sId);
  487. if (pObj)
  488. {
  489. if (PrltCtlrManager->DeletePrlt(pObj))
  490. {
  491. pObj->DEL_YN = "Y";
  492. FRAMEParkingList1->UpdateList();
  493. UpdateIcon();
  494. }
  495. Application->MessageBox(L"주차장 정보삭제\r\n주차장 정보를 삭제 하였습니다.",
  496. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  497. FormInit();
  498. ChangeEditMode(1);
  499. UpdateIcon();
  500. }
  501. }
  502. //---------------------------------------------------------------------------
  503. void __fastcall TPIS0010M::BtnSaveClick(TObject *Sender)
  504. {
  505. if (EdNmbr->Text.IsEmpty() ||
  506. EdPRLT_CTLR_ID->Text.Trim().IsEmpty() ||
  507. EdPRLT_NM->Text.Trim().IsEmpty() ||
  508. SePosX->Value == 0 ||
  509. SePosY->Value == 0 ||
  510. CbREAL_DATA_YN->ItemIndex < 0 )
  511. {
  512. Application->MessageBox(L"★항목은 필수 입력 항목입니다.\r\n모두 입력후 진행해 주세요.",
  513. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  514. return;
  515. }
  516. String sNmbr = EdNmbr->Text;
  517. int nNmbr = sNmbr.ToInt();
  518. String sId = EdPRLT_CTLR_ID->Text.Trim();
  519. if (CbREAL_DATA_YN->ItemIndex == 0 && !ITSUtil_CheckIpAddress(EdPRLT_CTLR_IP->Text.Trim()))
  520. {
  521. Application->MessageBox(L"제어기 IP가 유효하지 않습니다.",
  522. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  523. return;
  524. }
  525. PrltCtlrManager->FLists.Lock();
  526. FOR_STL(TPrltCtlr*, pTmpObj, PrltCtlrManager->FLists)
  527. {
  528. if (pTmpObj->DEL_YN == "Y") continue;
  529. if (pTmpObj->PRLT_CTLR_NMBR == sNmbr) continue; //자기자신
  530. if (pTmpObj->PRLT_CTLR_ID == sId)
  531. {
  532. Application->MessageBox(L"주차장 ID가 이미 사용 중입니다. 주차장 ID를 확인하세요.",
  533. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  534. return;
  535. }
  536. }
  537. PrltCtlrManager->FLists.UnLock();
  538. TPrltCtlr *pObj;
  539. if (FNewDb)
  540. pObj = new TPrltCtlr();
  541. else
  542. pObj = PrltCtlrManager->FLists.Find(sNmbr);
  543. if (pObj)
  544. {
  545. pObj->PRLT_CTLR_NMBR = sNmbr;
  546. pObj->PRLT_CTLR_ID = sId;
  547. pObj->PRLT_NM = EdPRLT_NM->Text.Trim();
  548. pObj->PRLT_CTLR_IP = EdPRLT_CTLR_IP->Text.Trim();
  549. pObj->CNGT_NPLS = SeCNGT_NPLS->Value;
  550. pObj->PRLT_CTLR_PORT = EdPRLT_CTLR_PORT->Text.Trim().ToIntDef(0);
  551. pObj->PRLT_CTLR_LOCAL_NO= 0;
  552. pObj->PRLT_OPER_DVSN_CD = APP_GetCode(CbPRLT_OPER_DVSN_CD);
  553. pObj->PRLT_TYPE_DVSN_CD = APP_GetCode(CbPRLT_TYPE_DVSN_CD);
  554. pObj->ISTL_LCTN_NM = EdISTL_LCTN_NM->Text.Trim();
  555. //pObj->VALD_YN = APP_GetCode(VALD_YN);
  556. pObj->X_CRDN = SePosX->Value;
  557. pObj->Y_CRDN = SePosY->Value;
  558. pObj->PRLT_TEL = EdPRLT_TEL->Text.Trim();
  559. pObj->ISTL_LCTN_ADDR = EdISTL_LCTN_ADDR->Text.Trim();
  560. pObj->WHOL_NPLS = SeWHOL_NPLS->Value;
  561. pObj->GNRL_NPLS = SeGNRL_NPLS->Value;
  562. pObj->LGVH_NPLS = SeLGVH_NPLS->Value;
  563. pObj->HVVH_NPLS = SeHVVH_NPLS->Value;
  564. pObj->EMVH_NPLS = SeEMVH_NPLS->Value;
  565. pObj->HNDC_NPLS = SeHNDC_NPLS->Value;
  566. pObj->WMON_NPLS = SeWMON_NPLS->Value;
  567. pObj->ELVH_NPLS = SeELVH_NPLS->Value;
  568. pObj->ETC_NPLS = SeETC_NPLS->Value;
  569. pObj->REAL_DATA_YN = APP_GetCode(CbREAL_DATA_YN);
  570. pObj->CTLR_CLCT_CYCL = SeCTLR_CLCT_CYCL->Value;
  571. pObj->CTLR_STTS_CYCL = SeCTLR_STTS_CYCL->Value;
  572. pObj->PRLT_CHARGE_DESC = MoPRLT_CHARGE_DESC->Lines->Text.Trim();
  573. pObj->PRLT_OPER_DESC = MoPRLT_OPER_DESC->Lines->Text.Trim();
  574. pObj->PRLT_ETC_DESC = MoPRLT_ETC_DESC->Lines->Text.Trim();
  575. pObj->DEL_YN = "N";
  576. pObj->Completed = true;
  577. pObj->MEM_DEL = "N";
  578. bool bResult;
  579. if (FNewDb)
  580. {
  581. bResult = PrltCtlrManager->InsertPrlt(pObj);
  582. if (bResult)
  583. {
  584. PrltCtlrManager->FLists.Push(sNmbr, pObj);
  585. }
  586. }
  587. else
  588. {
  589. bResult = PrltCtlrManager->UpdatePrlt(pObj);
  590. }
  591. if (bResult)
  592. {
  593. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"주차장 정보저장\r\n주차장 정보를 저장 하였습니다.",
  594. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  595. FUpdate = true;
  596. FRAMEParkingList1->UpdateList();
  597. UpdateIcon();
  598. CMM_SetGridRow(FRAMEParkingList1->CxList, FRAMEParkingList1->TvList, sNmbr, FRAMEParkingList1->Column01->Index);
  599. DisplayInfo(pObj, true);
  600. }
  601. }
  602. }
  603. //---------------------------------------------------------------------------
  604. void __fastcall TPIS0010M::FRAMEParkingList1TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  605. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  606. {
  607. if (!ACellViewInfo) return;
  608. int nRow = FRAMEParkingList1->TvList->DataController->FocusedRecordIndex;
  609. if( nRow <= -1 )
  610. return;
  611. int nMemPtr = FRAMEParkingList1->TvList->DataController->Values[nRow][FRAMEParkingList1->Column99->Index];
  612. TPrltCtlr* pObj = (TPrltCtlr*)nMemPtr;
  613. DisplayInfo(pObj, true);
  614. }
  615. //---------------------------------------------------------------------------
  616. void __fastcall TPIS0010M::EdPRLT_CTLR_PORTKeyPress(TObject *Sender, wchar_t &Key)
  617. {
  618. if (Key > '9' || Key < '0')
  619. {
  620. if (Key != VK_BACK && Key != VK_TAB && Key != '-')
  621. Key = 0;
  622. }
  623. }
  624. //---------------------------------------------------------------------------
  625. void __fastcall TPIS0010M::OpenMapCallback(TObject *ASender, const String AFunc, const String AArgs, const bool AFirst)
  626. {
  627. try
  628. {
  629. if (AFirst)
  630. {
  631. //지도를 편집모드로 변경
  632. sJs.printf(L"setEditMode(%d, 1)", FLayerIdx);
  633. FRAMEOpenMap1->ExecScript(sJs);
  634. //시설물아이콘 등록
  635. UpdateIcon();
  636. sJs.printf(L"extentLayer(%d)", FLayerIdx);
  637. FRAMEOpenMap1->ExecScript(sJs);
  638. return;
  639. }
  640. if (AFunc.Pos("onfacilitydragend"))
  641. {
  642. TStringList *pStringList = new TStringList;
  643. pStringList->CommaText = AArgs;
  644. try
  645. {
  646. String sNmbr = pStringList->Strings[0];
  647. String sCenterLat = pStringList->Strings[1];
  648. String sCenterLng = pStringList->Strings[2];
  649. SePosX->Value = sCenterLat.ToDouble();
  650. SePosY->Value = sCenterLng.ToDouble();
  651. }
  652. catch(Exception &e)
  653. {
  654. }
  655. delete pStringList;
  656. }
  657. }
  658. catch(Exception &exception)
  659. {
  660. }
  661. }
  662. //---------------------------------------------------------------------------
  663. void __fastcall TPIS0010M::BtnListDeleteClick(TObject *Sender)
  664. {
  665. int nSelRows = TvLink->Controller->SelectedRowCount;
  666. if (nSelRows <= 0)
  667. {
  668. Application->MessageBox(L"삭제를 원하는 주차장 층을 목록에서 선택하세요.",
  669. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  670. return;
  671. }
  672. TvLink->Controller->DeleteSelection();
  673. }
  674. //---------------------------------------------------------------------------
  675. bool __fastcall TPIS0010M::FindParkingFloor(String ANmbr)
  676. {
  677. try {
  678. TvLink->BeginUpdate();
  679. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  680. {
  681. String sNmbr = VarToStr(TvLink->DataController->Values[ii][ColLink2->Index]);
  682. if (sNmbr == "") continue;
  683. if (sNmbr == ANmbr) return true;
  684. }
  685. }
  686. __finally
  687. {
  688. TvLink->EndUpdate();
  689. }
  690. return false;
  691. }
  692. //---------------------------------------------------------------------------
  693. void __fastcall TPIS0010M::BtnListAddClick(TObject *Sender)
  694. {
  695. String sId = InputBox("층번호", "신규 주차장 층번호를 입력하세요(최대 20Byte).", "층번호" );
  696. sId = sId.Trim();
  697. if (sId == "층번호" || sId == "")
  698. {
  699. return;
  700. }
  701. if (AnsiString(sId).Length() > 20)
  702. {
  703. Application->MessageBox(L"주차장 층번호는 20Byte를 초과할 수 없습니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  704. return;
  705. }
  706. if (FindParkingFloor(sId))
  707. {
  708. Application->MessageBox(L"이미 등록되어 있는 층번호 입니다.", FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  709. return;
  710. }
  711. int nRow = TvLink->DataController->AppendRecord();
  712. TvLink->DataController->Values[nRow][ColLink2->Index] = sId;
  713. }
  714. //---------------------------------------------------------------------------