VMSFORM0F.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <vcl.h>
  5. #include "AppGlobalF.h"
  6. #include "ITSSkinF.h"
  7. #include "ITSUtilF.h"
  8. #include "FrmVmsOprMainF.h"
  9. #include "VitzroCommF.h"
  10. #include "ITSLangTransF.h"
  11. #pragma hdrstop
  12. #if 0
  13. //GDIPLUS - start
  14. #ifndef ULONG_PTR
  15. #define ULONG_PTR unsigned long *
  16. #endif
  17. #include <math.h>
  18. #include <map>
  19. #include <list>
  20. #include <algorithm>
  21. using std::min;
  22. using std::max;
  23. #include <Gdiplus.h>
  24. #include <GdiplusBase.h>
  25. //GDIPLUS - end
  26. #endif
  27. #include "VMSFORM0F.h"
  28. //---------------------------------------------------------------------------
  29. //---------------------------------------------------------------------------
  30. #pragma package(smart_init)
  31. #pragma link "cxContainer"
  32. #pragma link "cxControls"
  33. #pragma link "cxEdit"
  34. #pragma link "cxGraphics"
  35. #pragma link "cxGroupBox"
  36. #pragma link "cxLookAndFeelPainters"
  37. #pragma link "cxLookAndFeels"
  38. #pragma link "dxSkinBlack"
  39. #pragma link "dxSkinMcSkin"
  40. #pragma link "dxSkinsCore"
  41. #pragma link "ITSVmsDispF"
  42. #pragma link "dxSkinBlue"
  43. #pragma link "dxSkinCaramel"
  44. #pragma link "dxSkinCoffee"
  45. #pragma link "dxSkinDarkRoom"
  46. #pragma link "dxSkinDarkSide"
  47. #pragma link "dxSkinFoggy"
  48. #pragma link "dxSkinGlassOceans"
  49. #pragma link "dxSkiniMaginary"
  50. #pragma link "dxSkinLilian"
  51. #pragma link "dxSkinLiquidSky"
  52. #pragma link "dxSkinLondonLiquidSky"
  53. #pragma link "dxSkinMoneyTwins"
  54. #pragma link "dxSkinOffice2007Black"
  55. #pragma link "dxSkinOffice2007Blue"
  56. #pragma link "dxSkinOffice2007Green"
  57. #pragma link "dxSkinOffice2007Pink"
  58. #pragma link "dxSkinOffice2007Silver"
  59. #pragma link "dxSkinOffice2010Black"
  60. #pragma link "dxSkinOffice2010Blue"
  61. #pragma link "dxSkinOffice2010Silver"
  62. #pragma link "dxSkinSeven"
  63. #pragma link "dxSkinSharp"
  64. #pragma link "dxSkinSilver"
  65. #pragma link "dxSkinStardust"
  66. #pragma link "cxLabel"
  67. #pragma resource "*.dfm"
  68. #define WIDTH_GAP 3
  69. #define HEIGHT_GAP 3
  70. //TVMSFORM0 *VMSFORM0 = NULL;
  71. //---------------------------------------------------------------------------
  72. __fastcall TVMSFORM0::TVMSFORM0(TComponent* Owner, TVmsCtlr *AVmsObj)
  73. : TForm(Owner)
  74. {
  75. #if 0
  76. if (g_AppCfg.sLang != "kr")
  77. {
  78. lblText1->Caption = "Provide time:";
  79. lblText2->Caption = "Controller Ping";
  80. lblText3->Caption = "Web camera Ping";
  81. }
  82. #endif
  83. FVmsObj = AVmsObj;
  84. FScrollBox = NULL;
  85. FSelected = false;
  86. FDisplayMode = 0;
  87. FZoomRate = 1.0;
  88. FDispIndex = 0;
  89. FPlay = false;
  90. FWndParent = NULL;
  91. FZoomView = false;
  92. PnlForm->ParentColor = false;
  93. PnlForm->Color = clBtnFace;
  94. FDispW = FVmsObj->WIDTH;
  95. FDispH = FVmsObj->HEIGHT;
  96. //PnlName->Caption = "[" + FVmsObj->VMS_CTLR_ID + "] " + FVmsObj->VMS_NM;
  97. PnlName->Caption = FVmsObj->VMS_NM;
  98. PnlName->Hint = String(FVmsObj->VMS_CTLR_NMBR) + " [" + FVmsObj->VMS_CTLR_ID + "] \r\n" + FVmsObj->VMS_NM;
  99. FGapW = 16;
  100. FGapH = 8;
  101. PnlForm->Align = alCustom;
  102. PnlForm->Anchors = TAnchors() >> akLeft >> akTop >> akRight >> akBottom;
  103. //PnlForm->Locked = true;
  104. #if 0
  105. ImgCommError->Parent = ImgCommNormal->Parent;
  106. ImgCommError->Left = ImgCommNormal->Left;
  107. ImgCommError->Top = ImgCommNormal->Top;
  108. ImgCommError->Visible = false;
  109. ImgCommNormal->Visible= true;
  110. #else
  111. ImgState1->Parent = ImgState0->Parent;
  112. ImgState2->Parent = ImgState0->Parent;
  113. ImgState1->Left = ImgState0->Left;
  114. ImgState1->Top = ImgState0->Top;
  115. ImgState2->Left = ImgState0->Left;
  116. ImgState2->Top = ImgState0->Top;
  117. ImgState1->Visible = false;
  118. ImgState2->Visible = false;
  119. #endif
  120. LoadLocalSkin();
  121. }
  122. //---------------------------------------------------------------------------
  123. void __fastcall TVMSFORM0::LoadLocalSkin()
  124. {
  125. PnlMain->ParentColor = false;
  126. PnlMain->Color = clBtnFace;
  127. PnlForm->ParentColor = false;
  128. PnlForm->Color = clBlack;
  129. PnlDoor->ParentColor = false;
  130. PnlFan->ParentColor = false;
  131. PnlHeater->ParentColor = false;
  132. PnlModule->ParentColor = false;
  133. PnlPower->ParentColor = false;
  134. PnlTemp->ParentColor = false;
  135. PnlOprMode->ParentColor = false;
  136. }
  137. //---------------------------------------------------------------------------
  138. void __fastcall TVMSFORM0::FormDestroy(TObject *Sender)
  139. {
  140. TmrDisp->Enabled = false;
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TVMSFORM0::FormShow(TObject *Sender)
  144. {
  145. TmrShow->Enabled = true;
  146. RefreshVmsStatus();
  147. }
  148. //---------------------------------------------------------------------------
  149. void __fastcall TVMSFORM0::SetFormSize(int AFormW)
  150. {
  151. AFormW = 288;
  152. AFormW = 365;
  153. //AFormW = 384;
  154. try
  155. {
  156. #if 0
  157. if (AFormW < FVmsObj->WIDTH)
  158. {
  159. FZoomRate = (float)AFormW/(float)FVmsObj->WIDTH;
  160. FDispW = FVmsObj->WIDTH * FZoomRate;
  161. FDispH = FVmsObj->HEIGHT * FZoomRate;
  162. }
  163. else
  164. {
  165. FDispW = FVmsObj->WIDTH;
  166. FDispH = FVmsObj->HEIGHT;
  167. }
  168. #else
  169. if (FVmsObj->VMS_USAG_TYPE_CD == "VUTN") FZoomRate = 0.75;
  170. else FZoomRate = 0.90;
  171. FZoomRate = 0.95;
  172. FDispW = FVmsObj->WIDTH * FZoomRate;
  173. FDispH = FVmsObj->HEIGHT * FZoomRate;
  174. #endif
  175. LockWindowUpdate(Handle);
  176. int nBaseH = (FDispH+8);
  177. Width = AFormW + FGapW;
  178. Height = nBaseH + PnlTitle->Height + PnlBottom->Height + FGapH;
  179. PnlForm->Width = FDispW + 4;
  180. PnlForm->Height = FDispH + 4;
  181. PnFormBack->Width = PnlForm->Width + 4;
  182. PnFormBack->Height = PnlForm->Height + 4;
  183. PnlForm->Left = (PnFormBack->Width - PnlForm->Width) / 2;
  184. PnlForm->Top = (nBaseH - PnlForm->Height) / 2;
  185. PnlForm->Visible = true;
  186. ImgForm->Width = FDispW;
  187. ImgForm->Height= FDispH;
  188. ImgForm->Picture->Bitmap->Width = ImgForm->Width;
  189. ImgForm->Picture->Bitmap->Height = ImgForm->Height;
  190. APP_ImageClear(ImgForm->Canvas, 0, 0, ImgForm->Width, ImgForm->Height, clBlack);
  191. }
  192. __finally
  193. {
  194. LockWindowUpdate(0);
  195. }
  196. }
  197. //---------------------------------------------------------------------------
  198. void __fastcall TVMSFORM0::SelectForm(bool ASelect)
  199. {
  200. FSelected = ASelect;
  201. if (ASelect)
  202. {
  203. PopupMenu = PopupMenu1;
  204. PnlMain->ParentColor = false;
  205. PnlMain->Color = clBtnHighlight;//clBackground;
  206. this->ParentColor = false;
  207. this->Color = clRed;
  208. }
  209. else
  210. {
  211. PopupMenu = NULL;
  212. PnlMain->ParentColor = false;
  213. PnlMain->Color = clBtnFace;
  214. this->ParentColor = true;
  215. }
  216. }
  217. //---------------------------------------------------------------------------
  218. void __fastcall TVMSFORM0::TmrShowTimer(TObject *Sender)
  219. {
  220. TmrShow->Enabled = false;
  221. PopupMenu = NULL;
  222. if (!FVmsObj)
  223. {
  224. PnlName->Caption = "VMS";
  225. ImgForm->Visible = false;
  226. }
  227. RefreshVmsStatus();
  228. TmrDisp->Enabled = true;
  229. }
  230. //---------------------------------------------------------------------------
  231. void __fastcall TVMSFORM0::SetPlay(bool APlay)
  232. {
  233. FPlay = APlay;
  234. }
  235. //---------------------------------------------------------------------------
  236. void __fastcall TVMSFORM0::TmrDispTimer(TObject *Sender)
  237. {
  238. int nDispTime = 1000;
  239. TCanvas *pCanvas = ImgForm->Canvas;
  240. try
  241. {
  242. TmrDisp->Enabled = false;
  243. FVmsObj->Lock();
  244. pCanvas->Lock();
  245. try {
  246. if (FVmsObj->VmsMsg->Total == 0)
  247. {
  248. PnlSeq->Caption = "0/0";
  249. ImgForm->Visible = false;
  250. FDispIndex = -1;
  251. PnlSvcTime->Caption = " " + FrmLang->lblText1->Caption + " -";//제공시각: -";
  252. return;
  253. }
  254. if (ImgForm->Visible == false) ImgForm->Visible = true;
  255. if (FDispIndex >= FVmsObj->VmsMsg->Total || FDispIndex >= INT_MAX_VMS_FORM)
  256. {
  257. FDispIndex = 0;
  258. }
  259. PnlSvcTime->Caption = " " + FrmLang->lblText1->Caption + " " + ITSUtil_FormatStr(FVmsObj->VmsMsg->OFFER_DT, STR_DATETIME);
  260. #if 1
  261. nDispTime = FVmsObj->VMS_PHSE_CHNG_CYCL;
  262. if (nDispTime < 3) nDispTime = 3;
  263. if (nDispTime > 9) nDispTime = 10;
  264. nDispTime = nDispTime * 1000;
  265. #else
  266. nDispTime = FVmsObj->VmsMsg->PHASE[FDispIndex].DSPL_HH * 1000;
  267. #endif
  268. if (FPlay == false)
  269. {
  270. return;
  271. }
  272. PnlSeq->Caption = String(FDispIndex+1) + "/" + String(FVmsObj->VmsMsg->Total);
  273. Graphics::TBitmap *pBitmap = FVmsObj->VmsMsg->PHASE[FDispIndex].pVmsBmp;
  274. if (pBitmap)
  275. {
  276. SetStretchBltMode(ImgForm->Canvas->Handle, MAXSTRETCHBLTMODE);//HALFTONE);//MAXSTRETCHBLTMODE)//STRETCH_HALFTONE;
  277. ImgForm->Canvas->CopyRect(Classes::Rect(0, 0, ImgForm->Width, ImgForm->Height),
  278. pBitmap->Canvas,
  279. Classes::Rect(0, 0, pBitmap->Width, pBitmap->Height));
  280. }
  281. } catch(...) {}
  282. }
  283. __finally
  284. {
  285. FVmsObj->UnLock();
  286. ImgForm->Refresh();
  287. pCanvas->Unlock();
  288. FDispIndex++;
  289. PnlSvcTime->Font->Color = FVmsObj->VmsMsg->OFFER_YN ? clNavy : clRed;
  290. TmrDisp->Interval = nDispTime;
  291. TmrDisp->Enabled = true;
  292. }
  293. }
  294. //---------------------------------------------------------------------------
  295. void __fastcall TVMSFORM0::FormClose(TObject *Sender, TCloseAction &Action)
  296. {
  297. TmrDisp->Enabled = false;
  298. }
  299. //---------------------------------------------------------------------------
  300. void __fastcall TVMSFORM0::OnFormClick(TObject *Sender)
  301. {
  302. if (FScrollBox) FScrollBox->SetFocus();
  303. }
  304. //---------------------------------------------------------------------------
  305. void __fastcall TVMSFORM0::RefreshVmsMessage()
  306. {
  307. TmrDisp->Enabled = false;
  308. FDispIndex = 0;
  309. TmrDisp->Interval= 300;
  310. TmrDisp->Enabled = true;
  311. }
  312. //---------------------------------------------------------------------------
  313. void __fastcall TVMSFORM0::RefreshVmsStatus()
  314. {
  315. PnlDoor->Caption = VmsModuleDoor(FVmsObj); //도어
  316. PnlFan->Caption = VmsModuleFan(FVmsObj); //팬
  317. PnlHeater->Caption = VmsModuleHeater(FVmsObj); //히터
  318. PnlModule->Caption = VmsModuleState(FVmsObj); //모듈상태
  319. PnlPower->Caption = VmsModulePower(FVmsObj); //전원상태
  320. PnlTemp->Caption = VmsModuleTemp(FVmsObj); //온도
  321. PnlOprMode->Caption = VmsOperMode(FVmsObj);
  322. #if 0
  323. if (FVmsObj->WSTATE.Comm == vms_normal)
  324. {
  325. if (!ImgCommNormal->Visible) ImgCommNormal->Visible = true;
  326. if ( ImgCommError->Visible) ImgCommError->Visible = false;
  327. }
  328. else
  329. {
  330. if (!ImgCommError->Visible) ImgCommError->Visible = true;
  331. if (ImgCommNormal->Visible) ImgCommNormal->Visible = false;
  332. }
  333. #else
  334. switch(FVmsObj->RunState)
  335. {
  336. case state_normal:
  337. if (!ImgState0->Visible) ImgState0->Visible = true;
  338. if ( ImgState1->Visible) ImgState1->Visible = false;
  339. if ( ImgState2->Visible) ImgState2->Visible = false;
  340. break;
  341. case state_module:
  342. if ( ImgState0->Visible) ImgState0->Visible = false; //false
  343. if ( ImgState1->Visible) ImgState1->Visible = false;
  344. if (!ImgState2->Visible) ImgState2->Visible = true; //true
  345. break;
  346. default:
  347. if ( ImgState0->Visible) ImgState0->Visible = false;
  348. if (!ImgState1->Visible) ImgState1->Visible = true;
  349. if ( ImgState2->Visible) ImgState2->Visible = false;
  350. break;
  351. }
  352. #endif
  353. TColor clrState = clLime;
  354. //운영모드
  355. #if 0
  356. if (FVmsObj->OPER_MODE != "A")
  357. {
  358. clrState = clYellow;
  359. }
  360. #else
  361. String sVmsMode = PnlOprMode->Caption;
  362. #if 0
  363. if (sVmsMode == "자동") clrState = clLime;
  364. else if (sVmsMode == "고정") clrState = clFuchsia;
  365. else clrState = clYellow;
  366. #else
  367. if (sVmsMode == FrmLang->lblOperA->Caption) clrState = clLime;
  368. else if (sVmsMode == FrmLang->lblOperF->Caption) clrState = clFuchsia;
  369. else clrState = clYellow;
  370. #endif
  371. #endif
  372. if (PnlOprMode->Color != clrState) PnlOprMode->Color = clrState;
  373. if (FVmsObj->WSTATE.Comm != vms_normal)
  374. {
  375. PnlDoor->Color = clGray; //도어
  376. PnlFan->Color = clGray; //팬
  377. PnlHeater->Color = clGray; //히터
  378. PnlModule->Color = clGray; //모듈상태
  379. PnlPower->Color = clGray; //전원상태
  380. PnlTemp->Color = clGray; //온도
  381. return;
  382. }
  383. //모듈상태
  384. clrState = clLime;
  385. if (FVmsObj->WSTATE.ModuleState == vms_error)
  386. clrState = clRed;
  387. if (PnlModule->Color != clrState) PnlModule->Color = clrState;
  388. //전원상태
  389. clrState = clLime;
  390. if (FVmsObj->WSTATE.ModulePowerStatus == vms_off)
  391. clrState = clRed;
  392. if (PnlPower->Color != clrState) PnlPower->Color = clrState;
  393. //도어상태
  394. clrState = clLime;
  395. if (FVmsObj->WSTATE.DoorStatus == vms_open)
  396. clrState = clRed;
  397. if (PnlDoor->Color != clrState) PnlDoor->Color = clrState;
  398. //팬상태
  399. clrState = clLime;
  400. if (FVmsObj->WSTATE.FanStatus == vms_on)
  401. clrState = clYellow;
  402. if (PnlFan->Color != clrState) PnlFan->Color = clrState;
  403. //히터상태
  404. clrState = clLime;
  405. if (FVmsObj->WSTATE.HeaterStatus == vms_on)
  406. clrState = clYellow;
  407. if (PnlHeater->Color != clrState) PnlHeater->Color = clrState;
  408. //모듈상태
  409. clrState = clLime;
  410. if (FVmsObj->WSTATE.ModuleState == vms_error)
  411. clrState = clRed;
  412. if (PnlModule->Color != clrState) PnlModule->Color = clrState;
  413. //전원상태
  414. clrState = clLime;
  415. if (FVmsObj->WSTATE.ModulePowerStatus == vms_on)
  416. clrState = clYellow;
  417. if (PnlPower->Color != clrState) PnlPower->Color = clrState;
  418. //온도
  419. clrState = clLime;
  420. if (PnlTemp->Color != clrState) PnlTemp->Color = clrState;
  421. }
  422. //---------------------------------------------------------------------------
  423. void __fastcall TVMSFORM0::PopupMenu1Popup(TObject *Sender)
  424. {
  425. MnuVmsInfId->Caption = "[" + FVmsObj->VMS_CTLR_ID + "]";
  426. MnuCtlrPing->Caption = FrmLang->lblText2->Caption + " - " + FVmsObj->VMS_CTLR_IP;//"제어기 Ping - " + FVmsObj->VMS_CTLR_IP;
  427. if (FVmsObj->WEB_CMRA_IP == "")
  428. {
  429. MnuWebcamPing->Caption = FrmLang->lblText3->Caption;//"웹카메라 Ping";
  430. MnuWebcamPing->Enabled = false;
  431. }
  432. else
  433. {
  434. MnuWebcamPing->Caption = FrmLang->lblText3->Caption + " - " + FVmsObj->WEB_CMRA_IP;//"웹카메라 Ping - " + FVmsObj->WEB_CMRA_IP;
  435. MnuWebcamPing->Enabled = true;
  436. }
  437. }
  438. //---------------------------------------------------------------------------
  439. void __fastcall TVMSFORM0::MnuNetworkPingClick(TObject *Sender)
  440. {
  441. String sIp = FVmsObj->VMS_CTLR_IP;
  442. TMenuItem *pMenu = (TMenuItem*)Sender;
  443. if (pMenu->Tag == 1)
  444. {
  445. sIp = FVmsObj->WEB_CMRA_IP;
  446. }
  447. ITSUtil_NetworkPing(sIp);
  448. }
  449. //---------------------------------------------------------------------------
  450. void __fastcall TVMSFORM0::MnuClick(TObject *Sender)
  451. {
  452. if (!FVmsObj) return;
  453. #if 0
  454. TMenuItem *pMenu = (TMenuItem*)Sender;
  455. ST_WMMESSAGE *pWmMsg = new ST_WMMESSAGE;
  456. pWmMsg->hWnd = (HWND)Handle;
  457. pWmMsg->pForm = (void*)this;
  458. pWmMsg->nMsg = D_FORMCALL;
  459. pWmMsg->sSender = "VMS0000M"; // 동적생성된 폼은 폼의 이름 +_1, +_2, ... 식으로 이름이 바뀐다.
  460. pWmMsg->sReceiver = String(pMenu->Tag);
  461. pWmMsg->sMsg = FVmsObj->Id;
  462. PostMessage(Application->MainForm->Handle, WM_PLUGINFORM, (WPARAM)pWmMsg, 0);
  463. #endif
  464. }
  465. //---------------------------------------------------------------------------
  466. void __fastcall TVMSFORM0::PnlNameClick(TObject *Sender)
  467. {
  468. if (FScrollBox) FScrollBox->SetFocus();
  469. if (FWndParent)
  470. {
  471. POST_MSG(FWndParent, WM_VMS_SELECT, (WPARAM)FVmsObj, (LPARAM)this);
  472. }
  473. }
  474. //---------------------------------------------------------------------------
  475. void __fastcall TVMSFORM0::PnlNameDblClick(TObject *Sender)
  476. {
  477. if (FScrollBox) FScrollBox->SetFocus();
  478. if (FWndParent)
  479. {
  480. POST_MSG(FWndParent, WM_VMS_SELECT_DBLCLICK, (WPARAM)FVmsObj, (LPARAM)this);
  481. }
  482. }
  483. //---------------------------------------------------------------------------