/// /// Copyright (c) 2019-2022 Sensus Slovensko a.s. /// using System; using System.Drawing; using System.Windows.Forms; using System.Collections.Generic; using Common; namespace Results.Forms { public partial class OneWMResultsColumnsCtrl : UserControl, IOneWMResultsCtrl { public event EventHandler WMResultsClickedHandler; /// private void tBox_MouseDoubleClick(object sender, MouseEventArgs e) { try { if (WMResultsClickedHandler != null) WMResultsClickedHandler(sender, new WaterMeterEventArgs(wmPosition)); } catch (Exception) { } } bool disabled; int wmPosition; /// 1-based water meter position string caption; Color bkColor; int[] columnWidths; IList items; public bool Disabled { get { return disabled; } } /// Read only public int WMPosition { get { return wmPosition; } } /// Read only public ListView.ColumnHeaderCollection Columns { get { return lView.Columns; } } /// Read only public OneWMResultsColumnsCtrl() { InitializeComponent(); disabled = false; wmPosition = 0; tBox.Text = caption = "---"; tBox.BackColor = lView.BackColor = bkColor = Color.White; items = new List(); columnWidths = new int[0]; } public void Update(int[] columnWidths) { this.columnWidths = columnWidths; /// Always update ListView column widths int col = 0; foreach (ColumnHeader column in lView.Columns) { column.Width = (columnWidths != null && columnWidths.Length > col) ? columnWidths[col] : ((col == 0) ? 40 : 70); col++; } } public void Update(IList items) { this.items = items; } public void Update(Results.Entities.WaterMeter wMtr) { if (wMtr == null || (wMtr.Disabled && wMtr.Q3Channel == 0)) { /// Water meter position is disabled this.disabled = true; lView.Items.Clear(); tBox.Text = caption = "---"; tBox.BackColor = lView.BackColor = bkColor = Color.White; return; } /// Update background color string message = string.Empty; UpdateBkColor(wMtr.GetColorOfResults(false, out message)); /// Update caption #if ORACLE_DB tBox.Text = caption = string.Format("{0} ({1}) {2} {3}", wMtr.WMPosition, wMtr.Pruefindex == 0 ? "?" : string.Format("{0}x", wMtr.Pruefindex % 100), (string.IsNullOrEmpty(wMtr.SerialNr) ? string.Empty : wMtr.SerialNr), message); #else tBox.Text = caption = string.Format("s/n = {0}", string.IsNullOrEmpty(wMtr.SerialNr) ? string.Empty : wMtr.SerialNr); #endif /// Header lView.Columns.Add(wMtr.WMPosition.ToString(), (columnWidths != null && columnWidths.Length > 0) ? columnWidths[0] : 40); int col = 1; foreach (var str in wMtr.GetAllDecoratedTestNames()) { lView.Columns.Add(str, (columnWidths != null && columnWidths.Length > col) ? columnWidths[col] : 70); col++; } lView.Items.Clear(); if (items == null || items.Count == 0) return; foreach (var item in items) { ListViewItem lvi = new ListViewItem(item.Caption); foreach (var mtr in wMtr.MeterTestRslts) { if (mtr != null && mtr.IsPilotRslt() && mtr.TestDone && mtr.Publish() != Publish.Never && mtr.Publish() != Publish.Internal) { string str = item.Print(wMtr, mtr.Name()); string[] texts = str.Split(new char[] { '|' }); if (texts.Length == 1) { lvi.SubItems.Add(str); } else if (texts.Length == 2) { Color color = texts[1].Equals("Green") ? Color.Green : (texts[1].Equals("Red") ? Color.Red : Color.White); lvi.UseItemStyleForSubItems = false; lvi.SubItems.Add(texts[0]); lvi.SubItems[lvi.SubItems.Count - 1].BackColor = color; } else { lvi.SubItems.Add(string.Empty); } } } lView.Items.Add(lvi); } } /// /// Private /// void UpdateWMPos(int wmPosition) { this.wmPosition = wmPosition; if (lView.Columns.Count > 0) { lView.Columns[0].Text = wmPosition.ToString(); } } void UpdateBkColor(Color backColor) { if (this.bkColor != backColor) { tBox.BackColor = lView.BackColor = this.bkColor = backColor; } } } }