VMSM630M-OLD-NEWF.cpp 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094
  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. #include "CDSVmsIfscF.h"
  16. #include "ITSLangTransF.h"
  17. #pragma hdrstop
  18. #include "VMSM630MF.h"
  19. //---------------------------------------------------------------------------
  20. #pragma package(smart_init)
  21. #pragma link "cxButtons"
  22. #pragma link "cxCalendar"
  23. #pragma link "cxContainer"
  24. #pragma link "cxControls"
  25. #pragma link "cxDropDownEdit"
  26. #pragma link "cxEdit"
  27. #pragma link "cxGraphics"
  28. #pragma link "cxGroupBox"
  29. #pragma link "cxLabel"
  30. #pragma link "cxLookAndFeelPainters"
  31. #pragma link "cxLookAndFeels"
  32. #pragma link "cxMaskEdit"
  33. #pragma link "cxPC"
  34. #pragma link "cxPCdxBarPopupMenu"
  35. #pragma link "cxSpinEdit"
  36. #pragma link "cxSplitter"
  37. #pragma link "cxTextEdit"
  38. #pragma link "cxTimeEdit"
  39. #pragma link "dxSkinBlack"
  40. #pragma link "dxSkinBlue"
  41. #pragma link "dxSkinCaramel"
  42. #pragma link "dxSkinCoffee"
  43. #pragma link "dxSkinDarkRoom"
  44. #pragma link "dxSkinDarkSide"
  45. #pragma link "dxSkinFoggy"
  46. #pragma link "dxSkinGlassOceans"
  47. #pragma link "dxSkiniMaginary"
  48. #pragma link "dxSkinLilian"
  49. #pragma link "dxSkinLiquidSky"
  50. #pragma link "dxSkinLondonLiquidSky"
  51. #pragma link "dxSkinMcSkin"
  52. #pragma link "dxSkinMoneyTwins"
  53. #pragma link "dxSkinOffice2007Black"
  54. #pragma link "dxSkinOffice2007Blue"
  55. #pragma link "dxSkinOffice2007Green"
  56. #pragma link "dxSkinOffice2007Pink"
  57. #pragma link "dxSkinOffice2007Silver"
  58. #pragma link "dxSkinOffice2010Black"
  59. #pragma link "dxSkinOffice2010Blue"
  60. #pragma link "dxSkinOffice2010Silver"
  61. #pragma link "dxSkinsCore"
  62. #pragma link "dxSkinscxPCPainter"
  63. #pragma link "dxSkinSeven"
  64. #pragma link "dxSkinSharp"
  65. #pragma link "dxSkinSilver"
  66. #pragma link "dxSkinStardust"
  67. #pragma link "cxRadioGroup"
  68. #pragma link "cxClasses"
  69. #pragma link "cxCustomData"
  70. #pragma link "cxData"
  71. #pragma link "cxDataStorage"
  72. #pragma link "cxDBData"
  73. #pragma link "cxFilter"
  74. #pragma link "cxGrid"
  75. #pragma link "cxGridCustomTableView"
  76. #pragma link "cxGridCustomView"
  77. #pragma link "cxGridDBTableView"
  78. #pragma link "cxGridLevel"
  79. #pragma link "cxGridTableView"
  80. #pragma link "cxStyles"
  81. #pragma link "cxCheckBox"
  82. #pragma link "cxImage"
  83. #pragma link "cxButtonEdit"
  84. #pragma link "cxBlobEdit"
  85. #pragma link "VmsDesignerF"
  86. #pragma link "cxColorComboBox"
  87. #pragma link "cxCalc"
  88. #pragma link "FFBaseComponent"
  89. #pragma link "FFBasePlay"
  90. #pragma link "FFPlay"
  91. #pragma resource "*.dfm"
  92. #define LICENSE_KEY "FSXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX"
  93. TVMSM630M *VMSM630M = NULL;
  94. //---------------------------------------------------------------------------
  95. __fastcall TVMSM630M::TVMSM630M(TComponent* Owner)
  96. : TForm(Owner)
  97. {
  98. LangTrans->Translate(this, ITSDb_GetConnection());
  99. ITSSkin_Load(this);
  100. //CMM_LoadForm(g_sFormsDir, this);
  101. FSelected = false;
  102. FUpdate= false;
  103. FTitle = Caption;//"VMS 교통상황 폼 관리";
  104. APP_InitDisplayColor();
  105. FTrackBar = TrackBar1;
  106. FLblDuration = lblDuration1;
  107. FLblCurrPTS = lblCurrentPTS1;
  108. FFPlayer = FFPlayer1;
  109. FDispArea = PnlEdtBack;
  110. FDispArea->Tag = 0;
  111. FDispArea->ParentColor = false;
  112. FDispArea->Color = clBlack;
  113. FDispArea->Caption = "";
  114. FDispArea->Refresh();
  115. String sAVILibDir = g_sAppDir + "LibAV";
  116. FFPlayer1->SetLicenseKey(LICENSE_KEY);
  117. FFPlayer1->DisableFPUExceptions();
  118. if (!FFPlayer1->LoadAVLib(sAVILibDir))
  119. {
  120. if (g_AppCfg.sLang != "kr") Application->MessageBox(L"Stream display library load failed.", L"Stream display fail", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  121. else Application->MessageBox(L"영상표출 라이브러리를 로드하지 못하였습니다.", L"영상표출 오류", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  122. }
  123. }
  124. //---------------------------------------------------------------------------
  125. /*
  126. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  127. * Form과 DataModule class를 delete시킨다.
  128. * arguments
  129. *
  130. * return
  131. * void
  132. */
  133. void __fastcall TVMSM630M::CommClose()
  134. {
  135. try
  136. {
  137. BtnStopClick(NULL);
  138. if (m_pEdtDesigner)
  139. {
  140. delete m_pEdtDesigner;
  141. m_pEdtDesigner = NULL;
  142. }
  143. //CMM_SaveForm(g_sFormsDir, this);
  144. }
  145. catch(...)
  146. {
  147. }
  148. }
  149. //---------------------------------------------------------------------------
  150. void __fastcall TVMSM630M::FormCreate(TObject *Sender)
  151. {
  152. m_pEdtDesigner = new TVmsFormDesigner(PnlEditForm);
  153. }
  154. //---------------------------------------------------------------------------
  155. void __fastcall TVMSM630M::FormShow(TObject *Sender)
  156. {
  157. Refresh();
  158. FormInit();
  159. PnlEdtBack->Width = FVmsWidth+4;
  160. PnlEdtBack->Height= FVmsHeight+4;
  161. LoadVmsIfsc(FVmsNmbr);
  162. TmrShow->Enabled = true;
  163. }
  164. //---------------------------------------------------------------------------
  165. void __fastcall TVMSM630M::FormInit()
  166. {
  167. //TvObjList->OptionsView->NoDataToDisplayInfoText = "<등록되어 있는 객체 정보가 없습니다>";
  168. m_pEdtDesigner->ApplicationHandle = (long)Handle;
  169. FNewDb = false;
  170. }
  171. //---------------------------------------------------------------------------
  172. void __fastcall TVMSM630M::LoadVmsIfsc(String AVmsNmbr)
  173. {
  174. CMM_ClearGridTableView(TvAxis);
  175. String sQry;
  176. TADOQuery *pADO = NULL;
  177. sQry = "SELECT C.VMS_CTLR_NMBR, C.VMS_CTLR_ID, C.VMS_NM, \r\n"
  178. " A.VMS_IFSC_ID, A.VMS_IFSC_NM, \r\n"
  179. " A.DSPL_STRT_NODE_NM, A.DSPL_END_NODE_NM, \r\n"
  180. " A.AXIS_YN \r\n"
  181. " FROM TB_VMS_IFSC A, \r\n"
  182. " TB_VMS_RLTN_IFSC B, \r\n"
  183. " (SELECT VMS_CTLR_NMBR, \r\n"
  184. " VMS_CTLR_ID, \r\n"
  185. " VMS_NM \r\n"
  186. " FROM TB_VMS_CTLR \r\n"
  187. " WHERE VMS_CTLR_NMBR = :p01) C \r\n"
  188. " WHERE A.USE_YN = 'Y' \r\n"
  189. " AND A.VMS_IFSC_ID = B.VMS_IFSC_ID \r\n"
  190. " AND B.VMS_CTLR_NMBR = C.VMS_CTLR_NMBR \r\n";
  191. try
  192. {
  193. int nRow;
  194. TcxDataController *pGDC = TvAxis->DataController;
  195. TvAxis->BeginUpdate();
  196. try
  197. {
  198. pADO = new TADOQuery(NULL);
  199. pADO->Close();
  200. pADO->Connection = ITSDb_GetConnection();
  201. ITSDb_SQLText(pADO, sQry);
  202. ITSDb_SQLBind(pADO, "p01", AVmsNmbr);
  203. ITSDb_SQLOpen(pADO);
  204. for( ; !pADO->Eof; pADO->Next())
  205. {
  206. nRow = pGDC->AppendRecord();
  207. pGDC->Values[nRow][Col00->Index] = pADO->FieldByName("VMS_CTLR_ID")->AsString;
  208. pGDC->Values[nRow][Col01->Index] = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  209. pGDC->Values[nRow][Col02->Index] = pADO->FieldByName("VMS_IFSC_NM")->AsString;
  210. pGDC->Values[nRow][Col03->Index] = pADO->FieldByName("DSPL_STRT_NODE_NM")->AsString;
  211. pGDC->Values[nRow][Col04->Index] = pADO->FieldByName("DSPL_END_NODE_NM")->AsString;
  212. pGDC->Values[nRow][Col05->Index] = pADO->FieldByName("AXIS_YN")->AsString;
  213. }
  214. }
  215. catch(EDatabaseError &E)
  216. {
  217. DBERRORMSG("VMS Sect Query", String(E.ClassName()), E.Message, sQry);
  218. throw Exception(String(E.ClassName()) + E.Message);
  219. }
  220. catch(Exception &e)
  221. {
  222. DBERRORMSG("VMS Sect Query", String(e.ClassName()), e.Message, sQry);
  223. throw Exception(String(e.ClassName()) + e.Message);
  224. }
  225. }
  226. __finally
  227. {
  228. if (pADO)
  229. {
  230. pADO->Close();
  231. delete pADO;
  232. }
  233. TvAxis->EndUpdate();
  234. CMM_ExpandCollapseChk(TvAxis, true);
  235. }
  236. }
  237. //---------------------------------------------------------------------------
  238. void __fastcall TVMSM630M::TmrShowTimer(TObject *Sender)
  239. {
  240. TmrShow->Enabled = false;
  241. BtnSearchClick(NULL);
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TVMSM630M::BtnSearchClick(TObject *Sender)
  245. {
  246. RefreshData();
  247. EdFocus->SetFocus();
  248. }
  249. //---------------------------------------------------------------------------
  250. void __fastcall TVMSM630M::RefreshData()
  251. {
  252. // 검색조건에 의한 링크 데이터 조회
  253. FormClear();
  254. m_pEdtDesigner->Clear();
  255. m_pEdtDesigner->SizeType = FVmsTypeCd;
  256. m_pEdtDesigner->SetSize(FVmsWidth, FVmsHeight);
  257. m_pEdtDesigner->SetPos(0, 0);
  258. m_pEdtDesigner->BkColorCode = FFormColor;
  259. m_pEdtDesigner->EditMode = true;
  260. m_pEdtDesigner->Show();
  261. InitObjectList();
  262. LoadFormObjectInfo(FFormId, m_pEdtDesigner);
  263. DispObjectListData();
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TVMSM630M::AddTrafficTypeObject(int ARow, String AIfscId)
  267. {
  268. TVmsIfsc *pObj;
  269. TcxGridDataController *pGDC = TvObjList->DataController;
  270. pGDC->Values[ARow][ColIfscId->Index] = AIfscId;
  271. //pObj = VmsIfscManager->FLists.Find(FIfscId[0].ToIntDef(0));
  272. pObj = VmsIfscManager->FLists.Find(AIfscId.ToIntDef(0));
  273. if (!pObj) return;
  274. pGDC->Values[ARow][ColIfscNm->Index] = pObj->VMS_IFSC_NM;
  275. pGDC->Values[ARow][ColIfscStr->Index] = pObj->DSPL_STRT_NODE_NM;
  276. pGDC->Values[ARow][ColIfscEnd->Index] = pObj->DSPL_END_NODE_NM;
  277. }
  278. //---------------------------------------------------------------------------
  279. void __fastcall TVMSM630M::InitObjectList()
  280. {
  281. CMM_ClearGridTableView(TvObjList);
  282. TcxGridDataController *pGDC = TvObjList->DataController;
  283. ColObj03->Visible = false;
  284. ColObj04->Visible = false;
  285. try
  286. {
  287. TvObjList->BeginUpdate();
  288. pGDC->BeginUpdate();
  289. int nRow;
  290. switch(FFormType)
  291. {
  292. case 11:// ' 소통상황(1단)
  293. nRow = pGDC->AppendRecord();
  294. pGDC->Values[nRow][ColObj01->Index] = "11";
  295. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  296. pGDC->Values[nRow][ColObjType->Index] = "Form";
  297. AddTrafficTypeObject(nRow, FIfscId[0]);
  298. break;
  299. case 12:// ' 소통상황(2단)
  300. nRow = pGDC->AppendRecord();
  301. pGDC->Values[nRow][ColObj01->Index] = "11";
  302. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  303. pGDC->Values[nRow][ColObjType->Index] = "Form";
  304. AddTrafficTypeObject(nRow, FIfscId[0]);
  305. nRow = pGDC->AppendRecord();
  306. pGDC->Values[nRow][ColObj01->Index] = "12";
  307. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  308. pGDC->Values[nRow][ColObjType->Index] = "Form";
  309. AddTrafficTypeObject(nRow, FIfscId[1]);
  310. break;
  311. case 13:// ' 소통상황(3단)
  312. nRow = pGDC->AppendRecord();
  313. pGDC->Values[nRow][ColObj01->Index] = "11";
  314. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  315. pGDC->Values[nRow][ColObjType->Index] = "Form";
  316. AddTrafficTypeObject(nRow, FIfscId[0]);
  317. nRow = pGDC->AppendRecord();
  318. pGDC->Values[nRow][ColObj01->Index] = "12";
  319. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  320. pGDC->Values[nRow][ColObjType->Index] = "Form";
  321. AddTrafficTypeObject(nRow, FIfscId[1]);
  322. nRow = pGDC->AppendRecord();
  323. pGDC->Values[nRow][ColObj01->Index] = "13";
  324. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm13->Caption;//"3Row Traffic";//"3단 소통정보";
  325. pGDC->Values[nRow][ColObjType->Index] = "Form";
  326. AddTrafficTypeObject(nRow, FIfscId[2]);
  327. break;
  328. case 14:// ' 소통상황(4단)
  329. nRow = pGDC->AppendRecord();
  330. pGDC->Values[nRow][ColObj01->Index] = "11";
  331. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm11->Caption;//"1Row Traffic";//"1단 소통정보";
  332. pGDC->Values[nRow][ColObjType->Index] = "Form";
  333. AddTrafficTypeObject(nRow, FIfscId[0]);
  334. nRow = pGDC->AppendRecord();
  335. pGDC->Values[nRow][ColObj01->Index] = "12";
  336. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm12->Caption;//"2Row Traffic";//"2단 소통정보";
  337. pGDC->Values[nRow][ColObjType->Index] = "Form";
  338. AddTrafficTypeObject(nRow, FIfscId[1]);
  339. nRow = pGDC->AppendRecord();
  340. pGDC->Values[nRow][ColObj01->Index] = "13";
  341. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm13->Caption;//""3Row Traffic";//"3단 소통정보";
  342. pGDC->Values[nRow][ColObjType->Index] = "Form";
  343. AddTrafficTypeObject(nRow, FIfscId[2]);
  344. nRow = pGDC->AppendRecord();
  345. pGDC->Values[nRow][ColObj01->Index] = "14";
  346. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblForm14->Caption;//""4Row Traffic";//"4단 소통정보";
  347. pGDC->Values[nRow][ColObjType->Index] = "Form";
  348. AddTrafficTypeObject(nRow, FIfscId[2]);
  349. break;
  350. case 15:// ' 소통상황(도형식)
  351. ColObj03->Visible = true;
  352. break;
  353. default:
  354. break;
  355. }
  356. }
  357. __finally
  358. {
  359. pGDC->EndUpdate();
  360. TvObjList->EndUpdate();
  361. }
  362. }
  363. //---------------------------------------------------------------------------
  364. void __fastcall TVMSM630M::DispObjectListData()
  365. {
  366. TcxGridDataController *pGDC = TvObjList->DataController;
  367. int nRow;
  368. TVmsFormObject *pObj;
  369. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  370. for(int ii = 0; ii < nObjCnt; ii++)
  371. {
  372. pObj = m_pEdtDesigner->GetObject(ii);
  373. if (pObj)
  374. {
  375. switch(pObj->ObjType.ToIntDef(0))
  376. {
  377. case 91: //@축통행시간(고정)
  378. nRow = pGDC->AppendRecord();
  379. pGDC->Values[nRow][ColObj01->Index] = "15";
  380. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill91->Caption;//"AxisTravelTime";//"축통행시간(고정)";
  381. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  382. pGDC->Values[nRow][ColObjType->Index] = "x";
  383. AddTrafficTypeObject(nRow, pObj->Tag);
  384. break;
  385. case 92: //@축소통상황(고정)
  386. nRow = pGDC->AppendRecord();
  387. pGDC->Values[nRow][ColObj01->Index] = "15";
  388. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill92->Caption;//"Traffic(Fix)";//"소통상황(고정)";
  389. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  390. pGDC->Values[nRow][ColObjType->Index] = "x";
  391. AddTrafficTypeObject(nRow, pObj->Tag);
  392. break;
  393. case 17: //@소통정보이미지1
  394. nRow = pGDC->AppendRecord();
  395. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"17";
  396. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill17->Caption;//"TrafficImage";//"소통정보이미지";
  397. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  398. pGDC->Values[nRow][ColObjType->Index] = "17";
  399. AddTrafficTypeObject(nRow, FIfscId[4]);
  400. break;
  401. case 27: //@소통정보이미지2
  402. nRow = pGDC->AppendRecord();
  403. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"27";
  404. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill27->Caption;//"TrafficImage2";//"소통정보이미지2";
  405. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  406. pGDC->Values[nRow][ColObjType->Index] = "27";
  407. AddTrafficTypeObject(nRow, FIfscId[5]);
  408. break;
  409. case 37: //@소통정보이미지3
  410. nRow = pGDC->AppendRecord();
  411. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"37";
  412. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill37->Caption;//"TrafficImage3";//"소통정보이미지3";
  413. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  414. pGDC->Values[nRow][ColObjType->Index] = "37";
  415. AddTrafficTypeObject(nRow, FIfscId[6]);
  416. break;
  417. case 47: //@소통정보이미지4
  418. nRow = pGDC->AppendRecord();
  419. pGDC->Values[nRow][ColObj01->Index] = String(FFormType);//"47";
  420. pGDC->Values[nRow][ColObj02->Index] = FrmLang->lblFill47->Caption;//"TrafficImage4";//"소통정보이미지4";
  421. pGDC->Values[nRow][ColObj03->Index] = String(pObj->ObjSeq);
  422. pGDC->Values[nRow][ColObjType->Index] = "47";
  423. AddTrafficTypeObject(nRow, FIfscId[7]);
  424. break;
  425. }
  426. }
  427. }
  428. }
  429. //---------------------------------------------------------------------------
  430. void __fastcall TVMSM630M::BtnClosexClick(TObject *Sender)
  431. {
  432. FSelected = false;
  433. Close();
  434. }
  435. //---------------------------------------------------------------------------
  436. void __fastcall TVMSM630M::FormClose(TObject *Sender, TCloseAction &Action)
  437. {
  438. CommClose();
  439. VMSM630M = NULL;
  440. //Action = caFree;
  441. }
  442. //---------------------------------------------------------------------------
  443. void __fastcall TVMSM630M::LoadFormObjectInfo(String AFormId, TVmsFormDesigner *ADesigner)
  444. {
  445. ADesigner->Clear();
  446. String sQry;
  447. TADOQuery *pADO = NULL;
  448. sQry = "SELECT A.*, \r\n"
  449. " C.VMS_FONT_NAME_NM, \r\n"
  450. " B.IMAG_DATA AS SYMB_IMG, \r\n"
  451. " B.SYMB_EXPL AS SYMB_IMG_NM \r\n"
  452. " FROM TB_VMS_FORM_OBJECT A, \r\n"
  453. " TB_VMS_SYMB_LIB B, \r\n"
  454. " TB_VMS_FONT_NAME C, \r\n"
  455. " TB_VMS_FORM D \r\n"
  456. " WHERE D.VMS_FORM_ID = :p01 \r\n"
  457. " AND D.VMS_FORM_ID = A.VMS_FORM_ID \r\n"
  458. " AND A.SYMB_LIB_NMBR = B.SYMB_LIB_NMBR(+) \r\n"
  459. " AND A.VMS_FONT_NAME_CD = C.VMS_FONT_NAME_CD(+) \r\n"
  460. " ORDER BY A.VMS_FORM_OBJECT_ID ASC \r\n";
  461. try
  462. {
  463. try
  464. {
  465. pADO = new TADOQuery(NULL);
  466. pADO->Close();
  467. pADO->Connection = ITSDb_GetConnection();
  468. ITSDb_SQLText(pADO, sQry);
  469. ITSDb_SQLBind(pADO, "p01", AFormId);
  470. ITSDb_SQLOpen(pADO);
  471. int nDrawType;
  472. String sObjKind;
  473. for( ; !pADO->Eof; pADO->Next())
  474. {
  475. int nFormId = pADO->FieldByName("VMS_FORM_ID")->AsInteger;
  476. int nObjId = pADO->FieldByName("VMS_FORM_OBJECT_ID")->AsInteger;
  477. int nObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsInteger;
  478. if (nObjType == 1 || //심볼
  479. nObjType == 2 || //이미지
  480. nObjType == 3 || //배경이미지
  481. nObjType == 17 || //@소통정보이미지 (1열)
  482. nObjType == 27 || //@소통정보이미지2(2열)
  483. nObjType == 37 || //@소통정보이미지3(3열)
  484. nObjType == 47 || //소통이미지4
  485. nObjType == 200 || //동영상
  486. nObjType == 300 //스트리밍영상
  487. )
  488. {
  489. if (nObjType == 1) sObjKind = OBJKIND_IMAGEID; //Image Id
  490. else sObjKind = OBJKIND_IMAGE; //Image
  491. nDrawType = 1; //이미지그리기
  492. }
  493. else
  494. {
  495. sObjKind = OBJKIND_TEXT; //문자열
  496. nDrawType = 0; //문자열그리기
  497. }
  498. //실재 맵핑된 구간의 정보를 표출하도록 한다.
  499. int nBlinking = pADO->FieldByName("VMS_DSPL_BLINKING")->AsInteger;
  500. int nPosX = pADO->FieldByName("VMS_DSPL_XCRDN")->AsInteger;
  501. int nPosY = pADO->FieldByName("VMS_DSPL_YCRDN")->AsInteger;
  502. TVmsFormObject *pObj = ADesigner->AddObject((VmsObjectDrawType)nDrawType);
  503. if (!pObj) continue;
  504. //11 , ' @구간명
  505. //12 , ' @시점명
  506. //13 , ' @종점명
  507. //14 , ' @소통상황
  508. //15 , ' @통행시간
  509. //16 , ' @통행속도
  510. //17 , ' @방향
  511. pObj->Text = pADO->FieldByName("VMS_DSPL_TXT")->AsString.Trim();
  512. pObj->RunText = pObj->Text;
  513. String sIfscId = "";
  514. if (nObjType >= 11 && nObjType < 17)
  515. sIfscId = FIfscId[0];
  516. else
  517. if (nObjType >= 21 && nObjType < 27)
  518. sIfscId = FIfscId[1];
  519. else
  520. if (nObjType >= 31 && nObjType < 37)
  521. sIfscId = FIfscId[2];
  522. else
  523. if (nObjType >= 41 && nObjType < 47)
  524. sIfscId = FIfscId[3];
  525. switch(nObjType)
  526. {
  527. case 17: sIfscId = FIfscId[4]; break;
  528. case 27: sIfscId = FIfscId[5]; break;
  529. case 37: sIfscId = FIfscId[6]; break;
  530. case 47: sIfscId = FIfscId[7]; break;
  531. }
  532. if (sIfscId != "")
  533. {
  534. TVmsIfsc *pIfscObj;
  535. pIfscObj = VmsIfscManager->FLists.Find(sIfscId.ToIntDef(0));
  536. if (pIfscObj)
  537. {
  538. switch(nObjType)
  539. {
  540. case 11: case 21: case 31: case 41:
  541. pObj->RunText = pIfscObj->VMS_IFSC_NM;
  542. break;
  543. case 12: case 22: case 32: case 42:
  544. pObj->RunText = pIfscObj->DSPL_STRT_NODE_NM;
  545. break;
  546. case 13: case 23: case 33: case 43:
  547. pObj->RunText = pIfscObj->DSPL_END_NODE_NM;
  548. break;
  549. }
  550. }
  551. }
  552. if (nObjType == 200 || nObjType == 300)
  553. {
  554. pObj->EditMode = false;
  555. }
  556. pObj->ObjSeq = nObjId;
  557. pObj->ObjId = nObjId;
  558. pObj->ObjKind = sObjKind;
  559. pObj->Tag = pADO->FieldByName("VMS_IFSC_ID")->AsString;
  560. pObj->ObjType = pADO->FieldByName("VMS_FORM_OBJECT_TYPE_CD")->AsString;
  561. pObj->ObjSize = pADO->FieldByName("VMS_DSPL_SIZE")->AsInteger;
  562. pObj->BkColorCode = pADO->FieldByName("VMS_DSPL_BKCOLOR")->AsString;
  563. pObj->Blink = nBlinking == 1 ? true : false;
  564. pObj->ImageId = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  565. if (pObj->ObjKind == OBJKIND_TEXT) // 문자열
  566. {
  567. int nFontBold = pADO->FieldByName("VMS_FONT_BOLD")->AsInteger;
  568. pObj->FontName = pADO->FieldByName("VMS_FONT_NAME_NM")->AsString;
  569. pObj->FontNameCode = pADO->FieldByName("VMS_FONT_NAME_CD")->AsString;
  570. pObj->FontColorCode = pADO->FieldByName("VMS_FONT_COLR_CD")->AsString;
  571. pObj->FontSize = pADO->FieldByName("VMS_FONT_SIZE")->AsInteger;
  572. pObj->FontBold = nFontBold == 1 ? true : false;
  573. pObj->TextAlign = pADO->FieldByName("VMS_FONT_ALIGN")->AsInteger;
  574. pObj->SetSize(pADO->FieldByName("VMS_DSPL_WIDTH")->AsInteger, pADO->FieldByName("VMS_DSPL_HEIGHT")->AsInteger);
  575. pObj->SetRuntimeText(pObj->RunText);
  576. }
  577. else //if (sObjKind == "1" || sObjKind == "2") // 이미지(1), 이미지 ID(2)
  578. {
  579. if (pObj->ObjKind == OBJKIND_IMAGEID)
  580. {
  581. pObj->Text = pADO->FieldByName("SYMB_LIB_NMBR")->AsString;
  582. }
  583. TStream *pStream = NULL;
  584. pStream = pADO->CreateBlobStream(pADO->FieldByName("VMS_DSPL_FIGR"), bmRead);
  585. try
  586. {
  587. if (pStream && pStream->Size > 0)
  588. {
  589. Graphics::TBitmap *Bitmap = pObj->GetBitmap();
  590. pStream->Position = 0;
  591. Bitmap->LoadFromStream(pStream);
  592. pObj->SetSize(Bitmap->Width, Bitmap->Height);
  593. }
  594. }
  595. __finally
  596. {
  597. SAFE_DELETE(pStream);
  598. }
  599. }
  600. pObj->SetPos(nPosX, nPosY);
  601. pObj->Show();
  602. pObj->BringToFront();
  603. }
  604. }
  605. catch(EDatabaseError &E)
  606. {
  607. DBERRORMSG("TVMSM630M::LoadFormObjectInfo", String(E.ClassName()), E.Message, sQry);
  608. throw Exception(String(E.ClassName()) + E.Message);
  609. }
  610. catch(Exception &exception)
  611. {
  612. DBERRORMSG("TVMSM630M::LoadFormObjectInfo", String(exception.ClassName()), exception.Message, sQry);
  613. throw Exception(String(exception.ClassName()) + exception.Message);
  614. }
  615. }
  616. __finally
  617. {
  618. if (pADO)
  619. {
  620. pADO->Close();
  621. delete pADO;
  622. }
  623. }
  624. }
  625. //---------------------------------------------------------------------------
  626. void __fastcall TVMSM630M::FormClear()
  627. {
  628. FSelIdx = -1;
  629. EdFormId->Clear();
  630. EdObjId->Clear();
  631. FNewDb = false;
  632. }
  633. //---------------------------------------------------------------------------
  634. void __fastcall TVMSM630M::TvObjListFocusedRecordChanged(TcxCustomGridTableView *Sender,
  635. TcxCustomGridRecord *APrevFocusedRecord, TcxCustomGridRecord *AFocusedRecord,
  636. bool ANewItemRecordFocusingChanged)
  637. {
  638. if (TvObjList->ViewData->RecordCount <= 0) return;
  639. if (TvObjList->DataController->FocusedRowIndex < 0) return;
  640. m_pEdtDesigner->SelectedObjectAll(false);
  641. TcxDataController *pGDC = TvObjList->DataController;
  642. int nIndex = pGDC->FocusedRecordIndex;
  643. String sObjType = pGDC->Values[nIndex][ColObjType->Index];
  644. String sFormType = pGDC->Values[nIndex][ColObj01->Index];
  645. int nFormType = sFormType.ToIntDef(0);
  646. if (nFormType == 11 || nFormType == 12 || nFormType == 13 || nFormType == 14)
  647. {
  648. BtnListAdd->Enabled = true;
  649. BtnListDelete->Enabled = true;
  650. }
  651. else
  652. {
  653. BtnListAdd->Enabled = true;
  654. BtnListDelete->Enabled = true;
  655. }
  656. if (nFormType == 15)
  657. {
  658. int nObjSeq = VarToStr(pGDC->Values[nIndex][ColObj03->Index]).ToIntDef(0);
  659. m_pEdtDesigner->SelectObject(nObjSeq);
  660. return;
  661. }
  662. TVmsFormObject *pObj;
  663. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  664. for(int ii = 0; ii < nObjCnt; ii++)
  665. {
  666. pObj = m_pEdtDesigner->GetObject(ii);
  667. if (!pObj) continue;
  668. int nObjType = pObj->ObjType.ToIntDef(0);
  669. switch(sObjType.ToIntDef(-1))
  670. {
  671. case 17:
  672. case 27:
  673. case 37:
  674. case 47:
  675. if (sObjType.ToIntDef(-1) == nObjType)
  676. {
  677. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  678. }
  679. break;
  680. default:
  681. switch(nFormType)
  682. {
  683. case 11:// ' 소통상황(1단)
  684. //@구간명, @시점명, @종점명
  685. if (nObjType >= 11 && nObjType < 17)
  686. {
  687. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  688. }
  689. break;
  690. case 12:// ' 소통상황(2단)
  691. if (nObjType >= 21 && nObjType < 27)
  692. {
  693. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  694. }
  695. break;
  696. case 13:// ' 소통상황(3단)
  697. if (nObjType >= 31 && nObjType < 37)
  698. {
  699. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  700. }
  701. break;
  702. case 14:// ' 소통상황(4단)
  703. if (nObjType >= 41 && nObjType < 47)
  704. {
  705. m_pEdtDesigner->SelectObject(pObj->ObjSeq, true);
  706. }
  707. break;
  708. default:
  709. break;
  710. }
  711. }
  712. }
  713. }
  714. //---------------------------------------------------------------------------
  715. void __fastcall TVMSM630M::BtnListAddClick(TObject *Sender)
  716. {
  717. int nCellIdx = CMM_GetRecordIndex(TvObjList);
  718. if (nCellIdx < 0) return;
  719. int nIfscIdx = CMM_GetRecordIndex(TvAxis);
  720. if (nIfscIdx < 0) return;
  721. TcxGridDataController *pDcCell = TvObjList->DataController;
  722. TcxGridDataController *pDcIfsc = TvAxis->DataController;
  723. pDcCell->Values[nCellIdx][ColIfscId->Index] = pDcIfsc->Values[nIfscIdx][Col01->Index];
  724. pDcCell->Values[nCellIdx][ColIfscNm->Index] = pDcIfsc->Values[nIfscIdx][Col02->Index];
  725. pDcCell->Values[nCellIdx][ColIfscStr->Index] = pDcIfsc->Values[nIfscIdx][Col03->Index];
  726. pDcCell->Values[nCellIdx][ColIfscEnd->Index] = pDcIfsc->Values[nIfscIdx][Col04->Index];
  727. TVmsFormObject *pObj;
  728. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  729. for(int ii = 0; ii < nObjCnt; ii++)
  730. {
  731. pObj = m_pEdtDesigner->GetObject(ii);
  732. if (!pObj) continue;
  733. if (!pObj->Selected) continue;
  734. int nObjType = pObj->ObjType.ToIntDef(0);
  735. switch(nObjType)
  736. {
  737. case 11: case 21: case 31: case 41:
  738. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscNm->Index]);
  739. pObj->SetRuntimeText(pObj->RunText);
  740. break;
  741. case 12: case 22: case 32: case 42:
  742. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscStr->Index]);
  743. pObj->SetRuntimeText(pObj->RunText);
  744. break;
  745. case 13: case 23: case 33: case 43:
  746. pObj->RunText = VarToStr(pDcCell->Values[nCellIdx][ColIfscEnd->Index]);
  747. pObj->SetRuntimeText(pObj->RunText);
  748. break;
  749. }
  750. }
  751. }
  752. //---------------------------------------------------------------------------
  753. void __fastcall TVMSM630M::BtnListDeleteClick(TObject *Sender)
  754. {
  755. int nCellIdx = CMM_GetRecordIndex(TvObjList);
  756. if (nCellIdx < 0) return;
  757. TcxGridDataController *pDcCell = TvObjList->DataController;
  758. pDcCell->Values[nCellIdx][ColIfscId->Index] = "";
  759. pDcCell->Values[nCellIdx][ColIfscNm->Index] = "";
  760. pDcCell->Values[nCellIdx][ColIfscStr->Index] = "";
  761. pDcCell->Values[nCellIdx][ColIfscEnd->Index] = "";
  762. TVmsFormObject *pObj;
  763. int nObjCnt = m_pEdtDesigner->GetObjectCount();
  764. for(int ii = 0; ii < nObjCnt; ii++)
  765. {
  766. pObj = m_pEdtDesigner->GetObject(ii);
  767. if (!pObj) continue;
  768. if (!pObj->Selected) continue;
  769. int nObjType = pObj->ObjType.ToIntDef(0);
  770. switch(nObjType)
  771. {
  772. case 11: case 21: case 31: case 41:
  773. pObj->SetRuntimeText(pObj->Text);
  774. break;
  775. case 12: case 22: case 32: case 42:
  776. pObj->SetRuntimeText(pObj->Text);
  777. break;
  778. case 13: case 23: case 33: case 43:
  779. pObj->SetRuntimeText(pObj->Text);
  780. break;
  781. }
  782. }
  783. }
  784. //---------------------------------------------------------------------------
  785. void __fastcall TVMSM630M::BtnSaveClick(TObject *Sender)
  786. {
  787. TcxDataController *pGDC = TvObjList->DataController;
  788. try
  789. {
  790. TvObjList->BeginUpdate();
  791. pGDC->BeginUpdate();
  792. int nRows = pGDC->RecordCount;
  793. try
  794. {
  795. for (int ii = 0; ii < nRows; ii++)
  796. {
  797. int nObjType = VarToStr(pGDC->Values[ii][ColObjType->Index]).ToIntDef(-1);
  798. int nFormType = VarToStr(pGDC->Values[ii][ColObj01->Index]).ToIntDef(0);
  799. String sIfscId = VarToStr(pGDC->Values[ii][ColIfscId->Index]);
  800. switch(nObjType)
  801. {
  802. case 17: FIfscId[4] = sIfscId; break;
  803. case 27: FIfscId[5] = sIfscId; break;
  804. case 37: FIfscId[6] = sIfscId; break;
  805. case 47: FIfscId[7] = sIfscId; break;
  806. default:
  807. switch(nFormType)
  808. {
  809. case 11: FIfscId[0] = sIfscId; break; // ' 소통상황(1단)
  810. case 12: FIfscId[1] = sIfscId; break; // ' 소통상황(2단)
  811. case 13: FIfscId[2] = sIfscId; break; // ' 소통상황(3단)
  812. case 14: FIfscId[3] = sIfscId; break; // ' 소통상황(4단)
  813. }
  814. break;
  815. }
  816. }
  817. }
  818. catch(Exception &e)
  819. {
  820. }
  821. }
  822. __finally
  823. {
  824. pGDC->EndUpdate();
  825. TvObjList->EndUpdate();
  826. }
  827. m_pEdtDesigner->GetVmsFormImage(ImgForm);
  828. FSelected = true;
  829. Close();
  830. }
  831. //---------------------------------------------------------------------------
  832. void __fastcall TVMSM630M::TrackBar1Change(TObject *Sender)
  833. {
  834. if (!FTrackChanging && !IsMouseDown())
  835. {
  836. FFPlayer->Seek(FDuration * FTrackBar->Position / FTrackBar->Max);
  837. }
  838. }
  839. //---------------------------------------------------------------------------
  840. void __fastcall TVMSM630M::FFPlayer1FileOpen(TObject *Sender, const __int64 ADuration, int AFrameWidth, int AFrameHeight,
  841. int &AScreenWidth, int &AScreenHeight)
  842. {
  843. if (PnlEditForm->Visible) PnlEditForm->Visible = false;
  844. FDuration = ADuration;
  845. FLblDuration->Caption = DurationToStr(ADuration);
  846. FLblCurrPTS->Caption = "N/A";
  847. // setup track bar
  848. FTrackBar->Frequency = 5;
  849. FTrackBar->TickStyle = tsAuto;
  850. FTrackBar->Max = FTrackBar->Width;
  851. FTrackBar->SelStart = 0;
  852. FTrackBar->SelEnd = 0;
  853. FTrackBar->SliderVisible = ADuration > 0;
  854. FTrackChanging = true;
  855. try
  856. {
  857. FTrackBar->Position = 0;
  858. }
  859. __finally
  860. {
  861. FTrackChanging= false;
  862. }
  863. }
  864. //---------------------------------------------------------------------------
  865. void __fastcall TVMSM630M::FFPlayer1OpenFailed(TObject *Sender)
  866. {
  867. String sLastErrMsg = FFPlayer->LastErrMsg;
  868. FDispArea->Caption = sLastErrMsg;
  869. }
  870. //---------------------------------------------------------------------------
  871. void __fastcall TVMSM630M::FFPlayer1Position(TObject *Sender, const __int64 APTS)
  872. {
  873. FLblCurrPTS->Caption = DurationToStr(APTS);
  874. if ((APTS >= 0) && (FDuration > 0))
  875. {
  876. FTrackBar->SelEnd = FTrackBar->Max * APTS / FDuration;
  877. if (FTrackChanging == false && (IsMouseDown() == false || FTrackBar->Focused() == false))
  878. {
  879. FTrackChanging = true;
  880. try
  881. {
  882. FTrackBar->Position = FTrackBar->Max * APTS / FDuration;
  883. }
  884. __finally
  885. {
  886. FTrackChanging = false;
  887. }
  888. }
  889. }
  890. }
  891. //---------------------------------------------------------------------------
  892. void __fastcall TVMSM630M::FFPlayer1State(TObject *Sender, TPlayState APlayState)
  893. {
  894. switch(APlayState)
  895. {
  896. case Ffbasecomponent::psPlay:
  897. case Ffbasecomponent::psResume:
  898. break;
  899. case Ffbasecomponent::psPause:
  900. case Ffbasecomponent::psStep:
  901. break;
  902. case Ffbasecomponent::psStop:
  903. if (FFPlayer->ScreenHandle != NULL)
  904. {
  905. PostMessage(FFPlayer->ScreenHandle, CM_INVALIDATE, 0, 0);
  906. UpdateWindow(FFPlayer->ScreenHandle);
  907. }
  908. break;
  909. case Ffbasecomponent::psEnd:
  910. {
  911. FFPlayer->Stop(true);
  912. if (PnlEditForm->Visible == false) PnlEditForm->Visible = true;
  913. //FFPlayer[nTag]->Seek((__int64)0, TSeekFlags()<<sfBackward);
  914. }
  915. break;
  916. }
  917. }
  918. //---------------------------------------------------------------------------
  919. void __fastcall TVMSM630M::BtnPlayClick(TObject *Sender)
  920. {
  921. BtnPlay->Enabled = false;
  922. Application->ProcessMessages();
  923. try
  924. {
  925. if (FPlayerFile == "")
  926. {
  927. if (FFPlayer->ScreenHandle != NULL)
  928. {
  929. FFPlayer->Stop(true);
  930. PostMessage(FFPlayer->ScreenHandle, CM_INVALIDATE, 0, 0);
  931. UpdateWindow(FFPlayer->ScreenHandle);
  932. }
  933. }
  934. FFPlayer->AspectRatio = ChkFullScreen->Checked ? -1 : 0;
  935. FFPlayer->TryOpen(FPlayerFile, FDispArea->Handle);
  936. Application->ProcessMessages();
  937. }
  938. catch(Exception &e)
  939. {
  940. }
  941. BtnStop->Enabled = true;
  942. BtnPause->Enabled = true;
  943. }
  944. //---------------------------------------------------------------------------
  945. void __fastcall TVMSM630M::BtnStopClick(TObject *Sender)
  946. {
  947. BtnStop->Enabled = false;
  948. BtnPause->Enabled = false;
  949. try
  950. {
  951. if (FFPlayer->ScreenHandle != NULL)
  952. {
  953. FFPlayer->Stop(true);
  954. }
  955. Application->ProcessMessages();
  956. }
  957. catch(Exception &e)
  958. {
  959. }
  960. BtnPlay->Enabled = true;
  961. if (PnlEditForm->Visible == false) PnlEditForm->Visible = true;
  962. }
  963. //---------------------------------------------------------------------------
  964. void __fastcall TVMSM630M::BtnPauseClick(TObject *Sender)
  965. {
  966. try
  967. {
  968. if (FFPlayer->ScreenHandle != NULL)
  969. {
  970. FFPlayer->TogglePause();
  971. }
  972. Application->ProcessMessages();
  973. }
  974. catch(Exception &e)
  975. {
  976. }
  977. }
  978. //---------------------------------------------------------------------------