IDB0020MF.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  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. void __fastcall TIDB0020M::CommClose()
  54. {
  55. try
  56. {
  57. CMM_SaveForm(g_sFormsDir, this);
  58. }
  59. catch(...)
  60. {
  61. }
  62. }
  63. //---------------------------------------------------------------------------
  64. void __fastcall TIDB0020M::FormInit()
  65. {
  66. m_pGDC = TvList->DataController;
  67. TvList->OptionsView->NoDataToDisplayInfoText = lblNoInfo->Caption;//"<링크 정보가 없습니다>";
  68. FCodeRDU = ItsCodeManager->FLists.Find("RDU"); // 도로사용여부
  69. FCodeRDR = ItsCodeManager->FLists.Find("RDR"); // 도로등급
  70. FCodeRDT = ItsCodeManager->FLists.Find("RDT"); // 도로유형
  71. FCodeMLT = ItsCodeManager->FLists.Find("MLT"); // 중용구간
  72. FCodeCTR = ItsCodeManager->FLists.Find("CTR"); // 연결로
  73. FCodePLV = ItsCodeManager->FLists.Find("PLV"); // 통행제한차량
  74. }
  75. //---------------------------------------------------------------------------
  76. void __fastcall TIDB0020M::FormShow(TObject *Sender)
  77. {
  78. Refresh();
  79. FormInit();
  80. TmrShow->Enabled = true;
  81. }
  82. //---------------------------------------------------------------------------
  83. void __fastcall TIDB0020M::TmrShowTimer(TObject *Sender)
  84. {
  85. TmrShow->Enabled = false;
  86. BtnSearchClick((TObject*)BtnSearch);
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TIDB0020M::RefreshData()
  90. {
  91. SelListData();
  92. }
  93. //---------------------------------------------------------------------------
  94. void __fastcall TIDB0020M::SelListData()
  95. {
  96. TItsNode *pNode;
  97. TItsSubCode *pSubCode;
  98. CMM_ClearGridTableView(TvList);
  99. int nRow = 0;
  100. try
  101. {
  102. TvList->BeginUpdate();
  103. try
  104. {
  105. ItsLinkManager->FLists.Lock();
  106. FOR_STL(TItsLink*, pLink, ItsLinkManager->FLists)
  107. {
  108. if (pLink->REGN_YN == "Y" || ChkDispExt->Checked == true)
  109. {
  110. nRow = m_pGDC->AppendRecord();
  111. m_pGDC->Values[nRow][Column00->Index] = pLink->LINK_ID;
  112. m_pGDC->Values[nRow][Column01->Index] = pLink->LINK_ID;
  113. String sFNodeName = "[" + pLink->F_NODE_ID + "] ";
  114. pNode = ItsNodeManager->FLists.Find(pLink->F_NODE_ID);
  115. if (pNode) sFNodeName = sFNodeName + pNode->NODE_NAME;
  116. String sTNodeName = "[" + pLink->T_NODE_ID + "] ";
  117. pNode = ItsNodeManager->FLists.Find(pLink->T_NODE_ID);
  118. if (pNode) sTNodeName = sTNodeName + pNode->NODE_NAME;
  119. m_pGDC->Values[nRow][Column02->Index] = sFNodeName; //'시작노드ID';
  120. m_pGDC->Values[nRow][Column03->Index] = sTNodeName; //'종료노드ID';
  121. String sRDU = "[" + pLink->ROAD_USE + "] ";
  122. if (FCodeRDU)
  123. {
  124. pSubCode = FCodeRDU->FSubLists.Find(pLink->ROAD_USE);
  125. if (pSubCode) sRDU = sRDU + pSubCode->CMMN_CD_KOR_NM;
  126. }
  127. m_pGDC->Values[nRow][Column04->Index] = sRDU; //'도로사용여부';
  128. m_pGDC->Values[nRow][Column05->Index] = pLink->LANES; //'차로수';
  129. String sRDR = "[" + pLink->ROAD_RANK + "] ";
  130. if (FCodeRDR)
  131. {
  132. pSubCode = FCodeRDR->FSubLists.Find(pLink->ROAD_RANK);
  133. if (pSubCode) sRDR = sRDR + pSubCode->CMMN_CD_KOR_NM;
  134. }
  135. m_pGDC->Values[nRow][Column06->Index] = sRDR; //'도로등급';
  136. String sRDT = "[" + pLink->ROAD_TYPE + "] ";
  137. if (FCodeRDT)
  138. {
  139. pSubCode = FCodeRDT->FSubLists.Find(pLink->ROAD_TYPE);
  140. if (pSubCode) sRDT = sRDT + pSubCode->CMMN_CD_KOR_NM;
  141. }
  142. m_pGDC->Values[nRow][Column07->Index] = sRDT; //'도로유형';
  143. m_pGDC->Values[nRow][Column08->Index] = pLink->ROAD_NO; //'도로번호';
  144. m_pGDC->Values[nRow][Column09->Index] = pLink->ROAD_NAME; //'도로명';
  145. String sMLT = "[" + pLink->MULTI_LINK + "] ";
  146. if (FCodeMLT)
  147. {
  148. pSubCode = FCodeMLT->FSubLists.Find(pLink->MULTI_LINK);
  149. if (pSubCode) sMLT = sMLT + pSubCode->CMMN_CD_KOR_NM;
  150. }
  151. m_pGDC->Values[nRow][Column10->Index] = sMLT; //'중용구간여부';
  152. String sCTR = "[" + pLink->LINK_CONNECT + "] ";
  153. if (FCodeCTR)
  154. {
  155. pSubCode = FCodeCTR->FSubLists.Find(pLink->LINK_CONNECT);
  156. if (pSubCode) sCTR = sCTR + pSubCode->CMMN_CD_KOR_NM;
  157. }
  158. m_pGDC->Values[nRow][Column11->Index] = sCTR; //'연결로코드';
  159. m_pGDC->Values[nRow][Column12->Index] = pLink->MAX_SPD; //'최고제한속도';
  160. String sPLV = "[" + pLink->REST_VEH + "] ";
  161. if (FCodePLV)
  162. {
  163. pSubCode = FCodePLV->FSubLists.Find(pLink->REST_VEH);
  164. if (pSubCode) sPLV = sPLV + pSubCode->CMMN_CD_KOR_NM;
  165. }
  166. m_pGDC->Values[nRow][Column13->Index] = sPLV; //'통행제한차량';
  167. m_pGDC->Values[nRow][Column14->Index] = pLink->REST_W; //'통과제한하중';
  168. m_pGDC->Values[nRow][Column15->Index] = pLink->REST_H; //'통과제한높이';
  169. m_pGDC->Values[nRow][Column16->Index] = pLink->LINK_LENG; //'연장';
  170. m_pGDC->Values[nRow][Column17->Index] = pLink->RMRK; //'비고';
  171. //m_pGDC->Values[nRow][Column02->Index] = pLink->DEL_YN; //'삭제 여부';
  172. //m_pGDC->Values[nRow][Column02->Index] = pLink->DFLT_SPED; //'디폴트 속도';
  173. //m_pGDC->Values[nRow][Column02->Index] = pLink->DFLT_SPED_USE_YN; //'디폴트 속도 사용 여부';
  174. //m_pGDC->Values[nRow][Column02->Index] = pLink->SECT_GRAD_CD; //'구간 등급 코드';
  175. //m_pGDC->Values[nRow][Column02->Index] = pLink->AREA_CD; //'지역 코드';
  176. m_pGDC->Values[nRow][Column18->Index] = (int)pLink;
  177. }
  178. }
  179. }
  180. __finally
  181. {
  182. ItsLinkManager->FLists.UnLock();
  183. }
  184. }
  185. __finally
  186. {
  187. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  188. TvList->EndUpdate();
  189. TvList->DataController->GotoFirst();
  190. TvList->DataController->FocusedRecordIndex = 0;
  191. CxList->SetFocus();
  192. }
  193. }
  194. //---------------------------------------------------------------------------
  195. void __fastcall TIDB0020M::BtnSearchClick(TObject *Sender)
  196. {
  197. Application->ProcessMessages();
  198. TSqlCursor sqlCrs((TControl*)BtnSearch);
  199. RefreshData();
  200. CxList->SetFocus();
  201. }
  202. //---------------------------------------------------------------------------
  203. void __fastcall TIDB0020M::BtnCloseClick(TObject *Sender)
  204. {
  205. Close();
  206. }
  207. //---------------------------------------------------------------------------
  208. void __fastcall TIDB0020M::ChkExpandClick(TObject *Sender)
  209. {
  210. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  211. }
  212. //---------------------------------------------------------------------------
  213. void __fastcall TIDB0020M::BtnExlSaveClick(TObject *Sender)
  214. {
  215. TcxGrid *pGrid = CxList;
  216. TcxGridTableView *pView = TvList;
  217. String sTitle= lblInfo->Caption;//"링크정보";
  218. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  219. }
  220. //---------------------------------------------------------------------------
  221. void __fastcall TIDB0020M::BtnCancelClick(TObject *Sender)
  222. {
  223. //
  224. }
  225. //---------------------------------------------------------------------------
  226. void __fastcall TIDB0020M::BtnInsertClick(TObject *Sender)
  227. {
  228. //
  229. }
  230. //---------------------------------------------------------------------------
  231. void __fastcall TIDB0020M::BtnEditClick(TObject *Sender)
  232. {
  233. if (TvList->ViewData->RecordCount <= 0) return;
  234. int nRow = m_pGDC->FocusedRecordIndex;
  235. if( nRow < 0 )
  236. return;
  237. String sId = m_pGDC->Values[nRow][Column01->Index]; //ID
  238. String sNm = m_pGDC->Values[nRow][Column09->Index]; //도로명
  239. try {
  240. TIDB00201 *pDlg = new TIDB00201(this);
  241. pDlg->EdId->Text = sId;
  242. pDlg->EdNm->Text = sNm;
  243. pDlg->ShowModal();
  244. if (pDlg->FUpdated)
  245. {
  246. sNm = pDlg->EdNm->Text.Trim();
  247. m_pGDC->Values[nRow][Column09->Index] = sNm;
  248. int nMemPtr = m_pGDC->Values[nRow][Column18->Index];
  249. TItsLink *pObj = (TItsLink*)nMemPtr;
  250. pObj->ROAD_NAME = sNm;
  251. }
  252. delete pDlg;
  253. } catch(...) { }
  254. }
  255. //---------------------------------------------------------------------------
  256. void __fastcall TIDB0020M::BtnDeleteClick(TObject *Sender)
  257. {
  258. //
  259. }
  260. //---------------------------------------------------------------------------
  261. void __fastcall TIDB0020M::DisplayListData()
  262. {
  263. }
  264. //---------------------------------------------------------------------------
  265. void __fastcall TIDB0020M::FormClose(TObject *Sender, TCloseAction &Action)
  266. {
  267. CommClose();
  268. IDB0020M = NULL;
  269. Action = caFree;
  270. }
  271. //---------------------------------------------------------------------------
  272. void __fastcall TIDB0020M::BtnApplyClick(TObject *Sender)
  273. {
  274. //
  275. }
  276. //---------------------------------------------------------------------------
  277. void __fastcall TIDB0020M::BtnBestFitClick(TObject *Sender)
  278. {
  279. try
  280. {
  281. TvList->BeginUpdate();
  282. TvList->ApplyBestFit(NULL, false, false);
  283. }
  284. __finally
  285. {
  286. TvList->EndUpdate();
  287. }
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TIDB0020M::ChkAutoWidthPropertiesChange(TObject *Sender)
  291. {
  292. try
  293. {
  294. TvList->BeginUpdate();
  295. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  296. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  297. }
  298. __finally
  299. {
  300. TvList->EndUpdate();
  301. }
  302. }
  303. //---------------------------------------------------------------------------
  304. void __fastcall TIDB0020M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  305. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  306. {
  307. DisplayListData();
  308. BtnEditClick((TObject*)BtnEdit);
  309. }
  310. //---------------------------------------------------------------------------
  311. void __fastcall TIDB0020M::MnuMovePosClick(TObject *Sender)
  312. {
  313. TMenuItem *pMenu = (TMenuItem *)Sender;
  314. if (TvList->ViewData->RecordCount <= 0) return;
  315. int nIndex = m_pGDC->FocusedRecordIndex;
  316. if( nIndex < 0 )
  317. return;
  318. String sLinkId = VarToStr(m_pGDC->Values[nIndex][Column01->Index]);
  319. if (pMenu->Tag == 0)
  320. {
  321. //메인지도
  322. }
  323. else
  324. {
  325. //새지도
  326. }
  327. }
  328. //---------------------------------------------------------------------------
  329. void __fastcall TIDB0020M::TvListDataControllerFilterChanged(TObject *Sender)
  330. {
  331. CMM_SetFilterLike(TvList);
  332. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  333. }
  334. //---------------------------------------------------------------------------