PIS0010MF.cpp 25 KB

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