tbf/TBF/UI/EventLogs/EventLogsTabPageCtrl.cs

112 lines
3.8 KiB
C#

using NHibernate;
///
/// Copyright (c) 2020 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Common;
using Common.Forms;
using Events.Entities;
using TBF.Resources;
using TBF.UiBridge;
namespace TBF.UI.EventLogs
{
public partial class EventLogsTabPageCtrl : UserControl
{
/// <summary> eventsListView columns </summary>
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 (global::Events.DB.RecentEvents != null)
{
foreach (var e in global::Events.DB.RecentEvents)
{
DrawOneEvent(e);
}
}
Bridge.EventHandler += delegate(object sender, EventEventArgs args)
{
if (InvokeRequired) { Invoke(new EventHandler<EventEventArgs>(OnEvent), sender, args); }
else { OnEvent(sender, args); }
};
}
void OnEvent(object sender, EventEventArgs args)
{
DrawOneEvent(args.Evnt);
}
void DrawOneEvent(Events.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 = global::Events.Utils.GetSeverityColor(evnt.Severity);
lvi.SubItems[lvi.SubItems.Count - 1].ForeColor = global::Events.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();
}
}
}