IDB0020MF.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "CDSNodeF.h"
  8. #include "ITSLangTransF.h"
  9. #pragma hdrstop
  10. #include "IDB0020MF.h"
  11. #include "IDB00201F.h"
  12. //---------------------------------------------------------------------------
  13. #pragma package(smart_init)
  14. #pragma link "cxButtons"
  15. #pragma link "cxCalc"
  16. #pragma link "cxCheckBox"
  17. #pragma link "cxClasses"
  18. #pragma link "cxContainer"
  19. #pragma link "cxControls"
  20. #pragma link "cxCustomData"
  21. #pragma link "cxData"
  22. #pragma link "cxDataStorage"
  23. #pragma link "cxDropDownEdit"
  24. #pragma link "cxEdit"
  25. #pragma link "cxFilter"
  26. #pragma link "cxGraphics"
  27. #pragma link "cxGrid"
  28. #pragma link "cxGridCustomTableView"
  29. #pragma link "cxGridCustomView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxMaskEdit"
  36. #pragma link "cxStyles"
  37. #pragma link "cxTextEdit"
  38. #pragma link "dxSkinBlack"
  39. #pragma link "dxSkinBlue"
  40. #pragma link "dxSkinsCore"
  41. #pragma link "dxSkinscxPCPainter"
  42. #pragma resource "*.dfm"
  43. TIDB0020M *IDB0020M = NULL;
  44. //---------------------------------------------------------------------------
  45. __fastcall TIDB0020M::TIDB0020M(TComponent* Owner)
  46. : TForm(Owner)
  47. {
  48. LangTrans->Translate(this, ITSDb_GetConnection());
  49. ITSSkin_Load(this);
  50. CMM_LoadForm(g_sFormsDir, this);
  51. }
  52. //---------------------------------------------------------------------------
  53. /*
  54. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  55. * Form과 DataModule class를 delete시킨다.
  56. * arguments
  57. *
  58. * return
  59. * void
  60. */
  61. void __fastcall TIDB0020M::CommClose()
  62. {
  63. try
  64. {
  65. CMM_SaveForm(g_sFormsDir, this);
  66. }
  67. catch(...)
  68. {
  69. }
  70. }
  71. //---------------------------------------------------------------------------
  72. /*
  73. * form 초기화
  74. *
  75. * arguments
  76. *
  77. * return
  78. * void
  79. */
  80. void __fastcall TIDB0020M::FormInit()
  81. {
  82. m_pGDC = TvList->DataController;
  83. TvList->OptionsView->NoDataToDisplayInfoText = lblNoInfo->Caption;//"<링크 정보가 없습니다>";
  84. FCodeRDU = ItsCodeManager->FLists.Find("RDU"); // 도로사용여부
  85. FCodeRDR = ItsCodeManager->FLists.Find("RDR"); // 도로등급
  86. FCodeRDT = ItsCodeManager->FLists.Find("RDT"); // 도로유형
  87. FCodeMLT = ItsCodeManager->FLists.Find("MLT"); // 중용구간
  88. FCodeCTR = ItsCodeManager->FLists.Find("CTR"); // 연결로
  89. FCodePLV = ItsCodeManager->FLists.Find("PLV"); // 통행제한차량
  90. }
  91. //---------------------------------------------------------------------------
  92. /*
  93. * Form을 보여줄때 호출되는 event 메서드이다.
  94. * arguments
  95. * Sender : event handler 객체
  96. * return
  97. * void
  98. */
  99. void __fastcall TIDB0020M::FormShow(TObject *Sender)
  100. {
  101. Refresh();
  102. FormInit();
  103. TmrShow->Enabled = true;
  104. }
  105. //---------------------------------------------------------------------------
  106. /*
  107. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  108. * arguments
  109. * Sender : event handler 객체
  110. * return
  111. * void
  112. */
  113. void __fastcall TIDB0020M::TmrShowTimer(TObject *Sender)
  114. {
  115. TmrShow->Enabled = false;
  116. BtnSearchClick((TObject*)BtnSearch);
  117. }
  118. //---------------------------------------------------------------------------
  119. /*
  120. * Refresh Data Event Function
  121. * arguments
  122. *
  123. * return
  124. * void
  125. */
  126. void __fastcall TIDB0020M::RefreshData()
  127. {
  128. SelListData();
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TIDB0020M::SelListData()
  132. {
  133. TItsNode *pNode;
  134. TItsSubCode *pSubCode;
  135. CMM_ClearGridTableView(TvList);
  136. int nRow = 0;
  137. try
  138. {
  139. TvList->BeginUpdate();
  140. try
  141. {
  142. ItsLinkManager->FLists.Lock();
  143. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  144. {
  145. if (pLink->REGN_YN == "Y" || ChkDispExt->Checked == true)
  146. {
  147. nRow = m_pGDC->AppendRecord();
  148. m_pGDC->Values[nRow][Column00->Index] = pLink->LINK_ID;
  149. m_pGDC->Values[nRow][Column01->Index] = pLink->LINK_ID;
  150. String sFNodeName = "[" + pLink->F_NODEID + "] ";
  151. pNode = ItsNodeManager->FLists.Find(pLink->F_NODEID);
  152. if (pNode) sFNodeName = sFNodeName + pNode->NODE_NAME;
  153. String sTNodeName = "[" + pLink->T_NODEID + "] ";
  154. pNode = ItsNodeManager->FLists.Find(pLink->T_NODEID);
  155. if (pNode) sTNodeName = sTNodeName + pNode->NODE_NAME;
  156. m_pGDC->Values[nRow][Column02->Index] = sFNodeName; //'시작노드ID';
  157. m_pGDC->Values[nRow][Column03->Index] = sTNodeName; //'종료노드ID';
  158. String sRDU = "[" + pLink->ROAD_USE + "] ";
  159. if (FCodeRDU)
  160. {
  161. pSubCode = FCodeRDU->FSubLists.Find(pLink->ROAD_USE);
  162. if (pSubCode) sRDU = sRDU + pSubCode->CMMN_CD_KOR_NM;
  163. }
  164. m_pGDC->Values[nRow][Column04->Index] = sRDU; //'도로사용여부';
  165. m_pGDC->Values[nRow][Column05->Index] = pLink->LANES; //'차로수';
  166. String sRDR = "[" + pLink->ROAD_RANK + "] ";
  167. if (FCodeRDR)
  168. {
  169. pSubCode = FCodeRDR->FSubLists.Find(pLink->ROAD_RANK);
  170. if (pSubCode) sRDR = sRDR + pSubCode->CMMN_CD_KOR_NM;
  171. }
  172. m_pGDC->Values[nRow][Column06->Index] = sRDR; //'도로등급';
  173. String sRDT = "[" + pLink->ROAD_TYPE + "] ";
  174. if (FCodeRDT)
  175. {
  176. pSubCode = FCodeRDT->FSubLists.Find(pLink->ROAD_TYPE);
  177. if (pSubCode) sRDT = sRDT + pSubCode->CMMN_CD_KOR_NM;
  178. }
  179. m_pGDC->Values[nRow][Column07->Index] = sRDT; //'도로유형';
  180. m_pGDC->Values[nRow][Column08->Index] = pLink->ROAD_NO; //'도로번호';
  181. m_pGDC->Values[nRow][Column09->Index] = pLink->ROAD_NAME; //'도로명';
  182. String sMLT = "[" + pLink->MULTI_LINK + "] ";
  183. if (FCodeMLT)
  184. {
  185. pSubCode = FCodeMLT->FSubLists.Find(pLink->MULTI_LINK);
  186. if (pSubCode) sMLT = sMLT + pSubCode->CMMN_CD_KOR_NM;
  187. }
  188. m_pGDC->Values[nRow][Column10->Index] = sMLT; //'중용구간여부';
  189. String sCTR = "[" + pLink->LINK_CONNECT + "] ";
  190. if (FCodeCTR)
  191. {
  192. pSubCode = FCodeCTR->FSubLists.Find(pLink->LINK_CONNECT);
  193. if (pSubCode) sCTR = sCTR + pSubCode->CMMN_CD_KOR_NM;
  194. }
  195. m_pGDC->Values[nRow][Column11->Index] = sCTR; //'연결로코드';
  196. m_pGDC->Values[nRow][Column12->Index] = pLink->MAX_SPD; //'최고제한속도';
  197. String sPLV = "[" + pLink->REST_VEH + "] ";
  198. if (FCodePLV)
  199. {
  200. pSubCode = FCodePLV->FSubLists.Find(pLink->REST_VEH);
  201. if (pSubCode) sPLV = sPLV + pSubCode->CMMN_CD_KOR_NM;
  202. }
  203. m_pGDC->Values[nRow][Column13->Index] = sPLV; //'통행제한차량';
  204. m_pGDC->Values[nRow][Column14->Index] = pLink->REST_W; //'통과제한하중';
  205. m_pGDC->Values[nRow][Column15->Index] = pLink->REST_H; //'통과제한높이';
  206. m_pGDC->Values[nRow][Column16->Index] = pLink->LINK_LENG; //'연장';
  207. m_pGDC->Values[nRow][Column17->Index] = pLink->RMRK; //'비고';
  208. //m_pGDC->Values[nRow][Column02->Index] = pLink->DEL_YN; //'삭제 여부';
  209. //m_pGDC->Values[nRow][Column02->Index] = pLink->DFLT_SPED; //'디폴트 속도';
  210. //m_pGDC->Values[nRow][Column02->Index] = pLink->DFLT_SPED_USE_YN; //'디폴트 속도 사용 여부';
  211. //m_pGDC->Values[nRow][Column02->Index] = pLink->SECT_GRAD_CD; //'구간 등급 코드';
  212. //m_pGDC->Values[nRow][Column02->Index] = pLink->AREA_CD; //'지역 코드';
  213. m_pGDC->Values[nRow][Column18->Index] = (int)pLink;
  214. }
  215. }
  216. }
  217. __finally
  218. {
  219. ItsLinkManager->FLists.UnLock();
  220. }
  221. }
  222. __finally
  223. {
  224. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  225. TvList->EndUpdate();
  226. TvList->DataController->GotoFirst();
  227. TvList->DataController->FocusedRecordIndex = 0;
  228. CxList->SetFocus();
  229. }
  230. }
  231. //---------------------------------------------------------------------------
  232. /*
  233. * Search 버튼 클릭 이벤트 핸들러
  234. * arguments
  235. * Sender : event handler 객체
  236. * return
  237. * void
  238. */
  239. void __fastcall TIDB0020M::BtnSearchClick(TObject *Sender)
  240. {
  241. Application->ProcessMessages();
  242. TSqlCursor sqlCrs((TControl*)BtnSearch);
  243. RefreshData();
  244. CxList->SetFocus();
  245. }
  246. //---------------------------------------------------------------------------
  247. /*
  248. * Close 버튼 클릭 이벤트 핸들러
  249. * arguments
  250. * Sender : event handler 객체
  251. * return
  252. * void
  253. */
  254. void __fastcall TIDB0020M::BtnCloseClick(TObject *Sender)
  255. {
  256. Close();
  257. }
  258. //---------------------------------------------------------------------------
  259. void __fastcall TIDB0020M::ChkExpandClick(TObject *Sender)
  260. {
  261. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  262. }
  263. //---------------------------------------------------------------------------
  264. /*
  265. * 저장 버튼 클릭 이벤트 핸들러
  266. * arguments
  267. * Sender : event handler 객체
  268. * return
  269. * void
  270. */
  271. void __fastcall TIDB0020M::BtnExlSaveClick(TObject *Sender)
  272. {
  273. TcxGrid *pGrid = CxList;
  274. TcxGridTableView *pView = TvList;
  275. String sTitle= lblInfo->Caption;//"링크정보";
  276. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  277. }
  278. //---------------------------------------------------------------------------
  279. /*
  280. * 취소 버튼 클릭 이벤트 핸들러
  281. * arguments
  282. * Sender : event handler 객체
  283. * return
  284. * void
  285. */
  286. void __fastcall TIDB0020M::BtnCancelClick(TObject *Sender)
  287. {
  288. //
  289. }
  290. //---------------------------------------------------------------------------
  291. /*
  292. * 등록 버튼 클릭 이벤트 핸들러
  293. * arguments
  294. * Sender : event handler 객체
  295. * return
  296. * void
  297. */
  298. void __fastcall TIDB0020M::BtnInsertClick(TObject *Sender)
  299. {
  300. //
  301. }
  302. //---------------------------------------------------------------------------
  303. /*
  304. * 수정 버튼 클릭 이벤트 핸들러
  305. * arguments
  306. * Sender : event handler 객체
  307. * return
  308. * void
  309. */
  310. void __fastcall TIDB0020M::BtnEditClick(TObject *Sender)
  311. {
  312. if (TvList->ViewData->RecordCount <= 0) return;
  313. int nRow = m_pGDC->FocusedRecordIndex;
  314. if( nRow < 0 )
  315. return;
  316. String sId = m_pGDC->Values[nRow][Column01->Index]; //ID
  317. String sNm = m_pGDC->Values[nRow][Column09->Index]; //도로명
  318. try {
  319. TIDB00201 *pDlg = new TIDB00201(this);
  320. pDlg->EdId->Text = sId;
  321. pDlg->EdNm->Text = sNm;
  322. pDlg->ShowModal();
  323. if (pDlg->FUpdated)
  324. {
  325. sNm = pDlg->EdNm->Text.Trim();
  326. m_pGDC->Values[nRow][Column09->Index] = sNm;
  327. int nMemPtr = m_pGDC->Values[nRow][Column18->Index];
  328. TItsLink *pObj = (TItsLink*)nMemPtr;
  329. pObj->ROAD_NAME = sNm;
  330. }
  331. delete pDlg;
  332. } catch(...) { }
  333. }
  334. //---------------------------------------------------------------------------
  335. /*
  336. * 삭제 버튼 클릭 이벤트 핸들러
  337. * arguments
  338. * Sender : event handler 객체
  339. * return
  340. * void
  341. */
  342. void __fastcall TIDB0020M::BtnDeleteClick(TObject *Sender)
  343. {
  344. //
  345. }
  346. //---------------------------------------------------------------------------
  347. void __fastcall TIDB0020M::DisplayListData()
  348. {
  349. }
  350. //---------------------------------------------------------------------------
  351. void __fastcall TIDB0020M::FormClose(TObject *Sender, TCloseAction &Action)
  352. {
  353. CommClose();
  354. IDB0020M = NULL;
  355. Action = caFree;
  356. }
  357. //---------------------------------------------------------------------------
  358. void __fastcall TIDB0020M::BtnApplyClick(TObject *Sender)
  359. {
  360. //
  361. }
  362. //---------------------------------------------------------------------------
  363. void __fastcall TIDB0020M::BtnBestFitClick(TObject *Sender)
  364. {
  365. try
  366. {
  367. TvList->BeginUpdate();
  368. TvList->ApplyBestFit(NULL, false, false);
  369. }
  370. __finally
  371. {
  372. TvList->EndUpdate();
  373. }
  374. }
  375. //---------------------------------------------------------------------------
  376. void __fastcall TIDB0020M::ChkAutoWidthPropertiesChange(TObject *Sender)
  377. {
  378. try
  379. {
  380. TvList->BeginUpdate();
  381. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  382. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  383. }
  384. __finally
  385. {
  386. TvList->EndUpdate();
  387. }
  388. }
  389. //---------------------------------------------------------------------------
  390. void __fastcall TIDB0020M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  391. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  392. {
  393. DisplayListData();
  394. BtnEditClick((TObject*)BtnEdit);
  395. }
  396. //---------------------------------------------------------------------------
  397. void __fastcall TIDB0020M::MnuMovePosClick(TObject *Sender)
  398. {
  399. TMenuItem *pMenu = (TMenuItem *)Sender;
  400. if (TvList->ViewData->RecordCount <= 0) return;
  401. int nIndex = m_pGDC->FocusedRecordIndex;
  402. if( nIndex < 0 )
  403. return;
  404. String sLinkId = VarToStr(m_pGDC->Values[nIndex][Column01->Index]);
  405. if (pMenu->Tag == 0)
  406. {
  407. //메인지도
  408. }
  409. else
  410. {
  411. //새지도
  412. }
  413. }
  414. //---------------------------------------------------------------------------
  415. void __fastcall TIDB0020M::TvListDataControllerFilterChanged(TObject *Sender)
  416. {
  417. CMM_SetFilterLike(TvList);
  418. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  419. }
  420. //---------------------------------------------------------------------------