tbf/TestBenchFramework/Screens/PicturesTabPageCtrl.cs

167 lines
5.7 KiB
C#

///
/// Copyright (c) 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;
using TBF.BenchControl;
using TBF.BenchControl.Network.Camera.CLP1611;
namespace TBF.Screens
{
public partial class PicturesTabPageCtrl : UserControl
{
static readonly ILog log = LogManager.GetLogger(typeof(MainWnd));
CameraDisplayResolution resolution;
IList<TBF.UiControls.ICameraPicture> cameraPictures;
public PicturesTabPageCtrl()
{
InitializeComponent();
cameraPictures = new List<TBF.UiControls.ICameraPicture>();
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<ImageEventArgs>(ShowImage), sender, args);
else
ShowImage(sender, args);
};
Bridge.CameraInfoHandler += delegate(object sender, CameraInfoEventArgs args)
{
if (InvokeRequired)
Invoke(new EventHandler<CameraInfoEventArgs>(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;
}
}
/// <summary>
/// Increase image resolution
/// </summary>
private void plusButton_Click(object sender, EventArgs e)
{
if (resolution < CameraDisplayResolution.Count - 1)
{
Program.LocalSettings.Resolution = ++resolution;
RedrawPictures();
}
}
/// <summary>
/// Decrease image resolution
/// </summary>
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);
}
}
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));
}
}
}