/// /// Copyright (c) 2013-2022 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; using System.Drawing; using System.Text; using System.Windows.Forms; using log4net; using Common; using Common.Forms; using Config.Entities; using TBF.Rig; using TBF.Rig.GenericDevices; using TBF.Resources; using TBF.UI.Shared; namespace TBF.UI.Bench.Paths { public class PathsOutputCtrl : BaseWithListViewEx, ITabWithListViewEx { static readonly ILog log = LogManager.GetLogger(typeof(PathsOutputCtrl)); /// /// Fixed ListViewEx columns /// enum Column { Name, Qfrom, Qto, FlowUnit, Selector, RefFlowmtr, RegulValve, RegulMinStep, PidCoef, Div, Tdiv, Scale, StartValve1, InvertSV1, StartValve2, InvertSV2, LagSV2, StartValve3, InvertSV3, LagSV3, FixedColumnsCount, } readonly int fixedColumnsCount = (int)Column.FixedColumnsCount; int valvescount; int regulValvesCount; PathsDlg parent; Control parentControl; Control[] editors; public PathsOutputCtrl() : base() { FixedRowsCount = 1; } public void Initialize(PathsDlg parent, Control parentControl) { this.parent = parent; this.parentControl = parentControl; /// Load the paths MyItems = parent.Session.QueryOver() .OrderBy(x => x.ItemNr).Asc .List(); foreach (var path in MyItems) { path.OriName = path.Name; path.FlowUnit = TBF.Rig.Sequences.ProcessData.FlowUnit; } SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked); SubItemRightClicked += new SubItemEventHandler(listViewEx_SubItemRightClicked); SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing); /// ListViewEx columns TBF.LocalSettings ls = Program.LocalSettings; Columns.Add(Strings.Name, (ls.OutputColumnCount > 0) ? ls.OutputColumnWidths[0] : 60 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Q_from, (ls.OutputColumnCount > 1) ? ls.OutputColumnWidths[1] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Q_to, (ls.OutputColumnCount > 2) ? ls.OutputColumnWidths[2] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add("Unit", (ls.OutputColumnCount > 3) ? ls.OutputColumnWidths[3] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add("Selector", (ls.OutputColumnCount > 4) ? ls.OutputColumnWidths[4] : 60 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Flowmeter, (ls.OutputColumnCount > 5) ? ls.OutputColumnWidths[5] : 85 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Reg_valve, (ls.OutputColumnCount > 6) ? ls.OutputColumnWidths[6] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.RegulMinStep, (ls.OutputColumnCount > 7) ? ls.OutputColumnWidths[7] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.PID, (ls.OutputColumnCount > 7) ? ls.OutputColumnWidths[7] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Diverter, (ls.OutputColumnCount > 8) ? ls.OutputColumnWidths[8] : 60 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.T_div, (ls.OutputColumnCount > 9) ? ls.OutputColumnWidths[9] : 70 * parent.Dpi / Constants.Dpi100pct); Columns.Add(Strings.Balance, (ls.OutputColumnCount > 10) ? ls.OutputColumnWidths[10] : 50 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} 1", Strings.StartValve), (ls.OutputColumnCount > 11) ? ls.OutputColumnWidths[11] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("Inv. SV1"), (ls.OutputColumnCount > 12) ? ls.OutputColumnWidths[12] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} 2", Strings.StartValve), (ls.OutputColumnCount > 13) ? ls.OutputColumnWidths[13] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("Inv.SV2"), (ls.OutputColumnCount > 14) ? ls.OutputColumnWidths[14] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("Lag SV2"), (ls.OutputColumnCount > 15) ? ls.OutputColumnWidths[15] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("{0} 3", Strings.StartValve), (ls.OutputColumnCount > 16) ? ls.OutputColumnWidths[16] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("Inv.SV3"), (ls.OutputColumnCount > 17) ? ls.OutputColumnWidths[17] : 80 * parent.Dpi / Constants.Dpi100pct); Columns.Add(string.Format("Lag SV3"), (ls.OutputColumnCount > 18) ? ls.OutputColumnWidths[18] : 80 * parent.Dpi / Constants.Dpi100pct); valvescount = 0; regulValvesCount = 0; int clmn = (int)Column.FixedColumnsCount; /// foreach (var vlv in parent.Valves) { if (vlv.Category == ValveCategory.Output) { Columns.Add(vlv.Name, (ls.OutputColumnCount > clmn) ? ls.OutputColumnWidths[clmn] : 50 * parent.Dpi / Constants.Dpi100pct); clmn++; valvescount++; } } foreach (var rv in parent.OutputRegValves) { Columns.Add(string.Format("{0} [%]", rv.Name), (ls.OutputColumnCount > clmn) ? ls.OutputColumnWidths[clmn] : 55 * parent.Dpi / Constants.Dpi100pct); clmn++; regulValvesCount++; } /// Prepare fixed columns combo boxes ComboBox flowMeterComboBox = new ComboBox(); ComboBox regulValveComboBox = new ComboBox(); ComboBox RegulMinStepComboBox = new ComboBox(); ComboBox diverterComboBox = new ComboBox(); ComboBox tempMeterDivComboBox = new ComboBox(); ComboBox scaleComboBox = new ComboBox(); ComboBox startValve1ComboBox = new ComboBox(); ComboBox invertSV1ComboBox = new ComboBox(); ComboBox startValve2ComboBox = new ComboBox(); ComboBox invertSV2ComboBox = new ComboBox(); TextBox lagSV2TextBox = new TextBox(); ComboBox startValve3ComboBox = new ComboBox(); ComboBox invertSV3ComboBox = new ComboBox(); TextBox lagSV3TextBox = new TextBox(); flowMeterComboBox.Items.Add("---"); regulValveComboBox.Items.Add("---"); RegulMinStepComboBox.Items.Add("---"); diverterComboBox.Items.Add("---"); tempMeterDivComboBox.Items.Add("---"); scaleComboBox.Items.Add("---"); startValve1ComboBox.Items.Add("---"); invertSV1ComboBox.Items.Add(Strings.no); invertSV1ComboBox.Items.Add(Strings.yes); startValve2ComboBox.Items.Add("---"); invertSV2ComboBox.Items.Add(Strings.no); invertSV2ComboBox.Items.Add(Strings.yes); startValve3ComboBox.Items.Add("---"); invertSV3ComboBox.Items.Add(Strings.no); invertSV3ComboBox.Items.Add(Strings.yes); foreach (var cmpnt in parent.TbfComponents) { if (cmpnt is IFlowMeter) flowMeterComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IRegValve) regulValveComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IDiverter) diverterComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is ITempMeter) tempMeterDivComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IScaleOrTank) scaleComboBox.Items.Add(cmpnt.Cfg.Name); if (cmpnt is IValve && (cmpnt as IValve).CoupledTo == null) { startValve1ComboBox.Items.Add(cmpnt.Cfg.Name); startValve2ComboBox.Items.Add(cmpnt.Cfg.Name); startValve3ComboBox.Items.Add(cmpnt.Cfg.Name); } } /// Flow unit var flowUnitBox = new ComboBox(); for (Unit u = 0; u < Unit.Count; u++) if (Units.IsFlow(u)) flowUnitBox.Items.Add(u.ToDescription()); editors = new Control[fixedColumnsCount + valvescount + regulValvesCount]; /// editors[(int)Column.Name] = new TextBox(); /// Name editors[(int)Column.Qfrom] = new TextBox(); /// Q_from editors[(int)Column.Qto] = new TextBox(); /// Q_to editors[(int)Column.FlowUnit] = flowUnitBox; /// Flow unit editors[(int)Column.Selector] = new TextBox(); /// Selector editors[(int)Column.RefFlowmtr] = flowMeterComboBox; editors[(int)Column.RegulValve] = regulValveComboBox; editors[(int)Column.RegulMinStep] = RegulMinStepComboBox; editors[(int)Column.PidCoef] = new TextBox(); /// PID editors[(int)Column.Div] = diverterComboBox; editors[(int)Column.Tdiv] = tempMeterDivComboBox; editors[(int)Column.Scale] = scaleComboBox; editors[(int)Column.StartValve1] = startValve1ComboBox; editors[(int)Column.InvertSV1] = invertSV1ComboBox; editors[(int)Column.StartValve2] = startValve2ComboBox; editors[(int)Column.InvertSV2] = invertSV2ComboBox; editors[(int)Column.LagSV2] = lagSV2TextBox; editors[(int)Column.StartValve3] = startValve3ComboBox; editors[(int)Column.InvertSV3] = invertSV3ComboBox; editors[(int)Column.LagSV3] = lagSV3TextBox; /// Prepare valve combo-boxes (max. 64 valves) for (int i = 0; i < valvescount; i++) { ComboBox cb = new ComboBox(); cb.Items.Add("---"); cb.Items.Add(Strings.open); cb.Items.Add(Strings.close); editors[fixedColumnsCount + i] = cb; } /// Prepare regul. valve combo-boxes for (int i = 0; i < regulValvesCount; 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[fixedColumnsCount + valvescount + i] = cb; } /// for (int i = 0; i < editors.Length; i++) { editors[i].Visible = false; parent.Controls.Add(editors[i]); } RegulMinStepComboBox.Items.Add("0"); RegulMinStepComboBox.Items.Add("50"); RegulMinStepComboBox.Items.Add("100"); RegulMinStepComboBox.Items.Add("150"); RegulMinStepComboBox.Items.Add("200"); RegulMinStepComboBox.Items.Add("250"); RegulMinStepComboBox.Items.Add("300"); base.RedrawAll(); } void listViewEx_SubItemClicked(object sender, SubItemEventArgs e) { if (e.SubItem != (int)Column.FlowUnit && (!Unlocked || e.SubItem >= editors.Length)) return; if ((e.Item.Tag is IHasItemNr) && ((e.Item.Tag as 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; if (columnNr == (int)Column.FlowUnit) UpdateFlow(item, Units.FromDescription(value)); } else if (item == e.Item) { value = item.SubItems[columnNr].Text; backColor = item.SubItems[columnNr].BackColor; } } } } void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e) { var entity = e.Item.Tag as Config.Entities.OutputPath; double ddummy; if (e.SubItem >= fixedColumnsCount && e.SubItem < fixedColumnsCount + valvescount) { e.Item.SubItems[e.SubItem].BackColor = e.DisplayText == Strings.open ? Color.LightGray : Color.White; } else if (e.SubItem >= fixedColumnsCount + valvescount) { e.Item.SubItems[e.SubItem].BackColor = (e.DisplayText != "0" && e.DisplayText != "---") ? Color.LightGray : Color.White; } else if (e.SubItem == (int)Column.Qfrom) { if (Utils.TryParseUDouble(e.DisplayText, out ddummy)) { entity.QfromTextChngd = true; } else { e.DisplayText = e.Item.SubItems[e.SubItem].Text; e.Cancel = true; } } else if (e.SubItem == (int)Column.Qto) { if (Utils.TryParseUDouble(e.DisplayText, out ddummy)) { entity.QtoTextChngd = true; } else { e.DisplayText = e.Item.SubItems[e.SubItem].Text; e.Cancel = true; } } else if (e.SubItem == (int)Column.FlowUnit) { Unit newUnit = Units.FromDescription(e.DisplayText); if (Units.IsFlow(newUnit)) { UpdateFlow(e.Item, newUnit); } else { e.DisplayText = e.Item.SubItems[e.SubItem].Text; e.Cancel = true; } } } void UpdateFlow(ListViewItem item, Unit newUnit) { var entity = item.Tag as Config.Entities.OutputPath; if (entity == null || !Units.IsFlow(newUnit) || newUnit == entity.FlowUnit) return; Unit oriUnit = entity.FlowUnit; entity.FlowUnit = newUnit; int ix = (int)Column.Qfrom; double flowM3ph = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text)); item.SubItems[ix].Text = Units.ConvertTo(newUnit, entity.QfromTextChngd ? flowM3ph : entity.Qfrom).ToString(); ix = (int)Column.Qto; flowM3ph = Units.ConvertFrom(oriUnit, Utils.ParseUDouble(item.SubItems[ix].Text)); item.SubItems[ix].Text = Units.ConvertTo(newUnit, entity.QtoTextChngd ? flowM3ph : entity.Qto).ToString(); } public override void DrawOne(object myItem) { Config.Entities.OutputPath entity = (Config.Entities.OutputPath)myItem; Rig.OutputPath path = new Rig.OutputPath(entity, parent.TbfComponents); ListViewItem lvi = new ListViewItem(entity.Name); lvi.UseItemStyleForSubItems = false; lvi.SubItems.Add(Units.ConvertTo(entity.FlowUnit, path.Qfrom).ToString()); /// Q_from lvi.SubItems.Add(Units.ConvertTo(entity.FlowUnit, path.Qto).ToString()); /// Q_to lvi.SubItems.Add(entity.FlowUnit.ToDescription()); lvi.SubItems.Add(path.Selector); lvi.SubItems.Add((path.FlowMeter != null) ? path.FlowMeter.Cfg.Name : "---"); lvi.SubItems.Add((path.RegValve != null) ? path.RegValve.Cfg.Name : "---"); lvi.SubItems.Add((path.RegValve != null) ? (path.RegulMinStep * 50).ToString() : "---"); lvi.SubItems.Add(path.PidCoef.ToString("F1")); lvi.SubItems.Add((path.Diverter != null) ? path.Diverter.Cfg.Name : "---"); lvi.SubItems.Add((path.TempMtrDiv != null) ? path.TempMtrDiv.Cfg.Name : "---"); lvi.SubItems.Add((path.Scale != null) ? path.Scale.Cfg.Name : "---"); lvi.SubItems.Add((path.StartValve1 != null) ? path.StartValve1.Cfg.Name : "---"); lvi.SubItems.Add(path.InvertSV1 ? Strings.yes : Strings.no); lvi.SubItems.Add((path.StartValve2 != null) ? path.StartValve2.Cfg.Name : "---"); lvi.SubItems.Add(path.InvertSV2 ? Strings.yes : Strings.no); lvi.SubItems.Add(path.LagSV2.ToString()); lvi.SubItems.Add((path.StartValve3 != null) ? path.StartValve3.Cfg.Name : "---"); lvi.SubItems.Add(path.InvertSV3 ? Strings.yes : Strings.no); lvi.SubItems.Add(path.LagSV3.ToString()); foreach (var valve in parent.Valves) { int subItemNr = lvi.SubItems.Count; if (valve.Category == ValveCategory.Output) { if (path.ValvesOpen != null && path.ValvesOpen.Contains(valve)) { lvi.SubItems.Add(Strings.open); lvi.SubItems[subItemNr].BackColor = Color.LightGray; } else if (path.ValvesClose != null && path.ValvesClose.Contains(valve)) { lvi.SubItems.Add(Strings.close); lvi.SubItems[subItemNr].BackColor = Color.White; } else { lvi.SubItems.Add("---"); lvi.SubItems[subItemNr].BackColor = Color.White; } } } foreach (var rvp in path.RegVPositions) { int subItemNr = lvi.SubItems.Count; if (0 <= rvp.Position && rvp.Position <= 100) { float rvPos = rvp.Position; lvi.SubItems.Add(rvPos.ToString()); lvi.SubItems[subItemNr].BackColor = (rvPos == 0) ? Color.White : Color.LightGray; } else { lvi.SubItems.Add("---"); lvi.SubItems[subItemNr].BackColor = Color.White; } } lvi.Tag = entity; Items.Add(lvi); } public override void UpdateOne(ListViewItem lvi, object myItem) { Config.Entities.OutputPath entity = (Config.Entities.OutputPath)myItem; entity.Name = lvi.Text; double Qfrom; bool allOk = Utils.TryParseUDouble(lvi.SubItems[(int)Column.Qfrom].Text, out Qfrom); entity.Qfrom = Units.ConvertFrom(entity.FlowUnit, Qfrom); double Qto; allOk &= Utils.TryParseUDouble(lvi.SubItems[(int)Column.Qto].Text, out Qto); entity.Qto = Units.ConvertFrom(entity.FlowUnit, Qto); entity.Selector = lvi.SubItems[(int)Column.Selector].Text; entity.FlowMeter = lvi.SubItems[(int)Column.RefFlowmtr].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RefFlowmtr].Text; entity.RegValve = lvi.SubItems[(int)Column.RegulValve].Text.Equals("---") ? null : lvi.SubItems[(int)Column.RegulValve].Text; int val; int.TryParse(lvi.SubItems[(int)Column.RegulMinStep].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.RegulMinStep].Text, out val); entity.RegulMinStep = val / 50; float pid; allOk &= Utils.TryParseSFloat(lvi.SubItems[(int)Column.PidCoef].Text, out pid); entity.PidCoef = pid; entity.Diverter = lvi.SubItems[(int)Column.Div].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Div].Text; entity.TempMtrDiv = lvi.SubItems[(int)Column.Tdiv].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Tdiv].Text; entity.Scale = lvi.SubItems[(int)Column.Scale].Text.Equals("---") ? null : lvi.SubItems[(int)Column.Scale].Text; string sv1 = lvi.SubItems[(int)Column.StartValve1].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve1].Text; bool invertSV1 = lvi.SubItems[(int)Column.InvertSV1].Text.Equals(Strings.yes); string sv2 = lvi.SubItems[(int)Column.StartValve2].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve2].Text; bool invertSV2 = lvi.SubItems[(int)Column.InvertSV2].Text.Equals(Strings.yes); int lagSV2 = 0; int.TryParse(lvi.SubItems[(int)Column.LagSV2].Text, out lagSV2); string sv3 = lvi.SubItems[(int)Column.StartValve3].Text.Equals("---") ? string.Empty : lvi.SubItems[(int)Column.StartValve3].Text; bool invertSV3 = lvi.SubItems[(int)Column.InvertSV3].Text.Equals(Strings.yes); int lagSV3 = 0; int.TryParse(lvi.SubItems[(int)Column.LagSV3].Text, out lagSV3); /// entity.StartValve = string.Format("{0}~{1}~{2}~{3}~{4}~{5}~{6}~{7}", sv1, (invertSV1 ? "i" : "n"), sv2, (invertSV2 ? "i" : "n"), lagSV2, sv3, (invertSV3 ? "i" : "n"), lagSV3); string valvesOpen = string.Empty; string valvesClose = string.Empty; int k = 0; foreach (var valve in parent.Valves) { if (valve.Category == ValveCategory.Output) { string text = lvi.SubItems[fixedColumnsCount + k].Text; if (text.Equals(Strings.open)) { if (valvesOpen != string.Empty) valvesOpen += ";"; valvesOpen += valve.Cfg.Name; } if (text.Equals(Strings.close)) { if (valvesClose != string.Empty) valvesClose += ";"; valvesClose += valve.Cfg.Name; } k++; } } entity.ValvesOpen = valvesOpen; entity.ValvesClose = valvesClose; StringBuilder sb = new StringBuilder(); for (int i = 0; i < regulValvesCount; i++) { float pct; string text = lvi.SubItems[fixedColumnsCount + valvescount + i].Text; if (Utils.TryParseUFloat(text, out pct) && pct >= 0 && pct <= 100.0f) { sb.Append(pct.ToString()); } else { sb.Append("-1"); } if (i != regulValvesCount - 1) { sb.Append(";"); } } entity.RegVPositions = sb.ToString(); } public void AddOne() { Config.Entities.OutputPath entity; if (MyItems.Count < FixedRowsCount) { entity = new Config.Entities.OutputPath(Strings._none_, MyItems.Count); } else { /// Find an unused test name string newName; for (int nameId = 1; true; nameId++) { newName = Strings.New_output_path_name + nameId.ToString(); bool notUsed = true; foreach (var t in MyItems) if (t.Name.Equals(newName)) notUsed = false; if (notUsed) break; } entity = new Config.Entities.OutputPath(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; foreach (var entity in ToBeRemovedItems) { if (!string.IsNullOrEmpty(entity.OriName)) { int occurances = 0; foreach (var tst in parent.Tests) if (!string.IsNullOrEmpty(tst.OutputPath) && tst.OutputPath.Equals(entity.OriName)) occurances++; if (occurances > 0) { warnings += string.Format(Strings._0_path_1_used_by_2_tests_will_be_removed_3, Strings.OutputTabPageTitle, 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.OutputPath) && tst.OutputPath.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.OutputTabPageTitle, entity.OriName, occurances, entity.Name, Environment.NewLine); renmInfo.Add(entity.OriName, entity.Name); } } } return warnings; } public void UpdateRelatedItems(Dictionary renameInfo) { foreach (var ri in renameInfo) { var tests = parent.Session.QueryOver() .Where(x => x.OutputPath == ri.Key) .List(); foreach (var t in tests) { t.OutputPath = ri.Value; parent.Session.Update(t); } } } /// /// Update the entities and save them to the database /// public new void OkBtnClicked() { base.OkBtnClicked(); /// Update the database foreach (var entity in ToBeRemovedItems) { parent.Session.Delete(entity); } foreach (var entity in MyItems) { parent.Session.SaveOrUpdate(entity); } SaveUISettings(); } void SaveUISettings() { LocalSettings ls = Program.LocalSettings; /// Compare list view column widths with the saved ones bool anyColumnDiffers = false; if (Columns.Count != ls.OutputColumnCount) { anyColumnDiffers = true; } else { for (int i = 0; i < Columns.Count; i++) { if (Columns[i].Width != ls.OutputColumnWidths[i]) { anyColumnDiffers = true; break; } } } if (anyColumnDiffers) { /// Update column widths ls.OutputColumnWidths = new int[Columns.Count]; for (int i = 0; i < Columns.Count; i++) { ls.OutputColumnWidths[i] = Columns[i].Width; } ls.Save(); } } } }