/// /// Copyright (c) 2017 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Windows.Forms; using log4net; using Config.Entities; using TBF.UiBridge; namespace TBF.UI.Camera { public partial class PicturesTabPageCtrl : UserControl { static readonly ILog log = LogManager.GetLogger(typeof(TBF.UI.MainWnd)); CameraDisplayResolution resolution; IList cameraPictures; public PicturesTabPageCtrl() { InitializeComponent(); cameraPictures = new List(); if (Program.LocalSettings != null) resolution = Program.LocalSettings.Resolution; System.Windows.Forms.Timer timer; timer = new System.Windows.Forms.Timer(); timer.Tick += (s, e) => { TimerTick(); }; timer.Interval = 250; timer.Start(); Bridge.ImageHandler += delegate(object sender, ImageEventArgs args) { if (InvokeRequired) Invoke(new EventHandler(ShowImage), sender, args); else ShowImage(sender, args); }; Bridge.CameraInfoHandler += delegate(object sender, CameraInfoEventArgs args) { if (InvokeRequired) Invoke(new EventHandler(ShowInfo), sender, args); else ShowInfo(sender, args); }; } private void TimerTick() { DateTime now = DateTime.Now; for (int i = 0; i < cameraPictures.Count; i++) { if (cameraPictures[i] != null) cameraPictures[i].UpdateLed(now); } } void ShowInfo(object sender, CameraInfoEventArgs args) { if (args.CameraIdx < cameraPictures.Count) { cameraPictures[args.CameraIdx].Caption = args.Info; } else if (args.CameraIdx == cameraPictures.Count) { UserControl ctrl; switch (resolution) { default: case CameraDisplayResolution.Small: ctrl = new CameraPictureCtrl(); break; case CameraDisplayResolution.Medium: ctrl = new CameraPictureCtrl2(); break; case CameraDisplayResolution.Large: ctrl = new CameraPictureCtrl3(); break; } cameraPictures.Add(ctrl as ICameraPicture); picturesFlowLayoutPanel.Controls.Add(ctrl); (ctrl as ICameraPicture).Caption = args.Info; } else { log.ErrorFormat("Unexpected camera: Idx={0} Info={1}", args.CameraIdx, args.Info); } } void ShowImage(object sender, ImageEventArgs args) { if (args.CameraIdx < cameraPictures.Count && cameraPictures[args.CameraIdx] != null) { cameraPictures[args.CameraIdx].NewImage = args.Image; } } /// /// Increase image resolution /// private void plusButton_Click(object sender, EventArgs e) { if (resolution < CameraDisplayResolution.Count - 1) { Program.LocalSettings.Resolution = ++resolution; RedrawPictures(); } } /// /// Decrease image resolution /// private void minusButton_Click(object sender, EventArgs e) { if (resolution > 0) { Program.LocalSettings.Resolution = --resolution; RedrawPictures(); } } void RedrawPictures() { int nrControls = cameraPictures.Count; ICameraPicture[] oriCamPictures = new ICameraPicture[nrControls]; for (int i = 0; i < nrControls; i++) oriCamPictures[i] = cameraPictures[i]; cameraPictures.Clear(); picturesFlowLayoutPanel.Controls.Clear(); for (int i = 0; i < nrControls; i++) { UserControl ctrl; switch (resolution) { default: case CameraDisplayResolution.Small: ctrl = new CameraPictureCtrl(oriCamPictures[i]); break; case CameraDisplayResolution.Medium: ctrl = new CameraPictureCtrl2(oriCamPictures[i]); break; case CameraDisplayResolution.Large: ctrl = new CameraPictureCtrl3(oriCamPictures[i]); break; } cameraPictures.Add(ctrl as ICameraPicture); picturesFlowLayoutPanel.Controls.Add(ctrl); } } private void grabButton_Click(object sender, EventArgs e) { Bridge.OnCameraUICmd(this, new CameraUICmdEventArgs(CameraUICmd.Grab, -1)); } private void liveButton_Click(object sender, EventArgs e) { Bridge.OnCameraUICmd(this, new CameraUICmdEventArgs(CameraUICmd.Live, -1)); } private void stopButton_Click(object sender, EventArgs e) { Bridge.OnCameraUICmd(this, new CameraUICmdEventArgs(CameraUICmd.Stop, -1)); } private void saveImageButton_Click(object sender, EventArgs e) { Bridge.OnCameraUICmd(this, new CameraUICmdEventArgs(CameraUICmd.SaveImage, -1)); } } }