tbf/TestBenchFramework/UiControls/BenchControlPanel.cs

295 lines
12 KiB
C#

///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using NHibernate;
using log4net;
using Config.Entities;
using TBF.UiBridge;
namespace TBF.UiControls
{
public partial class BenchControlPanel : UserControl
{
static readonly ILog log = LogManager.GetLogger(typeof(BenchControlPanel));
public string TestName;
// Original (enabled) colors of buttons and empty bench
Color colorStopEn;
Color colorTestsEn;
Color colorCycleEn;
Color colorPurgeEn;
Color colorAcceptEn;
Color colorEmptyEn;
Color colorOtherEn;
Color colorBenchEmpty;
// Colors of disabled buttons
Color colorStopDis;
Color colorTestsDis;
Color colorCycleDis;
Color colorPurgeDis;
Color colorAcceptDis;
Color colorEmptyDis;
Color colorOtherDis;
public BenchControlPanel()
{
InitializeComponent();
Bridge.ButtonsEtcHandler += delegate(object sender, ButtonsEtcEventArgs args)
{
if (InvokeRequired)
{
Invoke(new EventHandler<ButtonsEtcEventArgs>(OnButtonsEtc), sender, args);
}
else OnButtonsEtc(sender, args);
};
Bridge.ProcedureSelectedHandler += delegate(object sender, ProcedureSelectedEventArgs args)
{
if (InvokeRequired)
{
Invoke(new EventHandler<ProcedureSelectedEventArgs>(OnProcedureSelected), sender, args);
}
else OnProcedureSelected(sender, args);
};
Bridge.TestSelectedHandler += delegate(object sender, TestSelectedEventArgs args)
{
if (InvokeRequired)
{
Invoke(new EventHandler<TestSelectedEventArgs>(OnTestSelected), sender, args);
}
else OnTestSelected(sender, args);
};
#if DEBUG
nextButton.Visible = true;
nextButton.Enabled = true;
#endif
}
int Lghtr(int component)
{
return 255 - (255 - component) / 2;
}
private void BenchControlPanel_Load(object sender, EventArgs e)
{
// Original (enabled) colors of buttons
colorStopEn = stopBtn.BackColor;
colorTestsEn = startTestBtn.BackColor;
colorCycleEn = startCycleBtn.BackColor;
colorPurgeEn = purgeBeginBtn.BackColor;
colorAcceptEn = acceptResultsBtn.BackColor;
colorEmptyEn = emptyTank1Btn.BackColor;
colorOtherEn = breakBtn.BackColor;
colorBenchEmpty = emptyGroupBox.BackColor;
// Colors of disabled buttons
colorStopDis = Color.FromArgb(Lghtr(colorStopEn.R), Lghtr(colorStopEn.G), Lghtr(colorStopEn.B));
colorTestsDis = Color.FromArgb(Lghtr(colorTestsEn.R), Lghtr(colorTestsEn.G), Lghtr(colorTestsEn.B));
colorCycleDis = Color.FromArgb(Lghtr(colorCycleEn.R), Lghtr(colorCycleEn.G), Lghtr(colorCycleEn.B));
colorPurgeDis = Color.FromArgb(Lghtr(colorPurgeEn.R), Lghtr(colorPurgeEn.G), Lghtr(colorPurgeEn.B));
colorAcceptDis = Color.FromArgb(Lghtr(colorAcceptEn.R), Lghtr(colorAcceptEn.G), Lghtr(colorAcceptEn.B));
colorEmptyDis = Color.FromArgb(Lghtr(colorEmptyEn.R), Lghtr(colorEmptyEn.G), Lghtr(colorEmptyEn.B));
colorOtherDis = Color.FromArgb(Lghtr(colorOtherEn.R), Lghtr(colorOtherEn.G), Lghtr(colorOtherEn.B));
}
/// <summary>
/// Read the database and re-initialize testComboBox items.
/// Try to preserve the original selection.
/// </summary>
public void ReloadTests()
{
if (Program.MainWnd.ProcedureName == null) return;
string oriTestName = testComboBox.Text;
IList<Procedure> procedures = Config.FluentCommon.CreateSession(Config.Database.Procedures)
.CreateQuery("FROM Procedure WHERE ProcedureState = 'Active' AND Name = :name")
.SetParameter("name", Program.MainWnd.ProcedureName)
.List<Procedure>();
if (procedures.Count != 1)
{
testComboBox.Text = string.Empty;
TestName = null;
Program.MainWnd.CurrentProcedure = null;
return;
}
Program.MainWnd.CurrentProcedure = procedures[0];
testComboBox.Items.Clear();
foreach (var test in procedures[0].Tests)
{
for (int i = 1; i <= test.Repeats; i++)
{
testComboBox.Items.Add(Utils.TestTitle(test, i));
}
}
if (testComboBox.Items.Contains(oriTestName))
{
testComboBox.Text = oriTestName;
TestName = oriTestName;
}
else if (procedures[0].Tests.Count > 0)
{
Test test = procedures[0].Tests[0];
string title;
if (test.Repeats == 1)
{
if (test.Part == 0)
title = test.Name; /// Single test
else
title = string.Format("{0} ({1})", test.Name, test.Part); /// A part of a single test
}
else
{
title = string.Format("{0} ({1}/{2})", test.Name, 1, test.Repeats); /// More test repetitions
}
testComboBox.Text = title;
TestName = title;
}
else
{
testComboBox.Text = string.Empty;
TestName = null;
}
}
private void testComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
TestName = testComboBox.Text;
startTestBtn.Select();
}
private void startTestBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.StartTest); }
private void startQ1Btn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.StartQ1); }
private void startQ2Btn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.StartQ2); }
private void startQ3Btn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.StartQ3); }
private void startCycleBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.StartCycle); }
private void stopBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.Stop); }
private void purgeBeginBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.PurgeBegin); }
private void purgeEndBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.PurgeEnd); }
private void emptyTank1Btn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.EmptyTank1); }
private void emptyTank2Btn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.EmptyTank2); }
private void breakBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.Break); }
private void resetResultsBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.ResetResults); }
private void acceptResultsBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.AcceptResults); }
private void cameraTestBtn_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.CameraTest); }
private void sensitivityTestBtn_Click(object sender, EventArgs e){ Bridge.Ui2Bench(UI2BenchCmd.SensitivityTest); }
private void button1_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.B1); }
private void button2_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.B2); }
private void nextButton_Click(object sender, EventArgs e) { Bridge.Ui2Bench(UI2BenchCmd.Next); }
/// <summary>
/// Processes a pressed keys.
/// </summary>
/// <param name="key">key (char)</param>
/// <returns>true when the key is handled, otherwise false</returns>
public bool ProcessKey(char key)
{
switch (key)
{
case '0': if (stopBtn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.Stop); } return true;
case '1': if (startQ1Btn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.StartQ1); } return true;
case '2': if (startQ2Btn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.StartQ2); } return true;
case '3': if (startQ3Btn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.StartQ3); } return true;
case '4': if (startTestBtn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.StartTest); } return true;
case '5': if (startCycleBtn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.StartCycle); } return true;
case '6': if (purgeBeginBtn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.PurgeBegin); } return true;
case '7': if (purgeEndBtn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.PurgeEnd); } return true;
case '8': if (emptyTank1Btn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.EmptyTank1); } return true;
case '9': if (emptyTank2Btn.Enabled) { Bridge.Ui2Bench(UI2BenchCmd.EmptyTank2); } return true;
default:
return false;
}
}
public void OnProcedureSelected(object sender, ProcedureSelectedEventArgs args)
{
ReloadTests();
}
public void OnTestSelected(object sender, TestSelectedEventArgs args)
{
testComboBox.Text = args.Test.Name;
}
public void OnButtonsEtc(object sender, ButtonsEtcEventArgs args)
{
if ((args.Flags & ButtonsEtc.ShowBenchEmpty) != 0)
{
purgeGroupBox.BackColor = colorBenchEmpty;
return;
}
else if ((args.Flags & ButtonsEtc.ShowBenchFilled) != 0)
{
purgeGroupBox.BackColor = Color.RoyalBlue;
return;
}
testComboBox.Enabled = ((args.Flags & ButtonsEtc.TestCmbBoxEn) != 0);
stopBtn.Enabled = ((args.Flags & ButtonsEtc.StopBtnEn) != 0);
stopBtn.BackColor = stopBtn.Enabled ? colorStopEn : colorStopDis;
startTestBtn.Enabled = ((args.Flags & ButtonsEtc.StartTestBtnsEn) != 0);
startTestBtn.BackColor = startTestBtn.Enabled ? colorTestsEn : colorTestsDis;
startQ1Btn.Enabled = ((args.Flags & ButtonsEtc.StartTestBtnsEn) != 0);
startQ1Btn.BackColor = startQ1Btn.Enabled ? colorTestsEn : colorTestsDis;
startQ2Btn.Enabled = ((args.Flags & ButtonsEtc.StartTestBtnsEn) != 0);
startQ2Btn.BackColor = startQ2Btn.Enabled ? colorTestsEn : colorTestsDis;
startQ3Btn.Enabled = ((args.Flags & ButtonsEtc.StartTestBtnsEn) != 0);
startQ3Btn.BackColor = startQ3Btn.Enabled ? colorTestsEn : colorTestsDis;
startCycleBtn.Enabled = ((args.Flags & ButtonsEtc.StartCycleBtnEn) != 0);
startCycleBtn.BackColor = startCycleBtn.Enabled ? colorCycleEn : colorCycleDis;
purgeBeginBtn.Enabled = ((args.Flags & ButtonsEtc.PurgeBeginBtnEn) != 0);
purgeBeginBtn.BackColor = purgeBeginBtn.Enabled ? colorPurgeEn : colorPurgeDis;
purgeEndBtn.Enabled = ((args.Flags & ButtonsEtc.PurgeEndBtnEn) != 0);
purgeEndBtn.BackColor = purgeEndBtn.Enabled ? colorPurgeEn : colorPurgeDis;
emptyTank1Btn.Enabled = ((args.Flags & ButtonsEtc.EmptyTankBtn1En) != 0);
emptyTank1Btn.BackColor = emptyTank1Btn.Enabled ? colorEmptyEn : colorEmptyDis;
emptyTank2Btn.Enabled = ((args.Flags & ButtonsEtc.EmptyTankBtn2En) != 0);
emptyTank2Btn.BackColor = emptyTank2Btn.Enabled ? colorEmptyEn : colorEmptyDis;
resetResultsBtn.Enabled = ((args.Flags & ButtonsEtc.ResetResultsBtnEn) != 0);
resetResultsBtn.BackColor = resetResultsBtn.Enabled ? colorStopEn : colorStopDis;
acceptResultsBtn.Enabled = ((args.Flags & ButtonsEtc.AcceptResultsBtnEn) != 0);
acceptResultsBtn.BackColor = acceptResultsBtn.Enabled ? colorAcceptEn : colorAcceptDis;
breakBtn.Enabled = ((args.Flags & ButtonsEtc.Break) != 0);
breakBtn.BackColor = breakBtn.Enabled ? colorOtherEn : colorOtherDis;
cameraTestBtn.Enabled = ((args.Flags & ButtonsEtc.CalibrationBtnEn) != 0);
cameraTestBtn.BackColor = cameraTestBtn.Enabled ? colorOtherEn : colorOtherDis;
sensitivityTestBtn.Enabled = ((args.Flags & ButtonsEtc.SensitivityTestBtnEn) != 0);
sensitivityTestBtn.BackColor = sensitivityTestBtn.Enabled ? colorOtherEn : colorOtherDis;
}
}
}