diff options
Diffstat (limited to 'Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs')
| -rw-r--r-- | Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs new file mode 100644 index 000000000..64e73babf --- /dev/null +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Panes/LogViewerPaneVM.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using Tango.Core.Commands; +using Tango.Core.DI; +using Tango.FSE.Common; +using Tango.Integration.Logging; +using Tango.Logging; +using Tango.SharedUI.Components; + +namespace Tango.FSE.UI.Panes +{ + public class LogViewerPaneVM : FSEViewModel + { + private List<LogItemBase> _pausedApplicationLogs; + private List<EmbeddedLogItem> _pausedMachineLogs; + + public ObservableCollection<LogItemBase> ApplicationLogs { get; set; } + public ObservableCollection<EmbeddedLogItem> MachineLogs { get; set; } + public ICollectionView ApplicationLogsView { get; set; } + public ICollectionView MachineLogsView { get; set; } + public SelectedObjectCollection<LogCategory> SelectedApplicationLogsCategories { get; set; } + public SelectedObjectCollection<LogCategory> SelectedMachineLogsCategories { get; set; } + public bool ApplicationLogsPaused { get; set; } + public bool MachineLogsPaused { get; set; } + + private String _applicationLogsFilter; + public String ApplicationLogsFilter + { + get { return _applicationLogsFilter; } + set { _applicationLogsFilter = value; RaisePropertyChangedAuto(); ApplicationLogsView.Refresh(); } + } + + private String _machineLogsFilter; + public String MachineLogsFilter + { + get { return _machineLogsFilter; } + set { _machineLogsFilter = value; RaisePropertyChangedAuto(); MachineLogsView.Refresh(); } + } + + + public RelayCommand ClearApplicationLogsCommand { get; set; } + public RelayCommand ClearMachineLogsCommand { get; set; } + + public LogViewerPaneVM() + { + _pausedApplicationLogs = new List<LogItemBase>(); + _pausedMachineLogs = new List<EmbeddedLogItem>(); + + ApplicationLogs = new ObservableCollection<LogItemBase>(); + MachineLogs = new ObservableCollection<EmbeddedLogItem>(); + ApplicationLogsView = CollectionViewSource.GetDefaultView(ApplicationLogs); + MachineLogsView = CollectionViewSource.GetDefaultView(MachineLogs); + + ApplicationLogsView.Filter = FilterApplicationLogs; + MachineLogsView.Filter = FilterMachineLogs; + + SelectedApplicationLogsCategories = new SelectedObjectCollection<LogCategory>(new ObservableCollection<LogCategory>() + { + LogCategory.Info, + LogCategory.Warning, + LogCategory.Error, + LogCategory.Critical, + }, new ObservableCollection<LogCategory>() + { + LogCategory.Info, + LogCategory.Warning, + LogCategory.Error, + LogCategory.Critical, + }); + + SelectedMachineLogsCategories = new SelectedObjectCollection<LogCategory>(new ObservableCollection<LogCategory>() + { + LogCategory.Info, + LogCategory.Warning, + LogCategory.Error, + LogCategory.Critical, + LogCategory.Debug, + }, new ObservableCollection<LogCategory>() + { + LogCategory.Info, + LogCategory.Warning, + LogCategory.Error, + LogCategory.Critical, + LogCategory.Debug, + }); + + SelectedApplicationLogsCategories.SynchedSource.CollectionChanged += (_, __) => ApplicationLogsView.Refresh(); + SelectedMachineLogsCategories.SynchedSource.CollectionChanged += (_, __) => MachineLogsView.Refresh(); + + ClearApplicationLogsCommand = new RelayCommand(ClearApplicationLogs); + ClearMachineLogsCommand = new RelayCommand(ClearMachineLogs); + + TangoIOC.Default.Inject(this); + + LoggingProvider.ApplicationLogAvailable += LoggingProvider_ApplicationLogAvailable; + LoggingProvider.EmbeddedLogAvailable += LoggingProvider_EmbeddedLogAvailable; + } + + private bool FilterApplicationLogs(object obj) + { + var log = obj as LogItemBase; + return SelectedApplicationLogsCategories.SynchedSource.Contains(log.Category) && (String.IsNullOrWhiteSpace(ApplicationLogsFilter) || log.Message.ToLower().Contains(ApplicationLogsFilter.ToLower())); + } + + private bool FilterMachineLogs(object obj) + { + var log = obj as EmbeddedLogItem; + return SelectedMachineLogsCategories.SynchedSource.Contains(log.Category) && (String.IsNullOrWhiteSpace(MachineLogsFilter) || log.Message.ToLower().Contains(MachineLogsFilter.ToLower())); + } + + private void ClearApplicationLogs() + { + _pausedApplicationLogs.Clear(); + ApplicationLogs.Clear(); + } + + private void ClearMachineLogs() + { + _pausedMachineLogs.Clear(); + MachineLogs.Clear(); + } + + private void LoggingProvider_ApplicationLogAvailable(object sender, LogItemBase logItem) + { + if (ApplicationLogsPaused) + { + _pausedApplicationLogs.Add(logItem); + } + else + { + InvokeUI(() => + { + if (_pausedApplicationLogs.Count > 0) + { + foreach (var pausedItem in _pausedApplicationLogs) + { + ApplicationLogs.Insert(0, pausedItem); + } + + _pausedApplicationLogs.Clear(); + } + + ApplicationLogs.Insert(0, logItem); + }); + } + } + + private void LoggingProvider_EmbeddedLogAvailable(object sender, EmbeddedLogItem logItem) + { + if (MachineLogsPaused) + { + _pausedMachineLogs.Add(logItem); + } + else + { + InvokeUI(() => + { + if (_pausedMachineLogs.Count > 0) + { + foreach (var pausedItem in _pausedMachineLogs) + { + MachineLogs.Insert(0, pausedItem); + } + + _pausedMachineLogs.Clear(); + } + + MachineLogs.Insert(0, logItem); + }); + } + } + } +}
\ No newline at end of file |
