/// /// Copyright (c) 2020-2022 Sensus Slovensko a.s. /// using System; using System.Windows.Forms; using Common; using Common.Forms; using TBF.Resources; using TBF.UiBridge; namespace TBF.UI.EventLogs { public partial class EventLogsTabPageCtrl : UserControl { /// eventsListView columns enum Column { DateTime, Source, Class, Severity, Message, Count } MySortOrder sortOrder = MySortOrder.Ascending; int sortColumn = -1; /// 0-based index of column to be used for sorting public EventLogsTabPageCtrl() { InitializeComponent(); int currentDpi = (int)this.CreateGraphics().DpiX; eventsListView.Columns.Add(Strings.Date_time, 100 * currentDpi / Constants.Dpi100pct); eventsListView.Columns.Add(Strings.Source, 100 * currentDpi / Constants.Dpi100pct); eventsListView.Columns.Add(Strings.Class, 85 * currentDpi / Constants.Dpi100pct); eventsListView.Columns.Add(Strings.Severity, 70 * currentDpi / Constants.Dpi100pct); eventsListView.Columns.Add(Strings.Message, 500 * currentDpi / Constants.Dpi100pct); if (SharedDatabase.EventsDB.RecentEvents != null) { foreach (var e in SharedDatabase.EventsDB.RecentEvents) { DrawOneEvent(e); } } Bridge.EventHandler += delegate(object sender, EventEventArgs args) { if (InvokeRequired) { Invoke(new EventHandler(OnEvent), sender, args); } else { OnEvent(sender, args); } }; } void OnEvent(object sender, EventEventArgs args) { DrawOneEvent(args.Evnt); } void DrawOneEvent(SharedDatabase.Entities.Event evnt) { ListViewItem lvi = new ListViewItem(evnt.TimeStamp.ToString("dd.MM.yyyy HH:mm")); lvi.Tag = evnt; lvi.SubItems.Add(evnt.Source); lvi.SubItems.Add(evnt.EventClass.ToString()); { lvi.UseItemStyleForSubItems = false; lvi.SubItems.Add(evnt.Severity.ToString()); lvi.SubItems[lvi.SubItems.Count - 1].BackColor = SharedDatabase.Utils.GetSeverityColor(evnt.Severity); lvi.SubItems[lvi.SubItems.Count - 1].ForeColor = SharedDatabase.Utils.GetSeverityColor(evnt.Severity, true); } lvi.SubItems.Add(evnt.Message); eventsListView.Items.Add(lvi); } private void eventsListView_ColumnClick(object sender, ColumnClickEventArgs e) { if (e.Column == sortColumn) { sortOrder = (sortOrder == MySortOrder.Ascending) ? MySortOrder.Descending : MySortOrder.Ascending; } else { /// Clicked on another column header => set sortOrder to SortOrder.Ascending sortColumn = e.Column; sortOrder = MySortOrder.Ascending; } switch ((Column)sortColumn) { default: case Column.DateTime: eventsListView.ListViewItemSorter = new LviDateTimeColumnComparer(sortColumn, sortOrder); break; case Column.Source: case Column.Class: case Column.Severity: case Column.Message: eventsListView.ListViewItemSorter = new LviTextColumnComparer(sortColumn, sortOrder); break; } eventsListView.SetSortIcon(sortColumn, sortOrder); eventsListView.Sort(); } } }