/// /// Copyright (c) 2016-2017 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; using log4net; using Common.Forms; using TBF.Rig; using TBF.Rig.GenericDevices; using TBF.Resources; using TBF.UI; using TBF.UI.Shared; namespace TBF.UI.Bench.Paths { public class PathsHeatMetersCtrl : BaseWithListViewEx, ITabWithListViewEx { static readonly ILog log = LogManager.GetLogger(typeof(PathsHeatMetersCtrl)); /// /// Fixed ListViewEx columns /// enum Column { Name, TWarmFrom, TWarmTo, TColdFrom, TColdTo, TMRefW1, TMRefW2, TMRefC1, TMRefC2, TMWrkW1, TMWrkW2, TMWrkC1, TMWrkC2, 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 /// Load the paths MyItems = parent.Session.QueryOver() .OrderBy(x => x.ItemNr).Asc .List(); foreach (var path in MyItems) path.OriName = path.Name; SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked); SubItemRightClicked += new SubItemEventHandler(listViewEx_SubItemRightClicked); SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); IList tempMeters = new List(); 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 / Constants.Dpi100pct); Columns.Add(Strings.T_warm_from, (ls.HeatMetersColumnCount > 1) ? ls.HeatMetersColumnWidths[1] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.T_warm_to, (ls.HeatMetersColumnCount > 2) ? ls.HeatMetersColumnWidths[2] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.T_cold_from, (ls.HeatMetersColumnCount > 3) ? ls.HeatMetersColumnWidths[3] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.T_cold_to, (ls.HeatMetersColumnCount > 4) ? ls.HeatMetersColumnWidths[4] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_ref_warm, 1), (ls.HeatMetersColumnCount > 5) ? ls.HeatMetersColumnWidths[5] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_ref_warm, 2), (ls.HeatMetersColumnCount > 6) ? ls.HeatMetersColumnWidths[6] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_ref_cold, 1), (ls.HeatMetersColumnCount > 7) ? ls.HeatMetersColumnWidths[7] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_ref_cold, 2), (ls.HeatMetersColumnCount > 8) ? ls.HeatMetersColumnWidths[8] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_work_warm, 1), (ls.HeatMetersColumnCount > 9) ? ls.HeatMetersColumnWidths[9] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_work_warm, 2), (ls.HeatMetersColumnCount > 10) ? ls.HeatMetersColumnWidths[10] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_work_cold, 1), (ls.HeatMetersColumnCount > 11) ? ls.HeatMetersColumnWidths[11] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} {1}", Strings.T_work_cold, 2), (ls.HeatMetersColumnCount > 12) ? ls.HeatMetersColumnWidths[12] : 50 * parent.Dpi / Constants.Dpi100pct); /// Temperatures, pressures ComboBox tWarmCBox = new ComboBox(); ComboBox tColdCBox = new ComboBox(); foreach (var cmpnt in parent.TbfComponents) { if (cmpnt is Rig.GenericDevices.ITempMeter) { tWarmCBox.Items.Add(cmpnt.Cfg.Name); tColdCBox.Items.Add(cmpnt.Cfg.Name); } } editors = new Control[fixedColumnsCount]; /// for (int i = 0; i < (int)Column.TMRefW1; i++) { editors[i] = new TextBox(); /// Name editors[i].Visible = false; parent.Controls.Add(editors[i]); } for (int i = (int)Column.TMRefW1; 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_SubItemRightClicked(object sender, SubItemEventArgs e) { if (!Unlocked || e.SubItem >= editors.Length) return; if (DialogResult.Yes == MessageBox.Show(Strings.Do_you_want_to_copy_this_value_to_all_cells_below_this_cell, Strings.Confirmation, MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { int columnNr = e.SubItem; string value = null; System.Drawing.Color backColor = System.Drawing.Color.White; foreach (ListViewItem item in Items) { if (value != null && item.SubItems.Count > columnNr) { item.SubItems[columnNr].Text = value; item.SubItems[columnNr].BackColor = backColor; } else if (item == e.Item) { value = item.SubItems[columnNr].Text; backColor = item.SubItems[columnNr].BackColor; } } } } void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) { if (e.SubItem >= (int)Column.TWarmFrom && e.SubItem <= (int)Column.TColdTo) { try { Utils.ParseUFloat(e.DisplayText); } catch { /// NOK -> revert e.DisplayText = e.Item.SubItems[e.SubItem].Text; e.Cancel = true; } } } public override void DrawOne(object myItem) { Config.Entities.HeatMetersPath entity = (Config.Entities.HeatMetersPath)myItem; Rig.HeatMetersPath path = new Rig.HeatMetersPath(entity, parent.TbfComponents); ListViewItem lvi = new ListViewItem(entity.Name); lvi.SubItems.Add(path.TempWarmFrom.ToString()); lvi.SubItems.Add(path.TempWarmTo.ToString()); lvi.SubItems.Add(path.TempColdFrom.ToString()); lvi.SubItems.Add(path.TempColdTo.ToString()); lvi.SubItems.Add(path.TMeterRefWarm1 != null ? path.TMeterRefWarm1.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterRefWarm2 != null ? path.TMeterRefWarm2.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterRefCold1 != null ? path.TMeterRefCold1.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterRefCold2 != null ? path.TMeterRefCold2.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterWorkWarm1 != null ? path.TMeterWorkWarm1.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterWorkWarm2 != null ? path.TMeterWorkWarm2.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterWorkCold1 != null ? path.TMeterWorkCold1.Cfg.Name : "---"); lvi.SubItems.Add(path.TMeterWorkCold2 != null ? path.TMeterWorkCold2.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.TempWarmFrom = Utils.ParseUFloat(lvi.SubItems[(int)Column.TWarmFrom].Text); entity.TempWarmTo = Utils.ParseUFloat(lvi.SubItems[(int)Column.TWarmTo].Text); entity.TempColdFrom = Utils.ParseUFloat(lvi.SubItems[(int)Column.TColdFrom].Text); entity.TempColdTo = Utils.ParseUFloat(lvi.SubItems[(int)Column.TColdTo].Text); entity.TMeterRefWarm1 = lvi.SubItems[(int)Column.TMRefW1].Text == "---" ? null : lvi.SubItems[(int)Column.TMRefW1].Text; entity.TMeterRefWarm2 = lvi.SubItems[(int)Column.TMRefW2].Text == "---" ? null : lvi.SubItems[(int)Column.TMRefW2].Text; entity.TMeterRefCold1 = lvi.SubItems[(int)Column.TMRefC1].Text == "---" ? null : lvi.SubItems[(int)Column.TMRefC1].Text; entity.TMeterRefCold2 = lvi.SubItems[(int)Column.TMRefC2].Text == "---" ? null : lvi.SubItems[(int)Column.TMRefC2].Text; entity.TMeterWorkWarm1 = lvi.SubItems[(int)Column.TMWrkW1].Text == "---" ? null : lvi.SubItems[(int)Column.TMWrkW1].Text; entity.TMeterWorkWarm2 = lvi.SubItems[(int)Column.TMWrkW2].Text == "---" ? null : lvi.SubItems[(int)Column.TMWrkW2].Text; entity.TMeterWorkCold1 = lvi.SubItems[(int)Column.TMWrkC1].Text == "---" ? null : lvi.SubItems[(int)Column.TMWrkC1].Text; entity.TMeterWorkCold2 = lvi.SubItems[(int)Column.TMWrkC2].Text == "---" ? null : lvi.SubItems[(int)Column.TMWrkC2].Text; } 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); } } public string GetWarningsBeforeSaving(ref Dictionary renmInfo) { base.OkBtnClicked(); /// = UpdateAll() string warnings = string.Empty; #if HEAT_METERS foreach (var entity in ToBeRemovedItems) { if (!string.IsNullOrEmpty(entity.OriName)) { int occurances = 0; foreach (var tst in parent.Tests) if (!string.IsNullOrEmpty(tst.HeatMetersPath) && tst.HeatMetersPath.Equals(entity.OriName)) occurances++; if (occurances > 0) { warnings += string.Format(Strings._0_path_1_used_by_2_tests_will_be_removed_3, Strings.Heat_meter_sensors, entity.Name, occurances, Environment.NewLine); renmInfo.Add(entity.OriName, string.Empty); } } } foreach (var entity in MyItems) { if (!string.IsNullOrEmpty(entity.OriName) && entity.OriName != entity.Name) { int occurances = 0; foreach (var tst in parent.Tests) if (!string.IsNullOrEmpty(tst.HeatMetersPath) && tst.HeatMetersPath.Equals(entity.OriName)) occurances++; if (occurances > 0) { warnings += string.Format(Strings._0_path_1_used_by_2_tests_will_be_renamed_to_3_4, Strings.Heat_meter_sensors, entity.OriName, occurances, entity.Name, Environment.NewLine); renmInfo.Add(entity.OriName, entity.Name); } } } #endif return warnings; } public void UpdateRelatedItems(Dictionary renameInfo) { #if HEAT_METERS foreach (var ri in renameInfo) { var tests = parent.Session.QueryOver() .Where(x => x.HeatMetersPath == ri.Key) .List(); foreach (var t in tests) { t.HeatMetersPath = ri.Value; parent.Session.Update(t); } } #endif } /// /// Update the entities and save them to the database /// public new void OkBtnClicked() { base.OkBtnClicked(); #if HEAT_METERS /// Update the database foreach (var entity in ToBeRemovedItems) { parent.Session.Delete(entity); } foreach (var entity in MyItems) { parent.Session.SaveOrUpdate(entity); } SaveUISettings(); #endif } void SaveUISettings() { LocalSettings ls = Program.LocalSettings; /// Compare list view column widths with the saved ones bool anyColumnDiffers = false; if (Columns.Count != ls.HeatMetersColumnCount) { anyColumnDiffers = true; } else { for (int i = 0; i < Columns.Count; i++) { if (Columns[i].Width != ls.HeatMetersColumnWidths[i]) { anyColumnDiffers = true; break; } } } if (anyColumnDiffers) { /// Update column widths ls.HeatMetersColumnWidths = new int[Columns.Count]; for (int i = 0; i < Columns.Count; i++) { ls.HeatMetersColumnWidths[i] = Columns[i].Width; } ls.Save(); } } } }