tbf/TestBenchFramework/UiControls/PathsHeatMetersCtrl.cs

237 lines
8.8 KiB
C#

///
/// Copyright (c) 2016 Sensus Metering Systems
///
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Forms;
using log4net;
using TBF.BenchControl;
using TBF.BenchControl.GenericDevices;
using TBF.Resources;
namespace TBF.UiControls
{
public class PathsHeatMetersCtrl : BaseWithListViewEx<Config.Entities.HeatMetersPath>, ITabWithListViewEx
{
static readonly ILog log = LogManager.GetLogger(typeof(PathsHeatMetersCtrl));
/// <summary>
/// Fixed ListViewEx columns
/// </summary>
enum Column
{
Name,
TwarmRef,
TcoldRef,
Tbath1,
Tbath2,
Tbath3,
Tbath4,
FixedColumnsCount,
}
readonly int fixedColumnsCount = (int)Column.FixedColumnsCount;
PathsDlg parent;
Control parentControl;
Control[] editors;
public PathsHeatMetersCtrl()
: base()
{
}
public void Initialize(PathsDlg parent, Control parentControl)
{
this.parent = parent;
this.parentControl = parentControl;
#if HEAT_METERS_SUPPORT
/// Load the paths
MyItems = parent.Session
.CreateQuery("FROM HeatMetersPath ORDER BY ItemNr")
.List<Config.Entities.HeatMetersPath>();
SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked);
SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing);
IList<ITempMeter> tempMeters = new List<ITempMeter>();
foreach (var cmpnt in parent.TbfComponents)
{
if (cmpnt is ITempMeter) tempMeters.Add(cmpnt as ITempMeter);
}
/// ListViewEx columns
TBF.LocalSettings ls = Program.LocalSettings;
Columns.Add(Strings.Name, (ls.HeatMetersColumnCount > 0) ? ls.HeatMetersColumnWidths[0] : 60 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(Strings.T_warm_ref, (ls.HeatMetersColumnCount > 1) ? ls.HeatMetersColumnWidths[1] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(Strings.T_cold_ref, (ls.HeatMetersColumnCount > 2) ? ls.HeatMetersColumnWidths[2] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(string.Format("{0} {1}", Strings.T_bath, 1), (ls.HeatMetersColumnCount > 3) ? ls.HeatMetersColumnWidths[3] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(string.Format("{0} {1}", Strings.T_bath, 2), (ls.HeatMetersColumnCount > 4) ? ls.HeatMetersColumnWidths[4] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(string.Format("{0} {1}", Strings.T_bath, 3), (ls.HeatMetersColumnCount > 5) ? ls.HeatMetersColumnWidths[5] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
Columns.Add(string.Format("{0} {1}", Strings.T_bath, 4), (ls.HeatMetersColumnCount > 6) ? ls.HeatMetersColumnWidths[6] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
int clmn = (int)Column.FixedColumnsCount;
for (int i = 0; i < Config.Data.WMsCount; i++)
{
Columns.Add(string.Format("{0} {1}", Strings.T_warm, i + 1), (ls.MetersColumnCount > clmn) ? ls.MetersColumnWidths[clmn] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
clmn++;
}
for (int i = 0; i < Config.Data.WMsCount; i++)
{
Columns.Add(string.Format("{0} {1}", Strings.T_cold, i + 1), (ls.MetersColumnCount > clmn) ? ls.MetersColumnWidths[clmn] : 50 * parent.Dpi / PathsDlg.Dpi100pct);
clmn++;
}
/// Temperatures, pressures
ComboBox tWarmCBox = new ComboBox();
ComboBox tColdCBox = new ComboBox();
foreach (var cmpnt in parent.TbfComponents)
{
if (cmpnt is BenchControl.GenericDevices.ITempMeter)
{
tWarmCBox.Items.Add(cmpnt.Cfg.Name);
tColdCBox.Items.Add(cmpnt.Cfg.Name);
}
}
editors = new Control[fixedColumnsCount + 2 * Config.Data.WMsCount];
///
editors[(int)Column.Name] = new TextBox(); /// Name
///
for (int i = 1; i < editors.Length; i++)
{
editors[i] = new ComboBox();
(editors[i] as ComboBox).Items.Add("---");
foreach (var t in tempMeters) (editors[i] as ComboBox).Items.Add(t.Name);
editors[i].Visible = false;
parent.Controls.Add(editors[i]);
}
base.RedrawAll();
#endif
}
void listViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
if (!Unlocked || e.SubItem >= editors.Length) return;
if ((e.Item.Tag is Config.Entities.IHasItemNr) &&
((e.Item.Tag as Config.Entities.IHasItemNr).ItemNr < FixedRowsCount) &&
(e.SubItem < fixedColumnsCount))
{
return;
}
StartEditing(editors[e.SubItem], e.Item, e.SubItem);
}
void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
}
public override void DrawOne(object myItem)
{
Config.Entities.HeatMetersPath entity = (Config.Entities.HeatMetersPath)myItem;
BenchControl.HeatMetersPath path = new BenchControl.HeatMetersPath(entity, parent.TbfComponents);
ListViewItem lvi = new ListViewItem(entity.Name);
lvi.SubItems.Add(path.TempMeterWarmRef != null ? path.TempMeterWarmRef.Cfg.Name : "---");
lvi.SubItems.Add(path.TempMeterColdRef != null ? path.TempMeterColdRef.Cfg.Name : "---");
lvi.SubItems.Add(path.TempMeterBath1 != null ? path.TempMeterBath1.Cfg.Name : "---");
lvi.SubItems.Add(path.TempMeterBath2 != null ? path.TempMeterBath2.Cfg.Name : "---");
lvi.SubItems.Add(path.TempMeterBath3 != null ? path.TempMeterBath3.Cfg.Name : "---");
lvi.SubItems.Add(path.TempMeterBath4 != null ? path.TempMeterBath4.Cfg.Name : "---");
for (int i = 0; i < Config.Data.WMsCount; i++)
{
lvi.SubItems.Add(path.TempMetersWarm[i] != null ? path.TempMetersWarm[i].Cfg.Name : "---");
}
for (int i = 0; i < Config.Data.WMsCount; i++)
{
lvi.SubItems.Add(path.TempMetersCold[i] != null ? path.TempMetersCold[i].Cfg.Name : "---");
}
lvi.Tag = entity;
Items.Add(lvi);
}
public override void UpdateOne(ListViewItem lvi, object myItem)
{
Config.Entities.HeatMetersPath entity = (Config.Entities.HeatMetersPath)myItem;
entity.Name = lvi.Text;
entity.TempWarmRef = lvi.SubItems[(int)Column.TwarmRef].Text == "---" ? null : lvi.SubItems[(int)Column.TwarmRef].Text;
entity.TempColdRef = lvi.SubItems[(int)Column.TcoldRef].Text == "---" ? null : lvi.SubItems[(int)Column.TcoldRef].Text;
entity.TempBath1 = lvi.SubItems[(int)Column.Tbath1].Text == "---" ? null : lvi.SubItems[(int)Column.Tbath1].Text;
entity.TempBath2 = lvi.SubItems[(int)Column.Tbath2].Text == "---" ? null : lvi.SubItems[(int)Column.Tbath2].Text;
entity.TempBath3 = lvi.SubItems[(int)Column.Tbath3].Text == "---" ? null : lvi.SubItems[(int)Column.Tbath3].Text;
entity.TempBath4 = lvi.SubItems[(int)Column.Tbath4].Text == "---" ? null : lvi.SubItems[(int)Column.Tbath4].Text;
for (int i = 0; i < Config.Data.WMsCount; i++)
{
int j = (int)Column.FixedColumnsCount + i;
entity.SetTempWarm(i, lvi.SubItems[j].Text == "---" ? null : lvi.SubItems[j].Text);
int k = (int)Column.FixedColumnsCount + Config.Data.WMsCount + i;
entity.SetTempCold(i, lvi.SubItems[k].Text == "---" ? null : lvi.SubItems[k].Text);
}
}
/// <summary>
/// Update the entities and save them to the database
/// </summary>
public new void OkBtnClicked()
{
base.OkBtnClicked();
#if HEAT_METERS_SUPPORT
/// Update the database
foreach (var entity in ToBeRemovedItems)
{
Config.FluentCommon.DeleteFromDb(parent.Session, entity);
}
foreach (var entity in MyItems)
{
Config.FluentCommon.SaveToDb(parent.Session, entity);
}
/// Update the column widths
Program.LocalSettings.HeatMetersColumnWidths = new int[Columns.Count];
for (int i = 0; i < Columns.Count; i++)
{
Program.LocalSettings.HeatMetersColumnWidths[i] = Columns[i].Width;
}
Program.LocalSettings.Save();
#endif
}
public void AddOne()
{
/// Find an unused test name
string newName;
for (int nameId = 1; true; nameId++)
{
newName = Strings.New_heat_meters_path_name + nameId.ToString();
bool notUsed = true;
foreach (var t in MyItems) if (t.Name.Equals(newName)) notUsed = false;
if (notUsed) break;
}
Config.Entities.HeatMetersPath entity = new Config.Entities.HeatMetersPath(newName, MyItems.Count);
base.AddOne(entity);
}
public new void RemoveSelected()
{
bool lastOneRemoved = base.RemoveSelected();
if (lastOneRemoved && parent != null)
{
parent.UpdateButtonStates(SharedButtons.SelectedItemPos.None);
}
}
}
}