tbf/TBF/UI/Bench/Paths/PathsMetersCtrl.cs

299 lines
9.0 KiB
C#
Raw Normal View History

///
/// Copyright (c) 2013-2017 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Forms;
using log4net;
using Common.Forms;
2021-10-26 09:23:57 +00:00
using TBF.Rig;
using TBF.Rig.GenericDevices;
using TBF.Resources;
using TBF.UI.Bench.Paths;
using TBF.UI.Shared;
namespace TBF.UI.Bench.Paths
{
public class PathsMetersCtrl : BaseWithListViewEx<Config.Entities.MetersPath>, ITabWithListViewEx
{
static readonly ILog log = LogManager.GetLogger(typeof(PathsMetersCtrl));
/// <summary>
/// Fixed ListViewEx columns
/// </summary>
enum Column
{
Name,
FixedColumnsCount,
}
readonly int fixedColumnsCount = (int)Column.FixedColumnsCount;
PathsDlg parent;
Control parentControl;
Control[] editors;
public PathsMetersCtrl()
: base()
{
}
public void Initialize(PathsDlg parent, Control parentControl)
{
this.parent = parent;
this.parentControl = parentControl;
/// Load the paths
MyItems = parent.Session.QueryOver<Config.Entities.MetersPath>()
.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<IRegReader> readers = new List<IRegReader>();
foreach (var cmpnt in parent.TbfComponents)
{
if (cmpnt is IRegReader) readers.Add(cmpnt as IRegReader);
}
/// ListViewEx columns
TBF.LocalSettings ls = Program.LocalSettings;
Columns.Add(Strings.Name, (ls.MetersColumnCount > 0) ? ls.MetersColumnWidths[0] : 60 * parent.Dpi / Constants.Dpi100pct);
int clmn = (int)Column.FixedColumnsCount;
for (int i = 0; i < TBF.Data.WMsCount; i++)
{
Columns.Add(string.Format("{0} {1}", Strings.Sensor, i + 1), (ls.MetersColumnCount > clmn) ? ls.MetersColumnWidths[clmn] : 50 * parent.Dpi / Constants.Dpi100pct);
clmn++;
}
/// Editors
editors = new Control[fixedColumnsCount + TBF.Data.WMsCount];
///
editors[(int)Column.Name] = new TextBox(); /// Name
/// Prepare valve combo-boxes (max. 64 valves)
for (int i = 0; i < TBF.Data.WMsCount; i++)
{
ComboBox cb = new ComboBox();
foreach (var rr in readers) cb.Items.Add(rr.Cfg.Name);
editors[fixedColumnsCount + i] = cb;
}
///
for (int i = 0; i < editors.Length; i++)
{
editors[i].Visible = false;
parent.Controls.Add(editors[i]);
}
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_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)
{
}
public override void DrawOne(object myItem)
{
Config.Entities.MetersPath entity =(Config.Entities.MetersPath)myItem;
2021-10-26 09:23:57 +00:00
Rig.MetersPath path = new Rig.MetersPath(entity, parent.TbfComponents);
ListViewItem lvi = new ListViewItem(entity.Name);
for (int i = 0; i < TBF.Data.WMsCount; i++)
{
if (path.RegisterReaders != null && path.RegisterReaders[i] != null)
{
lvi.SubItems.Add(path.RegisterReaders[i].Cfg.Name);
}
else
{
lvi.SubItems.Add("---");
}
}
lvi.Tag = entity;
Items.Add(lvi);
}
public override void UpdateOne(ListViewItem lvi, object myItem)
{
Config.Entities.MetersPath entity = (Config.Entities.MetersPath)myItem;
entity.Name = lvi.Text;
for (int j = 0; j < TBF.Data.WMsCount; j++)
{
entity.SetSensor(j, lvi.SubItems[fixedColumnsCount + j].Text);
}
}
public void AddOne()
{
/// Find an unused test name
string newName;
for (int nameId = 1; true; nameId++)
{
newName = Strings.New_sensors_path_name + nameId.ToString();
bool notUsed = true;
foreach (var t in MyItems) if (t.Name.Equals(newName)) notUsed = false;
if (notUsed) break;
}
Config.Entities.MetersPath entity = new Config.Entities.MetersPath(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<string, string> 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.MetersPath) && tst.MetersPath.Equals(entity.OriName)) occurances++;
if (occurances > 0)
{
warnings += string.Format(Strings._0_path_1_used_by_2_tests_will_be_removed_3, Strings.MetersTabPageTitle, 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.MetersPath) && tst.MetersPath.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.MetersTabPageTitle, entity.OriName, occurances, entity.Name, Environment.NewLine);
renmInfo.Add(entity.OriName, entity.Name);
}
}
}
return warnings;
}
public void UpdateRelatedItems(Dictionary<string, string> renameInfo)
{
foreach (var ri in renameInfo)
{
var tests = parent.Session.QueryOver<Config.Entities.Test>()
.Where(x => x.MetersPath == ri.Key)
.List();
foreach (var t in tests)
{
t.MetersPath = ri.Value;
parent.Session.Update(t);
}
}
}
/// <summary>
/// Update the entities and save them to the database
/// </summary>
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.MetersColumnCount)
{
anyColumnDiffers = true;
}
else
{
for (int i = 0; i < Columns.Count; i++)
{
if (Columns[i].Width != ls.MetersColumnWidths[i]) { anyColumnDiffers = true; break; }
}
}
if (anyColumnDiffers)
{
/// Update column widths
ls.MetersColumnWidths = new int[Columns.Count];
for (int i = 0; i < Columns.Count; i++)
{
ls.MetersColumnWidths[i] = Columns[i].Width;
}
ls.Save();
}
}
}
}