tbf/TestBenchFramework/UiControls/VirtualBenchStepsCtrl.cs
Milan Hanajik 1f590a71f5 Correct handling of up/down selection moves in TransitionStepsCtrl and VirtualBenchSteps
Exception not used during updates (when duration is invalid)
Minor resource change
2015-02-08 00:09:02 +01:00

225 lines
6.9 KiB
C#

using System.Collections.Generic;
using System.Windows.Forms;
using log4net;
using TBF.BenchControl;
using TBF.BenchControl.GenericDevices;
using TBF.Resources;
namespace TBF.UiControls
{
public partial class VirtualBenchStepsCtrl : BaseWithListViewEx<Entities.VirtualBenchStep>, ITabWithListViewEx
{
static readonly ILog log = LogManager.GetLogger(typeof(VirtualBenchStepsCtrl));
/// <summary>
/// Fixed ListViewEx columns
/// </summary>
enum Column
{
Duration,
FixedColumnsCount,
}
readonly int fixedCount = (int)Column.FixedColumnsCount;
Entities.VirtualBenchSequence sequence;
TransitionsDlg parent;
Control parentControl;
Control[] editors;
int fmPumpCount; /// Number of pumps with FM control
int regvCount; /// Number of regulating valves
int vCount; /// Number of valves
public VirtualBenchStepsCtrl()
: base()
{
}
public void Initialize(Entities.VirtualBenchSequence sequence, TransitionsDlg parent, Control parentControl)
{
this.sequence = sequence;
this.parent = parent;
this.parentControl = parentControl;
Name = sequence.Name;
MyItems = sequence.VirtualBenchSteps;
SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked);
SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing);
vCount = 0;
fmPumpCount = 0;
regvCount = 0;
///
/// ListViewEx columns
///
Columns.Add(Strings.Duration_s, 70 * parent.Dpi / PathsDlg.Dpi100pct);
//foreach (var vlv in parent.Valves)
//{
// if (vlv is BenchControl.GenericDevices.IPumpFM)
// {
// Columns.Add(vlv.Cfg.Name + " [%]", 45 * parent.Dpi / PathsDlg.Dpi100pct);
// fmPumpCount++;
// }
//}
//foreach (var rvlv in parent.RegulValves)
//{
// Columns.Add(rvlv.Cfg.Name + " [%]", 55 * parent.Dpi / PathsDlg.Dpi100pct);
//}
//foreach (var vlv in parent.Valves)
//{
// if (!(vlv is BenchControl.GenericDevices.IPumpFM))
// {
// Columns.Add(vlv.Cfg.Name, 40 * parent.Dpi / PathsDlg.Dpi100pct);
// vCount++;
// }
//}
///
/// Prepare valve combo-boxes
///
editors = new Control[fixedCount + vCount + fmPumpCount + regvCount];
editors[0] = new TextBox(); /// Duration
parent.Controls.Add(editors[0]);
//for (int i = fixedCount; i < fixedCount + fmPumpCount; i++)
//{
// ComboBox cb = new ComboBox();
// cb.Items.Add("---");
// cb.Items.Add(Strings.dflt);
// cb.Items.Add("0");
// cb.Items.Add("25");
// cb.Items.Add("50");
// cb.Items.Add("75");
// cb.Items.Add("100");
// editors[i] = cb;
// parent.Controls.Add(editors[i]);
//}
//for (int i = fixedCount + fmPumpCount; i < fixedCount + fmPumpCount + regvCount; i++)
//{
// ComboBox cb = new ComboBox();
// cb.Items.Add("---");
// cb.Items.Add("0");
// cb.Items.Add("25");
// cb.Items.Add("50");
// cb.Items.Add("75");
// cb.Items.Add("100");
// editors[i] = cb;
// parent.Controls.Add(editors[i]);
//}
//for (int i = fixedCount + fmPumpCount + regvCount; i < fixedCount + fmPumpCount + regvCount + vCount; i++)
//{
// ComboBox cb = new ComboBox();
// cb.Items.Add("---");
// cb.Items.Add(Strings.open);
// cb.Items.Add(Strings.close);
// editors[i] = cb;
// parent.Controls.Add(cb);
//}
base.RedrawAll();
}
void listViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if (!Unlocked || e.SubItem >= editors.Length) return;
StartEditing(editors[e.SubItem], e.Item, e.SubItem);
}
void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
if (e.SubItem == (int)Column.Duration)
{
int duration;
if (!int.TryParse(e.DisplayText, out duration) || duration <= 0)
{
e.DisplayText = e.Item.Text;
e.Cancel = true;
}
}
//else if ((e.SubItem >= fixedCount) && (e.SubItem < fixedCount + fmPumpCount))
//{
// float pct;
// if (!e.DisplayText.Equals("---") &&
// !e.DisplayText.Equals(Strings.dflt) &&
// !(Utils.TryParseUFloat(e.DisplayText, out pct) && (pct >= 0) && (pct <= 100.0f)))
// {
// e.DisplayText = e.Item.SubItems[e.SubItem].Text;
// e.Cancel = true;
// }
//}
//else if ((e.SubItem >= fixedCount + fmPumpCount) && (e.SubItem < fixedCount + fmPumpCount + regvCount))
//{
// float pct;
// if (!e.DisplayText.Equals("---") &&
// !(Utils.TryParseUFloat(e.DisplayText, out pct) && (pct >= 0) && (pct <= 100.0f)))
// {
// e.DisplayText = e.Item.SubItems[e.SubItem].Text;
// e.Cancel = true;
// }
//}
//else if ((e.SubItem >= fixedCount + fmPumpCount + regvCount) && (e.SubItem < fixedCount + fmPumpCount + regvCount + vCount))
//{
// if ((e.DisplayText != Strings.open) && (e.DisplayText != Strings.close) && (e.DisplayText != "---"))
// {
// e.DisplayText = e.Item.SubItems[e.SubItem].Text;
// e.Cancel = true;
// }
//}
}
public override void DrawOne(object myItem)
{
Entities.VirtualBenchStep step = (Entities.VirtualBenchStep)myItem;
ListViewItem lvi = new ListViewItem(step.Duration.ToString());
/// TODO: All the rest
lvi.Tag = step;
Items.Add(lvi);
}
public override void UpdateOne(ListViewItem lvi, object myItem)
{
Entities.VirtualBenchStep step = (Entities.VirtualBenchStep)myItem;
/// Duration
int duration;
if (int.TryParse(lvi.Text, out duration) && duration > 0)
{
step.Duration = duration;
}
else
{
lvi.Text = step.Duration.ToString();
}
// TODO: Replace the following:
//step.PumpWithFMPcts = fmPumpsPcts;
//step.RegulValvesPct = regulValvesPct;
//step.ValvesOpen = valvesOpen;
//step.ValvesClose = valvesClose;
}
public void AddOne()
{
base.AddOne(new Entities.VirtualBenchStep(MyItems.Count, sequence));
}
public new void RemoveSelected()
{
bool lastItemRemoved = base.RemoveSelected();
if (lastItemRemoved && parent != null)
{
parent.UpdateButtonStates(SharedButtons.SelectedItemPos.None);
}
}
}
}