VMSM210MF.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. /****************************************************************************
  2. * @source :
  3. * @description :
  4. ****************************************************************************
  5. * DATE AUTHOR DESCRIPTION
  6. * --------------------------------------------------------------------------
  7. * 2016/07/10 shjung 최초작성
  8. *
  9. ****************************************************************************/
  10. //---------------------------------------------------------------------------
  11. #include <vcl.h>
  12. #include "ITSSkinF.h"
  13. #include "ITSUtilF.h"
  14. #include "AppGlobalF.h"
  15. #pragma hdrstop
  16. #include "VMSM210MF.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma link "cxButtons"
  20. #pragma link "cxCalendar"
  21. #pragma link "cxContainer"
  22. #pragma link "cxControls"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGroupBox"
  27. #pragma link "cxLabel"
  28. #pragma link "cxLookAndFeelPainters"
  29. #pragma link "cxLookAndFeels"
  30. #pragma link "cxMaskEdit"
  31. #pragma link "cxPC"
  32. #pragma link "cxPCdxBarPopupMenu"
  33. #pragma link "cxSpinEdit"
  34. #pragma link "cxSplitter"
  35. #pragma link "cxTextEdit"
  36. #pragma link "cxTimeEdit"
  37. #pragma link "dxSkinBlack"
  38. #pragma link "dxSkinBlue"
  39. #pragma link "dxSkinCaramel"
  40. #pragma link "dxSkinCoffee"
  41. #pragma link "dxSkinDarkRoom"
  42. #pragma link "dxSkinDarkSide"
  43. #pragma link "dxSkinFoggy"
  44. #pragma link "dxSkinGlassOceans"
  45. #pragma link "dxSkiniMaginary"
  46. #pragma link "dxSkinLilian"
  47. #pragma link "dxSkinLiquidSky"
  48. #pragma link "dxSkinLondonLiquidSky"
  49. #pragma link "dxSkinMcSkin"
  50. #pragma link "dxSkinMoneyTwins"
  51. #pragma link "dxSkinOffice2007Black"
  52. #pragma link "dxSkinOffice2007Blue"
  53. #pragma link "dxSkinOffice2007Green"
  54. #pragma link "dxSkinOffice2007Pink"
  55. #pragma link "dxSkinOffice2007Silver"
  56. #pragma link "dxSkinOffice2010Black"
  57. #pragma link "dxSkinOffice2010Blue"
  58. #pragma link "dxSkinOffice2010Silver"
  59. #pragma link "dxSkinsCore"
  60. #pragma link "dxSkinscxPCPainter"
  61. #pragma link "dxSkinSeven"
  62. #pragma link "dxSkinSharp"
  63. #pragma link "dxSkinSilver"
  64. #pragma link "dxSkinStardust"
  65. #pragma link "cxRadioGroup"
  66. #pragma link "cxClasses"
  67. #pragma link "cxCustomData"
  68. #pragma link "cxData"
  69. #pragma link "cxDataStorage"
  70. #pragma link "cxDBData"
  71. #pragma link "cxFilter"
  72. #pragma link "cxGrid"
  73. #pragma link "cxGridCustomTableView"
  74. #pragma link "cxGridCustomView"
  75. #pragma link "cxGridDBTableView"
  76. #pragma link "cxGridLevel"
  77. #pragma link "cxGridTableView"
  78. #pragma link "cxStyles"
  79. #pragma link "cxCheckBox"
  80. #pragma link "FRAME_FlashMapF"
  81. #pragma link "FRAME_VmsIfscListF"
  82. #pragma resource "*.dfm"
  83. TVMSM210M *VMSM210M = NULL;
  84. //---------------------------------------------------------------------------
  85. __fastcall TVMSM210M::TVMSM210M(TComponent* Owner)
  86. : TForm(Owner)
  87. {
  88. ITSSkin_Load(this);
  89. CMM_LoadForm(g_sFormsDir, this);
  90. FUpdate= false;
  91. FTitle = "VMS 정보제공구간 설정";
  92. //FRAMEVmsList1->Column02->Visible = false;
  93. FRAMEVmsList1->PnlTop->Visible = false;
  94. FRAMEVmsList1->PnlBottom->Visible = false;
  95. FRAMEVmsList1->ColumnSel->Visible = false;
  96. FRAMEVmsIfscList1->PnlTop->Visible = false;
  97. FRAMEVmsIfscList1->PnlBottom->Visible = false;
  98. FRAMEVmsIfscList1->ColumnSel->Visible = false;
  99. FRAMEVmsIfscList1->TvList->OptionsSelection->MultiSelect = true;
  100. FRAMEVmsIfscList1->TvList->OptionsSelection->CellSelect = false;
  101. m_pGDC = FRAMEVmsList1->TvList->DataController;
  102. EditMode = false;
  103. }
  104. //---------------------------------------------------------------------------
  105. /*
  106. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  107. * Form과 DataModule class를 delete시킨다.
  108. * arguments
  109. *
  110. * return
  111. * void
  112. */
  113. void __fastcall TVMSM210M::CommClose()
  114. {
  115. try
  116. {
  117. CMM_SaveForm(g_sFormsDir, this);
  118. }
  119. catch(...)
  120. {
  121. }
  122. }
  123. //---------------------------------------------------------------------------
  124. /*
  125. * Form을 보여줄때 호출되는 event 메서드이다.
  126. * arguments
  127. * Sender : event handler 객체
  128. * return
  129. * void
  130. */
  131. void __fastcall TVMSM210M::FormShow(TObject *Sender)
  132. {
  133. Refresh();
  134. FormInit();
  135. ChangeEditMode(1);
  136. TmrShow->Enabled = true;
  137. }
  138. //---------------------------------------------------------------------------
  139. /*
  140. * form 초기화
  141. *
  142. * arguments
  143. *
  144. * return
  145. * void
  146. */
  147. void __fastcall TVMSM210M::FormInit()
  148. {
  149. EdNmbr->Text = "";
  150. EdId->Text = "";
  151. CMM_ClearGridTableView(TvLink);
  152. FNewDb = false;
  153. }
  154. //---------------------------------------------------------------------------
  155. /*
  156. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  157. * arguments
  158. * Sender : event handler 객체
  159. * return
  160. * void
  161. */
  162. void __fastcall TVMSM210M::TmrShowTimer(TObject *Sender)
  163. {
  164. TmrShow->Enabled = false;
  165. FRAMEVmsList1->UpdateList();
  166. FRAMEVmsIfscList1->UpdateList();
  167. }
  168. //---------------------------------------------------------------------------
  169. /*
  170. * Close 버튼 클릭 이벤트 핸들러
  171. * arguments
  172. * Sender : event handler 객체
  173. * return
  174. * void
  175. */
  176. void __fastcall TVMSM210M::BtnCloseClick(TObject *Sender)
  177. {
  178. Close();
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TVMSM210M::FormClose(TObject *Sender, TCloseAction &Action)
  182. {
  183. CommClose();
  184. VMSM210M = NULL;
  185. Action = caFree;
  186. }
  187. //---------------------------------------------------------------------------
  188. void __fastcall TVMSM210M::FormCloseQuery(TObject *Sender, bool &CanClose)
  189. {
  190. if (FUpdate)
  191. {
  192. VComm_VmsIfscUpdate();
  193. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  194. }
  195. FRAMEVmsList1->OnCloseQuery(CanClose);
  196. }
  197. //---------------------------------------------------------------------------
  198. void __fastcall TVMSM210M::DisplayInfo(TVmsCtlr* AObj)
  199. {
  200. FormInit();
  201. if (!AObj) return;
  202. EdNmbr->Text = String(AObj->VMS_CTLR_NMBR);
  203. EdId->Text = AObj->VMS_ID;
  204. try
  205. {
  206. int nRow;
  207. TcxDataController *pGDC = TvLink->DataController;
  208. TvLink->BeginUpdate();
  209. int ii = 0;
  210. FOR_STL(TVmsIfscRltn *, pObj, AObj->FIfscRltn)
  211. {
  212. nRow = pGDC->AppendRecord();
  213. pGDC->Values[nRow][ColLink1->Index] = String(ii+1);
  214. pGDC->Values[nRow][ColLink2->Index] = String(pObj->VMS_IFSC_ID);
  215. TVmsIfsc *pIfsc = VmsIfscManager->FLists.Find(pObj->VMS_IFSC_ID);
  216. if (pIfsc)
  217. pGDC->Values[nRow][ColLink3->Index] = pIfsc->VMS_IFSC_NM;
  218. else
  219. pGDC->Values[nRow][ColLink3->Index] = "-???-";
  220. ii++;
  221. }
  222. }
  223. __finally
  224. {
  225. TvLink->EndUpdate();
  226. }
  227. ChangeEditMode(3);
  228. }
  229. //---------------------------------------------------------------------------
  230. void __fastcall TVMSM210M::BtnEditClick(TObject *Sender)
  231. {
  232. if (BtnEdit->Caption == MSG903)
  233. {
  234. ChangeEditMode(0);
  235. FNewDb = false;
  236. }
  237. else
  238. {
  239. String sId = EdId->Text;
  240. ChangeEditMode(1);
  241. TVmsCtlr *pObj = VmsManager->FLists.Find(sId);
  242. if (pObj)
  243. {
  244. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  245. DisplayInfo(pObj);
  246. }
  247. }
  248. }
  249. //---------------------------------------------------------------------------
  250. void __fastcall TVMSM210M::ChangeEditMode(int AEdit)
  251. {
  252. bool bEnabled = false;
  253. switch(AEdit)
  254. {
  255. case 0: //편집버튼클릭
  256. {
  257. BtnEdit->Enabled = true;
  258. BtnInsert->Enabled = false;
  259. BtnDelete->Enabled = false;
  260. PnlCmd->Enabled = true;
  261. BtnSave->Enabled = true;
  262. BtnEdit->Caption = MSG901;
  263. BtnEdit->Hint = MSG902;
  264. EditMode = true;
  265. }
  266. break;
  267. case 1: //편집[취소]버튼클릭
  268. {
  269. FormInit(); //화면을 모두 지운다.
  270. BtnEdit->Enabled = false;
  271. BtnInsert->Enabled = true;
  272. BtnDelete->Enabled = false;
  273. PnlCmd->Enabled = false;
  274. BtnSave->Enabled = false;
  275. BtnEdit->Caption = MSG903;
  276. BtnEdit->Hint = MSG904;
  277. //bEnabled = true;
  278. EditMode = false;
  279. }
  280. break;
  281. case 2: //추가
  282. {
  283. BtnEdit->Enabled = true;
  284. BtnInsert->Enabled = false;
  285. BtnDelete->Enabled = false;
  286. PnlCmd->Enabled = false;
  287. BtnSave->Enabled = true;
  288. BtnEdit->Caption = MSG901;
  289. BtnEdit->Hint = MSG902;
  290. EditMode = true;
  291. }
  292. break;
  293. case 3: //수정모드
  294. {
  295. BtnEdit->Enabled = true;
  296. BtnInsert->Enabled = true;
  297. BtnDelete->Enabled = true;
  298. PnlCmd->Enabled = true;
  299. BtnSave->Enabled = false;
  300. BtnEdit->Caption = MSG903;
  301. BtnEdit->Hint = MSG904;
  302. bEnabled = true;
  303. EditMode = false;
  304. }
  305. break;
  306. }
  307. if (AEdit == 0 || AEdit == 2)
  308. {
  309. FRAMEVmsList1->CxList->Enabled = false;
  310. PnlCmd->Enabled = true;
  311. }
  312. else
  313. {
  314. FRAMEVmsList1->CxList->Enabled = true;
  315. PnlCmd->Enabled = false;
  316. }
  317. //PnlEdit->Enabled = EditMode;
  318. }
  319. //---------------------------------------------------------------------------
  320. void __fastcall TVMSM210M::BtnSaveClick(TObject *Sender)
  321. {
  322. String sNmbr = EdNmbr->Text;
  323. String sId = EdId->Text;
  324. int nNmbr = sNmbr.ToInt();
  325. TVmsCtlr *pVms;
  326. pVms = VmsManager->FLists.Find(sNmbr);
  327. if (!pVms) return;
  328. int nOrgCnt = pVms->FIfscRltn.Size();
  329. int nSrcCnt = TvLink->DataController->RecordCount;
  330. if (nOrgCnt == 0 && nSrcCnt == 0)
  331. {
  332. Application->MessageBox(L"VMS정보제공구간 설정\r\n저장할 데이터가 없습니다.",
  333. FTitle.c_str(), MB_OK|MB_ICONERROR|MB_APPLMODAL);
  334. return;
  335. }
  336. if (Application->MessageBox(L"VMS정보제공구간 설정\r\nVMS정보제공구간 설정 정보를 저장하시겠습니까?.", FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES) return;
  337. bool bResult = false;
  338. try
  339. {
  340. pVms->FIfscRltn.RemoveAll();
  341. try {
  342. TvLink->BeginUpdate();
  343. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  344. {
  345. String sIfscId = VarToStr(TvLink->DataController->Values[ii][ColLink2->Index]);
  346. TVmsIfscRltn *pObj = new TVmsIfscRltn();
  347. if (pObj)
  348. {
  349. pObj->VMS_CTLR_NMBR = pVms->VMS_CTLR_NMBR;
  350. pObj->VMS_IFSC_ID = sIfscId.ToInt();
  351. pObj->DSPL_PRRT = ii+1;
  352. pVms->FIfscRltn.Push(pObj->DSPL_PRRT, pObj);
  353. }
  354. }
  355. }
  356. __finally
  357. {
  358. TvLink->EndUpdate();
  359. }
  360. bResult = VmsManager->SaveIfscRltn(pVms);
  361. }
  362. catch(Exception &e)
  363. {
  364. throw Exception(String(e.ClassName()) + e.Message);
  365. }
  366. if (bResult)
  367. {
  368. Application->MessageBox(L"VMS정보제공구간 설정 정보저장\r\nVMS정보제공구간 설정 정보를 저장 하였습니다.",
  369. FTitle.c_str(), MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
  370. FUpdate = true;
  371. CMM_SetGridRow(FRAMEVmsList1->CxList, FRAMEVmsList1->TvList, sId, FRAMEVmsList1->Column01->Index);
  372. DisplayInfo(pVms);
  373. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_14, 0);
  374. }
  375. }
  376. //---------------------------------------------------------------------------
  377. void __fastcall TVMSM210M::FRAMEVmsList1TvListCellDblClick(TcxCustomGridTableView *Sender,
  378. TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  379. TShiftState AShift, bool &AHandled)
  380. {
  381. if (!ACellViewInfo) return;
  382. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  383. if( nRow <= -1 )
  384. return;
  385. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  386. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  387. DisplayInfo(pObj);
  388. }
  389. //---------------------------------------------------------------------------
  390. void __fastcall TVMSM210M::UpdateIfscRltnSeq()
  391. {
  392. try {
  393. TvLink->BeginUpdate();
  394. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  395. {
  396. TvLink->DataController->Values[ii][ColLink1->Index] = String(ii+1);
  397. }
  398. }
  399. __finally
  400. {
  401. TvLink->EndUpdate();
  402. }
  403. }
  404. //---------------------------------------------------------------------------
  405. bool __fastcall TVMSM210M::FindIfscRltnInfo(String AIfscId)
  406. {
  407. try {
  408. TvLink->BeginUpdate();
  409. for (int ii = 0; ii < TvLink->DataController->RecordCount; ii++)
  410. {
  411. String sIfscId = VarToStr(TvLink->DataController->Values[ii][ColLink2->Index]);
  412. if (sIfscId == AIfscId) return true;
  413. }
  414. }
  415. __finally
  416. {
  417. TvLink->EndUpdate();
  418. }
  419. return false;
  420. }
  421. //---------------------------------------------------------------------------
  422. void __fastcall TVMSM210M::BtnListAddClick(TObject *Sender)
  423. {
  424. TcxGridTableView *pSrcList = FRAMEVmsIfscList1->TvList;
  425. TcxGridTableView *pDstList = TvLink;
  426. int nSelRows = pSrcList->Controller->SelectedRowCount;
  427. if (nSelRows <= 0)
  428. {
  429. return;
  430. }
  431. try
  432. {
  433. TcxGridDataController *pGDC = pDstList->DataController;
  434. try
  435. {
  436. for (int ii = 0; ii < nSelRows; ii++)
  437. {
  438. int nSelIdx = pSrcList->Controller->SelectedRows[ii]->RecordIndex;
  439. String sIfscId = VarToStr(pSrcList->DataController->Values[nSelIdx][FRAMEVmsIfscList1->Column01->Index]);
  440. String sIfscNm = VarToStr(pSrcList->DataController->Values[nSelIdx][FRAMEVmsIfscList1->Column02->Index]);
  441. if (FindIfscRltnInfo(sIfscId)) continue;
  442. int nRow = pGDC->AppendRecord();
  443. pGDC->Values[nRow][ColLink2->Index] = sIfscId;
  444. pGDC->Values[nRow][ColLink3->Index] = sIfscNm;
  445. }
  446. }
  447. catch(...)
  448. {
  449. }
  450. }
  451. __finally
  452. {
  453. UpdateIfscRltnSeq();
  454. }
  455. }
  456. //---------------------------------------------------------------------------
  457. void __fastcall TVMSM210M::BtnListDeleteClick(TObject *Sender)
  458. {
  459. TcxGridTableView *pSrcList = TvLink;
  460. int nFocused = pSrcList->Controller->FocusedRecordIndex;
  461. int nSelRows = pSrcList->Controller->SelectedRowCount;
  462. if (nSelRows <= 0)
  463. {
  464. return;
  465. }
  466. try
  467. {
  468. TcxGridDataController *pGDC = pSrcList->DataController;
  469. pSrcList->BeginUpdate();
  470. try
  471. {
  472. pSrcList->Controller->DeleteSelection();
  473. int nDataCnt = pSrcList->DataController->RecordCount;
  474. if (nDataCnt <= nFocused)
  475. nFocused = nDataCnt - 1;
  476. pSrcList->Controller->ClearSelection();
  477. if (nFocused >= 0)
  478. {
  479. pSrcList->Controller->FocusedRowIndex = nFocused;
  480. pSrcList->ViewData->Records[nFocused]->Focused = true;
  481. pSrcList->ViewData->Records[nFocused]->Selected = true;
  482. }
  483. //CxLink->SetFocus();
  484. }
  485. catch(...)
  486. {
  487. }
  488. }
  489. __finally
  490. {
  491. pSrcList->EndUpdate();
  492. UpdateIfscRltnSeq();
  493. }
  494. }
  495. //---------------------------------------------------------------------------
  496. void __fastcall TVMSM210M::FRAMEVmsList1TvListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  497. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  498. bool ANewItemRecordFocusingChanged)
  499. {
  500. if (!AFocusedRecord) return;
  501. int nRow = FRAMEVmsList1->TvList->DataController->FocusedRecordIndex;
  502. if( nRow <= -1 )
  503. return;
  504. int nMemPtr = FRAMEVmsList1->TvList->DataController->Values[nRow][FRAMEVmsList1->Column99->Index];
  505. TVmsCtlr* pObj = (TVmsCtlr*)nMemPtr;
  506. DisplayInfo(pObj);
  507. }
  508. //---------------------------------------------------------------------------