167 lines
5.7 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|