VMSM630M-OLD-NEWF.cpp 37 KB

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