IDB0010MF.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  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 "IDB0010MF.h"
  11. #include "IDB00101F.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 "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 "cxLabel"
  32. #pragma link "cxLookAndFeelPainters"
  33. #pragma link "cxLookAndFeels"
  34. #pragma link "cxStyles"
  35. #pragma link "cxTextEdit"
  36. #pragma link "dxSkinBlack"
  37. #pragma link "dxSkinBlue"
  38. #pragma link "dxSkinsCore"
  39. #pragma link "dxSkinscxPCPainter"
  40. #pragma resource "*.dfm"
  41. TIDB0010M *IDB0010M = NULL;
  42. //---------------------------------------------------------------------------
  43. __fastcall TIDB0010M::TIDB0010M(TComponent* Owner)
  44. : TForm(Owner)
  45. {
  46. LangTrans->Translate(this, ITSDb_GetConnection());
  47. ITSSkin_Load(this);
  48. CMM_LoadForm(g_sFormsDir, this);
  49. }
  50. //---------------------------------------------------------------------------
  51. /*
  52. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  53. * Form과 DataModule class를 delete시킨다.
  54. * arguments
  55. *
  56. * return
  57. * void
  58. */
  59. void __fastcall TIDB0010M::CommClose()
  60. {
  61. try
  62. {
  63. CMM_SaveForm(g_sFormsDir, this);
  64. }
  65. catch(...)
  66. {
  67. }
  68. }
  69. //---------------------------------------------------------------------------
  70. /*
  71. * Form을 보여줄때 호출되는 event 메서드이다.
  72. * arguments
  73. * Sender : event handler 객체
  74. * return
  75. * void
  76. */
  77. void __fastcall TIDB0010M::FormShow(TObject *Sender)
  78. {
  79. Refresh();
  80. FormInit();
  81. TmrShow->Enabled = true;
  82. }
  83. //---------------------------------------------------------------------------
  84. /*
  85. * form 초기화
  86. *
  87. * arguments
  88. *
  89. * return
  90. * void
  91. */
  92. void __fastcall TIDB0010M::FormInit()
  93. {
  94. m_pGDC = TvList->DataController;
  95. TvList->OptionsView->NoDataToDisplayInfoText = lblNoInfo->Caption;//"<노드 정보가 없습니다>";
  96. FCodeTurnP = ItsCodeManager->FLists.Find("TLE"); //회전제한
  97. FCodeNodeT = ItsCodeManager->FLists.Find("NDT"); //노드유형
  98. }
  99. //---------------------------------------------------------------------------
  100. /*
  101. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  102. * arguments
  103. * Sender : event handler 객체
  104. * return
  105. * void
  106. */
  107. void __fastcall TIDB0010M::TmrShowTimer(TObject *Sender)
  108. {
  109. TmrShow->Enabled = false;
  110. BtnSearchClick((TObject*)BtnSearch);
  111. }
  112. //---------------------------------------------------------------------------
  113. /*
  114. * Refresh Data Event Function
  115. * arguments
  116. *
  117. * return
  118. * void
  119. */
  120. void __fastcall TIDB0010M::RefreshData()
  121. {
  122. SelListData();
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TIDB0010M::SelListData()
  126. {
  127. TItsSubCode *pSubCode;
  128. CMM_ClearGridTableView(TvList);
  129. int nRow = 0;
  130. try
  131. {
  132. TvList->BeginUpdate();
  133. try
  134. {
  135. ItsNodeManager->FLists.Lock();
  136. FOR_STL(TItsNode *, pNode, ItsNodeManager->FLists)
  137. {
  138. nRow = m_pGDC->AppendRecord();
  139. m_pGDC->Values[nRow][Column00->Index] = pNode->NODE_ID; //노드ID
  140. m_pGDC->Values[nRow][Column01->Index] = pNode->NODE_ID; //노드ID
  141. String sNodeType = "[" + pNode->NODE_TYPE + "] ";
  142. if (FCodeNodeT)
  143. {
  144. pSubCode = FCodeNodeT->FSubLists.Find(pNode->NODE_TYPE);
  145. if (pSubCode) sNodeType = sNodeType + pSubCode->CMMN_CD_KOR_NM;
  146. }
  147. m_pGDC->Values[nRow][Column02->Index] = sNodeType; //노드유형
  148. m_pGDC->Values[nRow][Column03->Index] = pNode->NODE_NAME; //교차로명칭
  149. String sTurnP = "[" + pNode->TURN_P + "] ";
  150. if (FCodeTurnP)
  151. {
  152. pSubCode = FCodeTurnP->FSubLists.Find(pNode->TURN_P);
  153. if (pSubCode) sTurnP = sTurnP + pSubCode->CMMN_CD_KOR_NM;
  154. }
  155. m_pGDC->Values[nRow][Column04->Index] = sTurnP; //회전제한유무
  156. m_pGDC->Values[nRow][Column05->Index] = pNode->RMRK; //비고
  157. m_pGDC->Values[nRow][Column06->Index] = pNode->X_CRDN; //X 좌표
  158. m_pGDC->Values[nRow][Column07->Index] = pNode->Y_CRDN; //Y 좌표
  159. m_pGDC->Values[nRow][Column08->Index] = (int)pNode;
  160. }
  161. }
  162. __finally
  163. {
  164. ItsNodeManager->FLists.UnLock();
  165. }
  166. }
  167. __finally
  168. {
  169. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  170. TvList->EndUpdate();
  171. TvList->DataController->GotoFirst();
  172. TvList->DataController->FocusedRecordIndex = 0;
  173. CxList->SetFocus();
  174. }
  175. }
  176. //---------------------------------------------------------------------------
  177. /*
  178. * Search 버튼 클릭 이벤트 핸들러
  179. * arguments
  180. * Sender : event handler 객체
  181. * return
  182. * void
  183. */
  184. void __fastcall TIDB0010M::BtnSearchClick(TObject *Sender)
  185. {
  186. Application->ProcessMessages();
  187. TSqlCursor sqlCrs((TControl*)BtnSearch);
  188. RefreshData();
  189. CxList->SetFocus();
  190. }
  191. //---------------------------------------------------------------------------
  192. /*
  193. * Close 버튼 클릭 이벤트 핸들러
  194. * arguments
  195. * Sender : event handler 객체
  196. * return
  197. * void
  198. */
  199. void __fastcall TIDB0010M::BtnCloseClick(TObject *Sender)
  200. {
  201. Close();
  202. }
  203. //---------------------------------------------------------------------------
  204. void __fastcall TIDB0010M::ChkExpandClick(TObject *Sender)
  205. {
  206. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  207. }
  208. //---------------------------------------------------------------------------
  209. /*
  210. * 저장 버튼 클릭 이벤트 핸들러
  211. * arguments
  212. * Sender : event handler 객체
  213. * return
  214. * void
  215. */
  216. void __fastcall TIDB0010M::BtnExlSaveClick(TObject *Sender)
  217. {
  218. TcxGrid *pGrid = CxList;
  219. TcxGridTableView *pView = TvList;
  220. String sTitle= lblInfo->Caption;//"노드정보";
  221. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  222. }
  223. //---------------------------------------------------------------------------
  224. /*
  225. * 등록 버튼 클릭 이벤트 핸들러
  226. * arguments
  227. * Sender : event handler 객체
  228. * return
  229. * void
  230. */
  231. void __fastcall TIDB0010M::BtnInsertClick(TObject *Sender)
  232. {
  233. //
  234. }
  235. //---------------------------------------------------------------------------
  236. /*
  237. * 수정 버튼 클릭 이벤트 핸들러
  238. * arguments
  239. * Sender : event handler 객체
  240. * return
  241. * void
  242. */
  243. void __fastcall TIDB0010M::BtnEditClick(TObject *Sender)
  244. {
  245. if (TvList->ViewData->RecordCount <= 0) return;
  246. int nRow = m_pGDC->FocusedRecordIndex;
  247. if( nRow < 0 )
  248. return;
  249. String sNodeId = m_pGDC->Values[nRow][Column01->Index]; //노드ID
  250. String sNodeNm = m_pGDC->Values[nRow][Column03->Index]; //교차로명칭
  251. //String sRemark = m_pGDC->Values[nRow][Column05->Index]; //비고
  252. //String sPosX = VarToStrDef(m_pGDC->Values[nRow][Column06->Index], "0");
  253. //String sPosY = VarToStrDef(m_pGDC->Values[nRow][Column07->Index], "0");
  254. try {
  255. TIDB00101 *pDlg = new TIDB00101(this);
  256. pDlg->EdId->Text = sNodeId;
  257. pDlg->EdNm->Text = sNodeNm;
  258. pDlg->ShowModal();
  259. if (pDlg->FUpdated)
  260. {
  261. sNodeNm = pDlg->EdNm->Text.Trim();
  262. m_pGDC->Values[nRow][Column03->Index] = sNodeNm;
  263. int nMemPtr = m_pGDC->Values[nRow][Column08->Index];
  264. TItsNode *pObj = (TItsNode*)nMemPtr;
  265. pObj->NODE_NAME = sNodeNm;
  266. }
  267. delete pDlg;
  268. } catch(...) { }
  269. }
  270. //---------------------------------------------------------------------------
  271. /*
  272. * 삭제 버튼 클릭 이벤트 핸들러
  273. * arguments
  274. * Sender : event handler 객체
  275. * return
  276. * void
  277. */
  278. void __fastcall TIDB0010M::BtnDeleteClick(TObject *Sender)
  279. {
  280. //
  281. }
  282. //---------------------------------------------------------------------------
  283. void __fastcall TIDB0010M::FormClose(TObject *Sender, TCloseAction &Action)
  284. {
  285. CommClose();
  286. IDB0010M = NULL;
  287. Action = caFree;
  288. }
  289. //---------------------------------------------------------------------------
  290. void __fastcall TIDB0010M::BtnApplyClick(TObject *Sender)
  291. {
  292. //
  293. }
  294. //---------------------------------------------------------------------------
  295. void __fastcall TIDB0010M::ChkAutoWidthPropertiesChange(TObject *Sender)
  296. {
  297. try
  298. {
  299. TvList->BeginUpdate();
  300. TvList->OptionsView->ColumnAutoWidth = ChkAutoWidth->Checked;
  301. BtnBestFit->Visible = !ChkAutoWidth->Checked;
  302. }
  303. __finally
  304. {
  305. TvList->EndUpdate();
  306. }
  307. }
  308. //---------------------------------------------------------------------------
  309. void __fastcall TIDB0010M::BtnBestFitClick(TObject *Sender)
  310. {
  311. try
  312. {
  313. TvList->BeginUpdate();
  314. TvList->ApplyBestFit(NULL, false, false);
  315. }
  316. __finally
  317. {
  318. TvList->EndUpdate();
  319. }
  320. }
  321. //---------------------------------------------------------------------------
  322. void __fastcall TIDB0010M::TvListCellDblClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo,
  323. TMouseButton AButton, TShiftState AShift, bool &AHandled)
  324. {
  325. DisplayListData();
  326. BtnEditClick((TObject*)BtnEdit);
  327. }
  328. //---------------------------------------------------------------------------
  329. void __fastcall TIDB0010M::DisplayListData()
  330. {
  331. if (TvList->ViewData->RecordCount <= 0) return;
  332. int nIndex = m_pGDC->FocusedRecordIndex;
  333. if( nIndex < 0 )
  334. return;
  335. String sPosX = VarToStrDef(m_pGDC->Values[nIndex][Column06->Index], "0");
  336. String sPosY = VarToStrDef(m_pGDC->Values[nIndex][Column07->Index], "0");
  337. //ShowMessage(sPosX + " " + sPosY);
  338. #if 0
  339. double dTempX = strTempX.ToDouble();
  340. unsigned int nTempX = dTempX * 10000000;
  341. double dTempY = cxGrid_DataTV->DataController->Values[nIndex][enGridPosition_Y_CRDN];
  342. unsigned int nTempY = dTempY * 100000000;
  343. #endif
  344. }
  345. //---------------------------------------------------------------------------
  346. void __fastcall TIDB0010M::TvListDataControllerFilterChanged(TObject *Sender)
  347. {
  348. CMM_SetFilterLike(TvList);
  349. LblRecords->Caption = "("+FormatFloat("##,##0", m_pGDC->FilteredRecordCount) +"/"+FormatFloat("##,##0", m_pGDC->RecordCount) + ")";
  350. }
  351. //---------------------------------------------------------------------------