/// /// Copyright (c) 2013-2017 Sensus Metering Systems /// using System; using System.Collections.Generic; using System.Windows.Forms; using log4net; using Config.Entities; using TBF.Resources; using TBF.UiBridge; namespace TBF.Screens { public partial class PicturesTabPageCtrl : UserControl { static readonly ILog log = LogManager.GetLogger(typeof(MainWnd)); CameraDisplayResolution resolution; IList cameraPictures; public PicturesTabPageCtrl() { InitializeComponent(); cameraPictures = new List(); 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 TBF.UiControls.CameraPictureCtrl(); break; case CameraDisplayResolution.Medium: ctrl = new TBF.UiControls.CameraPictureCtrl2(); break; case CameraDisplayResolution.Large: ctrl = new TBF.UiControls.CameraPictureCtrl3(); break; } cameraPictures.Add(ctrl as TBF.UiControls.ICameraPicture); picturesFlowLayoutPanel.Controls.Add(ctrl); (ctrl as TBF.UiControls.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; TBF.UiControls.ICameraPicture[] oriCamPictures = new TBF.UiControls.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 TBF.UiControls.CameraPictureCtrl(oriCamPictures[i]); break; case CameraDisplayResolution.Medium: ctrl = new TBF.UiControls.CameraPictureCtrl2(oriCamPictures[i]); break; case CameraDisplayResolution.Large: ctrl = new TBF.UiControls.CameraPictureCtrl3(oriCamPictures[i]); break; } cameraPictures.Add(ctrl as TBF.UiControls.ICameraPicture); picturesFlowLayoutPanel.Controls.Add(ctrl); } } } }