198 lines
5.4 KiB
C#
198 lines
5.4 KiB
C#
///
|
|
/// Copyright (c) 2017 Sensus Metering Systems
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using log4net;
|
|
using TBF.Resources;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
|
|
namespace TBF.BenchControl.Network.Camera.Display
|
|
{
|
|
public partial class DisplayForm : Form, GenericDevices.IHasCompleted
|
|
{
|
|
private static readonly ILog log = LogManager.GetLogger(typeof(DisplayForm));
|
|
|
|
#region Closing this display from another thread
|
|
|
|
/// <summary>
|
|
/// Called from the state machine when an operation forces a modeless dialog close.
|
|
/// </summary>
|
|
public void CloseForm(object sender, EventArgs args)
|
|
{
|
|
if (CloseFormHandler == null) return;
|
|
try { CloseFormHandler(sender, null); }
|
|
catch (Exception e) { log.Error("CloseFormHandler(...) failed", e); }
|
|
}
|
|
public event EventHandler<EventArgs> CloseFormHandler;
|
|
|
|
public void StartCloseFormHandler()
|
|
{
|
|
CloseFormHandler += delegate(object sender, EventArgs args)
|
|
{
|
|
if (InvokeRequired) { Invoke(new EventHandler<EventArgs>(OnCloseForm), sender, args); }
|
|
else OnCloseForm(sender, args);
|
|
};
|
|
}
|
|
|
|
private void OnCloseForm(object sender, EventArgs args)
|
|
{
|
|
DialogResult = DialogResult.Cancel;
|
|
Close();
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary> Number of text boxes for serial numbers </summary>
|
|
readonly string[] imageFileNames;
|
|
readonly int imagesCount;
|
|
|
|
readonly GroupBox[] groupBoxes;
|
|
readonly PictureBox[] pictureBoxes;
|
|
readonly CheckBox[] checkBoxes;
|
|
readonly int boxesCount;
|
|
|
|
Timer myTimer;
|
|
|
|
|
|
public bool[] SelectedImages;
|
|
public DialogResult Result; /// DialogResult.None OK Retry or Cancel
|
|
|
|
|
|
/// Set to 'true' when the form closes
|
|
public bool Completed { get { return completed; } }
|
|
bool completed;
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="waterMetersCount">Number of text boxes for serial numbers</param>
|
|
public DisplayForm(string[] imageFileNames, string title)
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.imageFileNames = imageFileNames;
|
|
this.imagesCount = (imageFileNames == null) ? 0 : imageFileNames.Length;
|
|
|
|
groupBoxes = new GroupBox[] { groupBox1, groupBox2, groupBox3, groupBox4, groupBox5, groupBox6,
|
|
groupBox7, groupBox8, groupBox9, groupBox10, groupBox11, groupBox12 };
|
|
|
|
pictureBoxes = new PictureBox[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5, pictureBox6,
|
|
pictureBox7, pictureBox8, pictureBox9, pictureBox10, pictureBox11, pictureBox12 };
|
|
|
|
checkBoxes = new CheckBox[] { checkBox1, checkBox2, checkBox3, checkBox4, checkBox5, checkBox6,
|
|
checkBox7, checkBox8, checkBox9, checkBox10, checkBox11, checkBox12 };
|
|
|
|
boxesCount = pictureBoxes.Length;
|
|
|
|
Text = title;
|
|
|
|
int lastVisibleGroupBoxIx = 0;
|
|
for (int i = 0; i < boxesCount; i++)
|
|
{
|
|
if (i < imagesCount && !string.IsNullOrEmpty(imageFileNames[i]))
|
|
{
|
|
groupBoxes[i].Text = string.Format("{0} {1}", Strings.Water_Meter, i + 1);
|
|
checkBoxes[i].Checked = true;
|
|
checkBoxes[i].Text = Strings.Retry;
|
|
lastVisibleGroupBoxIx = i;
|
|
}
|
|
else
|
|
{
|
|
groupBoxes[i].Visible = false;
|
|
checkBoxes[i].Checked = false;
|
|
}
|
|
}
|
|
|
|
SelectedImages = new bool[imagesCount];
|
|
|
|
if (lastVisibleGroupBoxIx < 4)
|
|
Height = 321;
|
|
else if (lastVisibleGroupBoxIx < 8)
|
|
Height = 616;
|
|
|
|
Result = DialogResult.None;
|
|
completed = false;
|
|
StartCloseFormHandler();
|
|
}
|
|
|
|
/// <summary> Parameterless constructor for all watermeters </summary>
|
|
public DisplayForm()
|
|
: this(null, string.Empty)
|
|
{
|
|
}
|
|
|
|
private void CycleBeginningForm_Load(object sender, EventArgs e)
|
|
{
|
|
okButton.Text = Strings.OkBtnText;
|
|
retryButton.Text = Strings.Retry;
|
|
abortButton.Text = Strings.Abort;
|
|
|
|
myTimer = new Timer();
|
|
myTimer.Interval = (500);
|
|
myTimer.Tick += new EventHandler(MyTimer_Tick);
|
|
myTimer.Start();
|
|
}
|
|
|
|
private void MyTimer_Tick(object sender, EventArgs e)
|
|
{
|
|
for (int i = 0; i < Math.Min(imagesCount, boxesCount); i++)
|
|
{
|
|
if (imageFileNames[i] != null && System.IO.File.Exists(imageFileNames[i]) &&
|
|
pictureBoxes[i] != null && pictureBoxes[i].Image == null)
|
|
{
|
|
pictureBoxes[i].Image = Image.FromFile(imageFileNames[i]);
|
|
checkBoxes[i].Checked = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private void okButton_Click(object sender, EventArgs e)
|
|
{
|
|
log.Warn("OK clicked");
|
|
Result = DialogResult.OK;
|
|
CloseAfterButtonClick();
|
|
}
|
|
|
|
private void abortButton_Click(object sender, EventArgs e)
|
|
{
|
|
log.Warn("Abort clicked");
|
|
Result = DialogResult.Abort;
|
|
CloseAfterButtonClick();
|
|
}
|
|
|
|
private void retryButton_Click(object sender, EventArgs e)
|
|
{
|
|
log.Warn("Retry clicked");
|
|
Result = DialogResult.Retry;
|
|
CloseAfterButtonClick();
|
|
}
|
|
|
|
void CloseAfterButtonClick()
|
|
{
|
|
if (myTimer != null) myTimer.Stop();
|
|
UpdateData();
|
|
completed = true;
|
|
Close();
|
|
}
|
|
|
|
void UpdateData()
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
sb.Append("1 ");
|
|
for (int i = 0; i < Math.Min(imagesCount, boxesCount); i++)
|
|
{
|
|
SelectedImages[i] = checkBoxes[i].Checked;
|
|
sb.AppendFormat("{0}", checkBoxes[i].Checked ? "x" : "-");
|
|
}
|
|
sb.AppendFormat(" {0}", Math.Min(imagesCount, boxesCount));
|
|
|
|
log.WarnFormat("Data updated: {0}", sb.ToString());
|
|
}
|
|
}
|
|
}
|