From 1ca813bbebaf5ee1b68b39b364a61f977d314ceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Mon, 5 Sep 2022 16:05:13 +0200 Subject: [PATCH 01/25] =?UTF-8?q?=E2=9E=96=20Removed=20.net4.7.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/Analogy.Common.csproj | 2 +- .../Analogy.CommonControls.Example.csproj | 2 +- Analogy.CommonControls/Analogy.CommonControls.csproj | 2 +- Analogy/Analogy.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Analogy.Common/Analogy.Common.csproj b/Analogy.Common/Analogy.Common.csproj index 72764a1dc..02e329f24 100644 --- a/Analogy.Common/Analogy.Common.csproj +++ b/Analogy.Common/Analogy.Common.csproj @@ -1,7 +1,7 @@  - net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;;netcoreapp3.1;net5.0-windows;net6.0-windows enable true en-US diff --git a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj index 4af9cb017..b96f50286 100644 --- a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj +++ b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj @@ -2,7 +2,7 @@ WinExe - net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;netcoreapp3.1;net5.0-windows;net6.0-windows enable true 8.0 diff --git a/Analogy.CommonControls/Analogy.CommonControls.csproj b/Analogy.CommonControls/Analogy.CommonControls.csproj index 8a4132685..c8ddbb314 100644 --- a/Analogy.CommonControls/Analogy.CommonControls.csproj +++ b/Analogy.CommonControls/Analogy.CommonControls.csproj @@ -1,7 +1,7 @@  - net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;;netcoreapp3.1;net5.0-windows;net6.0-windows true true en-US diff --git a/Analogy/Analogy.csproj b/Analogy/Analogy.csproj index df2692685..867e0d6c8 100644 --- a/Analogy/Analogy.csproj +++ b/Analogy/Analogy.csproj @@ -4,7 +4,7 @@ true WinExe en-US - net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;netcoreapp3.1;net5.0-windows;net6.0-windows 4.9.1 true true From 79e72f67dcedfb81f333f7f6e012c94c2b22c8ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 7 Sep 2022 07:57:32 +0200 Subject: [PATCH 02/25] =?UTF-8?q?Revert=20"=E2=9E=96=20Removed=20.net4.7.1?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 1ca813bbebaf5ee1b68b39b364a61f977d314ceb. --- Analogy.Common/Analogy.Common.csproj | 2 +- .../Analogy.CommonControls.Example.csproj | 2 +- Analogy.CommonControls/Analogy.CommonControls.csproj | 2 +- Analogy/Analogy.csproj | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Analogy.Common/Analogy.Common.csproj b/Analogy.Common/Analogy.Common.csproj index 02e329f24..72764a1dc 100644 --- a/Analogy.Common/Analogy.Common.csproj +++ b/Analogy.Common/Analogy.Common.csproj @@ -1,7 +1,7 @@  - net48;net472;;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows enable true en-US diff --git a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj index b96f50286..4af9cb017 100644 --- a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj +++ b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj @@ -2,7 +2,7 @@ WinExe - net48;net472;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows enable true 8.0 diff --git a/Analogy.CommonControls/Analogy.CommonControls.csproj b/Analogy.CommonControls/Analogy.CommonControls.csproj index c8ddbb314..8a4132685 100644 --- a/Analogy.CommonControls/Analogy.CommonControls.csproj +++ b/Analogy.CommonControls/Analogy.CommonControls.csproj @@ -1,7 +1,7 @@  - net48;net472;;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows true true en-US diff --git a/Analogy/Analogy.csproj b/Analogy/Analogy.csproj index 867e0d6c8..df2692685 100644 --- a/Analogy/Analogy.csproj +++ b/Analogy/Analogy.csproj @@ -4,7 +4,7 @@ true WinExe en-US - net48;net472;netcoreapp3.1;net5.0-windows;net6.0-windows + net48;net472;net471;netcoreapp3.1;net5.0-windows;net6.0-windows 4.9.1 true true From d298e9a3f815e864c3f62fb3ee4396713e309609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 7 Sep 2022 14:23:41 +0200 Subject: [PATCH 03/25] =?UTF-8?q?=E2=9C=A8=20Load=20subdirectories=20from?= =?UTF-8?q?=20ZIP=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/DataTypes/FileProcessor.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Analogy.Common/DataTypes/FileProcessor.cs b/Analogy.Common/DataTypes/FileProcessor.cs index 6b6d16fee..8d87055ea 100644 --- a/Analogy.Common/DataTypes/FileProcessor.cs +++ b/Analogy.Common/DataTypes/FileProcessor.cs @@ -106,12 +106,21 @@ public async Task> Process(IAnalogyOfflineDataPro return new List { error }; } CleanupManager.Instance.AddFolder(extractedPath); - var files = Directory.GetFiles(extractedPath); + var files = Directory.GetFiles(extractedPath, "*", SearchOption.AllDirectories); +#if NET6_0_OR_GREATER + + await Parallel.ForEachAsync(files, token, async (file, token2) => + { + var messages = await Process(fileDataProvider, file, token2, isReload); + compressedMessages.AddRange(messages); + }); +#else foreach (string file in files) { var messages = await Process(fileDataProvider, file, token, isReload); compressedMessages.AddRange(messages); } +#endif return compressedMessages; } @@ -190,7 +199,11 @@ private void UnzipZipFileIntoTempFolder(string zipPath, string extractPath, IAna var entries = archive.Entries.Where(entry => !entry.FullName.EndsWith("/") && fileDataProvider.CanOpenFile(entry.FullName)); foreach (ZipArchiveEntry entry in entries) { - entry.ExtractToFile(Path.Combine(extractPath, entry.Name)); + string fullTempName = Path.Combine(extractPath, entry.FullName); + string directoryName = Path.GetDirectoryName(fullTempName) ?? string.Empty; + if (!Directory.Exists(directoryName)) + Directory.CreateDirectory(directoryName); + entry.ExtractToFile(fullTempName); } if (!Directory.GetFiles(extractPath).Any()) From 1ff28973954ee8eeb07e7450881a6545060e15d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 7 Sep 2022 15:55:45 +0200 Subject: [PATCH 04/25] =?UTF-8?q?=F0=9F=90=9B=20Corrected=20parallelisme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/DataTypes/FileProcessor.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Analogy.Common/DataTypes/FileProcessor.cs b/Analogy.Common/DataTypes/FileProcessor.cs index 8d87055ea..8e9a6cc95 100644 --- a/Analogy.Common/DataTypes/FileProcessor.cs +++ b/Analogy.Common/DataTypes/FileProcessor.cs @@ -108,11 +108,18 @@ public async Task> Process(IAnalogyOfflineDataPro CleanupManager.Instance.AddFolder(extractedPath); var files = Directory.GetFiles(extractedPath, "*", SearchOption.AllDirectories); #if NET6_0_OR_GREATER - - await Parallel.ForEachAsync(files, token, async (file, token2) => + object addLock = new object(); + ParallelOptions parallelOptions = new ParallelOptions() + { + MaxDegreeOfParallelism = 4 + }; + await Parallel.ForEachAsync(files, parallelOptions, async (file, token2) => { var messages = await Process(fileDataProvider, file, token2, isReload); - compressedMessages.AddRange(messages); + lock (addLock) + { + compressedMessages.AddRange(messages); + } }); #else foreach (string file in files) From e8dfff3995174ce114e2c7ad74cf84e6236957ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Thu, 8 Sep 2022 13:35:41 +0200 Subject: [PATCH 05/25] =?UTF-8?q?=F0=9F=90=9B=20lockSlim=20in=20try/finall?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserControls/LogMessagesUC.cs | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index 0fcf62fd6..63b42cb2b 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -1686,46 +1686,58 @@ public void AppendMessage(AnalogyLogMessage message, string dataSource) DataRow dtr = PagingManager.AppendMessage(message, dataSource); - lockSlim.EnterWriteLock(); - if (diffStartTime > DateTime.MinValue) + try { - dtr["TimeDiff"] = Utils.GetOffsetTime(message.Date, Settings.TimeOffsetType, Settings.TimeOffset).Subtract(diffStartTime).ToString(); + lockSlim.EnterWriteLock(); + if (diffStartTime > DateTime.MinValue) + { + dtr["TimeDiff"] = Utils.GetOffsetTime(message.Date, Settings.TimeOffsetType, Settings.TimeOffset).Subtract(diffStartTime).ToString(); + } + } + finally + { + lockSlim.ExitWriteLock(); } - lockSlim.ExitWriteLock(); if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && Settings.CheckAdditionalInformation) { AddExtraColumnsToLogGrid(logGrid, message); } - lockSlim.EnterWriteLock(); - if (hasAnyInPlaceExtensions) + try { - foreach (IAnalogyExtensionInPlace extension in InPlaceRegisteredExtensions) + lockSlim.EnterWriteLock(); + if (hasAnyInPlaceExtensions) { - var columns = extension.GetColumnsInfo(); - foreach (AnalogyColumnInfo column in columns) + foreach (IAnalogyExtensionInPlace extension in InPlaceRegisteredExtensions) { - dtr.BeginEdit(); - dtr[column.ColumnName] = extension.GetValueForCellColumn(message, column.ColumnName); - dtr.EndEdit(); + var columns = extension.GetColumnsInfo(); + foreach (AnalogyColumnInfo column in columns) + { + dtr.BeginEdit(); + dtr[column.ColumnName] = extension.GetValueForCellColumn(message, column.ColumnName); + dtr.EndEdit(); + } } } - } - if (hasAnyUserControlExtensions) - { - foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) + if (hasAnyUserControlExtensions) { - if (IsHandleCreated) + foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) { - BeginInvoke(new MethodInvoker(() => extension.NewMessage(message))); + if (IsHandleCreated) + { + BeginInvoke(new MethodInvoker(() => extension.NewMessage(message))); + } } } } + finally + { + lockSlim.ExitWriteLock(); + } - lockSlim.ExitWriteLock(); if (PagingManager.IsCurrentPageInView(_messageData)) { NewDataExist = true; From 20b02df5439183d0c3e3c0c7a51b886460192783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Thu, 8 Sep 2022 17:34:32 +0200 Subject: [PATCH 06/25] =?UTF-8?q?=E2=9C=A8=20Using=20ILogRawSQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Analogy.CommonControls.Example.csproj | 2 +- Analogy.CommonControls/Analogy.CommonControls.csproj | 2 +- Analogy.CommonControls/UserControls/LogMessagesUC.cs | 9 ++++++--- Analogy.UnitTests/Analogy.UnitTests.csproj | 2 +- Analogy/Analogy.csproj | 2 +- nuget.config | 3 ++- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj index 4af9cb017..1a2ab3403 100644 --- a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj +++ b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj @@ -10,7 +10,7 @@ - + diff --git a/Analogy.CommonControls/Analogy.CommonControls.csproj b/Analogy.CommonControls/Analogy.CommonControls.csproj index 8a4132685..800a550f6 100644 --- a/Analogy.CommonControls/Analogy.CommonControls.csproj +++ b/Analogy.CommonControls/Analogy.CommonControls.csproj @@ -38,7 +38,7 @@ - + diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index 63b42cb2b..28e8711a4 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -45,10 +45,10 @@ namespace Analogy.CommonControls.UserControls { - public partial class LogMessagesUC : XtraUserControl, ILogMessageCreatedHandler, ILogWindow, IAnalogyWorkspace + public partial class LogMessagesUC : XtraUserControl, ILogMessageCreatedHandler, ILogWindow, IAnalogyWorkspace, ILogRawSQL { #region Events - + public event EventHandler? OnSetRawSQLFilter; #endregion #region properties private DateTimeSelectionUC DateTimePicker { get; set; } @@ -2048,6 +2048,7 @@ private void FilterResults() try { meRawSQL.Text = filter; + OnSetRawSQLFilter?.Invoke(this, filter); _messageData.DefaultView.RowFilter = filter; if (!Settings.AutoScrollToLastMessage && Settings.TrackActiveMessage) { @@ -2065,7 +2066,7 @@ private void FilterResults() } } - private bool ApplyRawSQLFilter(string filter) + public bool ApplyRawSQLFilter(string filter) { try { @@ -2094,6 +2095,8 @@ private bool ApplyRawSQLFilter(string filter) } + + public int LocateByValue(int startRowHandle, GridColumn column, object? val) { if (!LogGrid.DataController.IsReady || val == null) diff --git a/Analogy.UnitTests/Analogy.UnitTests.csproj b/Analogy.UnitTests/Analogy.UnitTests.csproj index 34bb6cfbb..9780b0b46 100644 --- a/Analogy.UnitTests/Analogy.UnitTests.csproj +++ b/Analogy.UnitTests/Analogy.UnitTests.csproj @@ -31,7 +31,7 @@ - + diff --git a/Analogy/Analogy.csproj b/Analogy/Analogy.csproj index df2692685..dc6eed578 100644 --- a/Analogy/Analogy.csproj +++ b/Analogy/Analogy.csproj @@ -49,7 +49,7 @@ - + diff --git a/nuget.config b/nuget.config index 3a9f6b327..ca74b0422 100644 --- a/nuget.config +++ b/nuget.config @@ -1,7 +1,8 @@ - + + \ No newline at end of file From 360b553dea51b280e44560d7dc2fa591e6abde94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Mon, 12 Sep 2022 16:07:23 +0200 Subject: [PATCH 07/25] =?UTF-8?q?=E2=9C=A8=20Resize=20ExtensionPanel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.CommonControls/UserControls/LogMessagesUC.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index 28e8711a4..fc9b92092 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -1375,14 +1375,23 @@ public async Task LoadExtensions() } foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) { - var page = dockManager1.AddPanel(DockingStyle.Float); + DockPanel? page = dockManager1.AddPanel(DockingStyle.Float); page.Text = extension.Title; page.Controls.Add(extension.UserControl); + page.SizeChanged += ExtensionPanel_SizeChanged; await extension.InitializeUserControl(this, Logger); page.DockedAsTabbedDocument = true; } } + private void ExtensionPanel_SizeChanged(object sender, EventArgs e) + { + if (sender is DockPanel pnl && pnl.Controls.Count > 0) + { + pnl.Controls[0].Controls[0].Size = pnl.Size; + } + } + private void UCLogs_DragEnter(object sender, DragEventArgs e) => e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None; From b0ef3a767665cbffed206fe223431a0d3fc0e05e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Tue, 13 Sep 2022 13:18:47 +0200 Subject: [PATCH 08/25] =?UTF-8?q?=F0=9F=90=9B=20Restore=20correctly=20work?= =?UTF-8?q?space=20when=20extension=20UC=20are=20docked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserControls/LogMessagesUC.cs | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index fc9b92092..37076e32f 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -285,6 +285,16 @@ private async void LogMessagesUC_Load(object sender, EventArgs e) LoadUISettings(); LoadReplacementHeaders(); BookmarkModeUI(); + + + if (!string.IsNullOrEmpty(Settings.LogsLayoutFileName) && File.Exists(Settings.LogsLayoutFileName)) + { + string name = Path.GetFileNameWithoutExtension(Settings.LogsLayoutFileName); + wsLogs.LoadWorkspace(name, Settings.LogsLayoutFileName); + wsLogs.ApplyWorkspace(name); + } + LoadWorkspace(CurrentLogLayoutFileName); + await LoadExtensions(); SetupEventsHandlers(); @@ -326,13 +336,6 @@ private async void LogMessagesUC_Load(object sender, EventArgs e) documentManager1.View.ActivateDocument(dockPanelLogs); documentManager1.EndUpdate(); - if (!string.IsNullOrEmpty(Settings.LogsLayoutFileName) && File.Exists(Settings.LogsLayoutFileName)) - { - string name = Path.GetFileNameWithoutExtension(Settings.LogsLayoutFileName); - wsLogs.LoadWorkspace(name, Settings.LogsLayoutFileName); - wsLogs.ApplyWorkspace(name); - } - LoadWorkspace(CurrentLogLayoutFileName); } public void LoadWorkspace(string fileName) @@ -1375,12 +1378,17 @@ public async Task LoadExtensions() } foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) { - DockPanel? page = dockManager1.AddPanel(DockingStyle.Float); - page.Text = extension.Title; - page.Controls.Add(extension.UserControl); - page.SizeChanged += ExtensionPanel_SizeChanged; + DockPanel? pnl = dockManager1.Panels.FirstOrDefault(i => i.ID == extension.Id); + if (pnl == null) + { + pnl = dockManager1.AddPanel(DockingStyle.Float); + pnl.Text = extension.Title; + pnl.ID = extension.Id; + pnl.DockedAsTabbedDocument = true; + } + pnl.Controls.Add(extension.UserControl); + pnl.SizeChanged += ExtensionPanel_SizeChanged; await extension.InitializeUserControl(this, Logger); - page.DockedAsTabbedDocument = true; } } From a7e7d2eabf7c52adce47e62766b4cd8725f1cbb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 14 Sep 2022 08:52:34 +0200 Subject: [PATCH 09/25] =?UTF-8?q?=F0=9F=90=9B=20Corrected=20UnzipZipFileIn?= =?UTF-8?q?toTempFolder=20for=20subfolders=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/DataTypes/FileProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analogy.Common/DataTypes/FileProcessor.cs b/Analogy.Common/DataTypes/FileProcessor.cs index 8e9a6cc95..1b5507051 100644 --- a/Analogy.Common/DataTypes/FileProcessor.cs +++ b/Analogy.Common/DataTypes/FileProcessor.cs @@ -213,7 +213,7 @@ private void UnzipZipFileIntoTempFolder(string zipPath, string extractPath, IAna entry.ExtractToFile(fullTempName); } - if (!Directory.GetFiles(extractPath).Any()) + if (!Directory.GetFiles(extractPath, "*", SearchOption.AllDirectories).Any()) { Logger.LogError(nameof(UnzipFilesIntoTempFolder), "Zip file does not contain any supported files"); From af0fafd16e9e015946ec0c18befef3d74fc01708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 14 Sep 2022 15:37:48 +0200 Subject: [PATCH 10/25] =?UTF-8?q?=F0=9F=94=8A=20Added=20stacktrace=20for?= =?UTF-8?q?=20error=20while=20processing=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/DataTypes/FileProcessor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Analogy.Common/DataTypes/FileProcessor.cs b/Analogy.Common/DataTypes/FileProcessor.cs index 1b5507051..fbcf0eebd 100644 --- a/Analogy.Common/DataTypes/FileProcessor.cs +++ b/Analogy.Common/DataTypes/FileProcessor.cs @@ -145,8 +145,8 @@ await Parallel.ForEachAsync(files, parallelOptions, async (file, token2) => } catch (Exception e) { - Logger.LogCritical("Analogy", $"Error parsing file: {e}"); - var error = new AnalogyErrorMessage($"Error reading file {filename}: Error: {e.Message}", "Analogy"); + Logger.LogCritical("Analogy", $"Error parsing file: {e}\n{e.StackTrace}"); + var error = new AnalogyErrorMessage($"Error reading file {filename}: Error: {e.Message}\n{e.StackTrace}", "Analogy"); error.Source = nameof(FileProcessor); error.Module = "Analogy"; DataWindow.AppendMessage(error, fileDataProvider.GetType().FullName); From de7ade4cbb73bf9234964571176c421bd6144fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Thu, 15 Sep 2022 13:41:38 +0200 Subject: [PATCH 11/25] =?UTF-8?q?=F0=9F=90=9B=20Using=20lock=20in=20AddPro?= =?UTF-8?q?cessingFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/Managers/FileProcessingManager.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Analogy.Common/Managers/FileProcessingManager.cs b/Analogy.Common/Managers/FileProcessingManager.cs index b94a808c1..a02f16fc8 100644 --- a/Analogy.Common/Managers/FileProcessingManager.cs +++ b/Analogy.Common/Managers/FileProcessingManager.cs @@ -23,9 +23,12 @@ public class FileProcessingManager public void AddProcessingFile(string filename) { - if (!Processing.Contains(filename, StringComparer.OrdinalIgnoreCase)) + lock (_lockObject) { - Processing.Add(filename); + if (!Processing.Contains(filename, StringComparer.OrdinalIgnoreCase)) + { + Processing.Add(filename); + } } } From 5faf633a0727bf6c8fd59cc56dcc061ce1a16d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Fri, 16 Sep 2022 08:17:04 +0200 Subject: [PATCH 12/25] =?UTF-8?q?=F0=9F=94=80Merge=20from=20upstream?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/DataTypes/FileProcessor.cs | 49 ++++++++---------- Analogy.UnitTests/Analogy.UnitTests.csproj | 8 ++- Analogy.UnitTests/FileProcessorTests.cs | 33 ++++++++++++ .../OfflineDataProviderForTesting.cs | 18 +++++++ Analogy.UnitTests/test_recursive.zip | Bin 0 -> 5789 bytes .../DownloadStatisticsUC.Designer.cs | 31 +++++++---- Analogy/UserControls/DownloadStatisticsUC.cs | 12 +++-- 7 files changed, 110 insertions(+), 41 deletions(-) create mode 100644 Analogy.UnitTests/FileProcessorTests.cs create mode 100644 Analogy.UnitTests/OfflineDataProviderForTesting.cs create mode 100644 Analogy.UnitTests/test_recursive.zip diff --git a/Analogy.Common/DataTypes/FileProcessor.cs b/Analogy.Common/DataTypes/FileProcessor.cs index fbcf0eebd..c13e91977 100644 --- a/Analogy.Common/DataTypes/FileProcessor.cs +++ b/Analogy.Common/DataTypes/FileProcessor.cs @@ -17,7 +17,6 @@ public class FileProcessor public event EventHandler OnFileReadingFinished; public DateTime lastNewestMessage; private IUserSettingsManager Settings { get; } - private string FileName { get; set; } private ILogMessageCreatedHandler DataWindow { get; } public IAnalogyLogger Logger { get; } @@ -26,40 +25,36 @@ public FileProcessor(IUserSettingsManager settingsManager, ILogMessageCreatedHan DataWindow = dataWindow; Logger = logger; Settings = settingsManager; - } + } public async Task> Process(IAnalogyOfflineDataProvider fileDataProvider, string filename, CancellationToken token, bool isReload = false) { - //TODO in case of zip recursive call on all extracted files - - - FileName = filename; - if (string.IsNullOrEmpty(FileName)) + if (string.IsNullOrEmpty(filename)) { return new List(); } if (!isReload && !DataWindow.ForceNoFileCaching && - FileProcessingManager.Instance.AlreadyProcessed(FileName) && + FileProcessingManager.Instance.AlreadyProcessed(filename) && Settings.EnableFileCaching) //get it from the cache { - var cachedMessages = FileProcessingManager.Instance.GetMessages(FileName); - DataWindow.AppendMessages(cachedMessages, GetFileNameAsDataSource(FileName)); + var cachedMessages = FileProcessingManager.Instance.GetMessages(filename); + DataWindow.AppendMessages(cachedMessages, GetFileNameAsDataSource(filename)); OnFileReadingFinished?.Invoke(this, filename); return cachedMessages; } - if (FileProcessingManager.Instance.IsFileCurrentlyBeingProcessed(FileName)) + if (FileProcessingManager.Instance.IsFileCurrentlyBeingProcessed(filename)) { - while (FileProcessingManager.Instance.IsFileCurrentlyBeingProcessed(FileName)) + while (FileProcessingManager.Instance.IsFileCurrentlyBeingProcessed(filename)) { await Task.Delay(1000); } - var cachedMessages = FileProcessingManager.Instance.GetMessages(FileName); - DataWindow.AppendMessages(cachedMessages, GetFileNameAsDataSource(FileName)); + var cachedMessages = FileProcessingManager.Instance.GetMessages(filename); + DataWindow.AppendMessages(cachedMessages, GetFileNameAsDataSource(filename)); OnFileReadingFinished?.Invoke(this, filename); return cachedMessages; @@ -71,16 +66,16 @@ public async Task> Process(IAnalogyOfflineDataPro if (fileDataProvider.CanOpenFile(filename)) //if can open natively: add to processing and process { - FileProcessingManager.Instance.AddProcessingFile(FileName); + FileProcessingManager.Instance.AddProcessingFile(filename); if (!DataWindow.DoNotAddToRecentHistory) { - Settings.AddToRecentFiles(fileDataProvider.Id, FileName); + Settings.AddToRecentFiles(fileDataProvider.Id, filename); } var messages = (await fileDataProvider.Process(filename, token, DataWindow).ConfigureAwait(false)) .ToList(); - FileProcessingManager.Instance.DoneProcessingFile(messages.ToList(), FileName); + FileProcessingManager.Instance.DoneProcessingFile(messages.ToList(), filename); if (messages.Any()) { lastNewestMessage = messages.Select(m => m.Date).Max(); @@ -107,28 +102,30 @@ public async Task> Process(IAnalogyOfflineDataPro } CleanupManager.Instance.AddFolder(extractedPath); var files = Directory.GetFiles(extractedPath, "*", SearchOption.AllDirectories); -#if NET6_0_OR_GREATER + + /*----fileDataProvider does not support parallelism----*/ + /* object addLock = new object(); ParallelOptions parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = 4 }; - await Parallel.ForEachAsync(files, parallelOptions, async (file, token2) => + await Parallel.ForEachAsync(files, parallelOptions, async (file, token2) => { var messages = await Process(fileDataProvider, file, token2, isReload); lock (addLock) { - compressedMessages.AddRange(messages); + compressedMessages.AddRange(messages); } }); -#else + */ foreach (string file in files) { var messages = await Process(fileDataProvider, file, token, isReload); compressedMessages.AddRange(messages); } -#endif - return compressedMessages; + + return compressedMessages.OrderBy(m => m.Date); } else @@ -145,8 +142,8 @@ await Parallel.ForEachAsync(files, parallelOptions, async (file, token2) => } catch (Exception e) { - Logger.LogCritical("Analogy", $"Error parsing file: {e}\n{e.StackTrace}"); - var error = new AnalogyErrorMessage($"Error reading file {filename}: Error: {e.Message}\n{e.StackTrace}", "Analogy"); + Logger.LogCritical("Analogy", $"Error parsing file: {e}{Environment.NewLine}{e.StackTrace}"); + var error = new AnalogyErrorMessage($"Error reading file {filename}: Error: {e.Message}{Environment.NewLine}{e.StackTrace}", "Analogy"); error.Source = nameof(FileProcessor); error.Module = "Analogy"; DataWindow.AppendMessage(error, fileDataProvider.GetType().FullName); @@ -203,7 +200,7 @@ private void UnzipZipFileIntoTempFolder(string zipPath, string extractPath, IAna { //build a list of files to be extracted - var entries = archive.Entries.Where(entry => !entry.FullName.EndsWith("/") && fileDataProvider.CanOpenFile(entry.FullName)); + var entries = archive.Entries.Where(entry => !entry.FullName.EndsWith("/") && (fileDataProvider.CanOpenFile(entry.FullName) || IsCompressedArchive(entry.FullName))); foreach (ZipArchiveEntry entry in entries) { string fullTempName = Path.Combine(extractPath, entry.FullName); diff --git a/Analogy.UnitTests/Analogy.UnitTests.csproj b/Analogy.UnitTests/Analogy.UnitTests.csproj index 9780b0b46..0b83556ea 100644 --- a/Analogy.UnitTests/Analogy.UnitTests.csproj +++ b/Analogy.UnitTests/Analogy.UnitTests.csproj @@ -31,7 +31,8 @@ - + + @@ -39,4 +40,9 @@ + + + Always + + \ No newline at end of file diff --git a/Analogy.UnitTests/FileProcessorTests.cs b/Analogy.UnitTests/FileProcessorTests.cs new file mode 100644 index 000000000..5f5c83565 --- /dev/null +++ b/Analogy.UnitTests/FileProcessorTests.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Analogy.Common.DataTypes; +using Analogy.Common.Managers; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Analogy.UnitTests +{ + [TestClass] + public class FileProcessorTests + { + private CancellationTokenSource cancellationTokenSource; + private MessageHandlerForTesting handler = new MessageHandlerForTesting(); + [TestMethod] + public async Task TestWriteAndRead() + { + string fileName = "test_recursive.zip"; + cancellationTokenSource = new CancellationTokenSource(); + var settings = new DefaultUserSettingsManager + { + EnableCompressedArchives = true + }; + FileProcessor fp = new FileProcessor(settings, handler, new EmptyAnalogyLogger()); + OfflineDataProviderForTesting offlineDataProvider = new OfflineDataProviderForTesting(); + var result = await fp.Process(offlineDataProvider, fileName, cancellationTokenSource.Token, false); + Assert.IsTrue(result.Count() == 40); + } + } +} diff --git a/Analogy.UnitTests/OfflineDataProviderForTesting.cs b/Analogy.UnitTests/OfflineDataProviderForTesting.cs new file mode 100644 index 000000000..c34d98d92 --- /dev/null +++ b/Analogy.UnitTests/OfflineDataProviderForTesting.cs @@ -0,0 +1,18 @@ +using Analogy.Interfaces; +using Analogy.LogViewer.Template; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Analogy.UnitTests +{ + public class OfflineDataProviderForTesting : Analogy.LogViewer.Serilog.IAnalogy.OfflineDataProvider + { + + + } +} diff --git a/Analogy.UnitTests/test_recursive.zip b/Analogy.UnitTests/test_recursive.zip new file mode 100644 index 0000000000000000000000000000000000000000..45ab34f674dcf41c495ef34f75f401b511cfd4ae GIT binary patch literal 5789 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 literal 0 HcmV?d00001 diff --git a/Analogy/UserControls/DownloadStatisticsUC.Designer.cs b/Analogy/UserControls/DownloadStatisticsUC.Designer.cs index 525ae03fd..0b9513bf2 100644 --- a/Analogy/UserControls/DownloadStatisticsUC.Designer.cs +++ b/Analogy/UserControls/DownloadStatisticsUC.Designer.cs @@ -30,8 +30,9 @@ private void InitializeComponent() { this.panelChart = new DevExpress.XtraEditors.PanelControl(); this.panelTop = new DevExpress.XtraEditors.PanelControl(); - this.lblTotal = new DevExpress.XtraEditors.LabelControl(); this.cbeReleases = new DevExpress.XtraEditors.ComboBoxEdit(); + this.lblTotal = new DevExpress.XtraEditors.LabelControl(); + this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); ((System.ComponentModel.ISupportInitialize)(this.panelChart)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.panelTop)).BeginInit(); this.panelTop.SuspendLayout(); @@ -48,6 +49,7 @@ private void InitializeComponent() // // panelTop // + this.panelTop.Controls.Add(this.labelControl1); this.panelTop.Controls.Add(this.cbeReleases); this.panelTop.Controls.Add(this.lblTotal); this.panelTop.Dock = System.Windows.Forms.DockStyle.Top; @@ -56,14 +58,6 @@ private void InitializeComponent() this.panelTop.Size = new System.Drawing.Size(766, 41); this.panelTop.TabIndex = 4; // - // lblTotal - // - this.lblTotal.Location = new System.Drawing.Point(7, 13); - this.lblTotal.Name = "lblTotal"; - this.lblTotal.Size = new System.Drawing.Size(125, 16); - this.lblTotal.TabIndex = 0; - this.lblTotal.Text = "Total Downloads: N/A"; - // // cbeReleases // this.cbeReleases.Dock = System.Windows.Forms.DockStyle.Right; @@ -71,10 +65,28 @@ private void InitializeComponent() this.cbeReleases.Name = "cbeReleases"; this.cbeReleases.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); + this.cbeReleases.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor; this.cbeReleases.Size = new System.Drawing.Size(268, 22); this.cbeReleases.TabIndex = 1; this.cbeReleases.SelectedIndexChanged += new System.EventHandler(this.cbeReleases_SelectedIndexChanged); // + // lblTotal + // + this.lblTotal.Location = new System.Drawing.Point(7, 13); + this.lblTotal.Name = "lblTotal"; + this.lblTotal.Size = new System.Drawing.Size(125, 16); + this.lblTotal.TabIndex = 0; + this.lblTotal.Text = "Total Downloads: N/A"; + // + // labelControl1 + // + this.labelControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.labelControl1.Location = new System.Drawing.Point(394, 4); + this.labelControl1.Name = "labelControl1"; + this.labelControl1.Size = new System.Drawing.Size(96, 16); + this.labelControl1.TabIndex = 2; + this.labelControl1.Text = "Specific Version:"; + // // DownloadStatisticsUC // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); @@ -99,5 +111,6 @@ private void InitializeComponent() private DevExpress.XtraEditors.PanelControl panelTop; private DevExpress.XtraEditors.LabelControl lblTotal; private DevExpress.XtraEditors.ComboBoxEdit cbeReleases; + private DevExpress.XtraEditors.LabelControl labelControl1; } } diff --git a/Analogy/UserControls/DownloadStatisticsUC.cs b/Analogy/UserControls/DownloadStatisticsUC.cs index f5ef74d93..55049e945 100644 --- a/Analogy/UserControls/DownloadStatisticsUC.cs +++ b/Analogy/UserControls/DownloadStatisticsUC.cs @@ -17,7 +17,8 @@ namespace Analogy.UserControls public partial class DownloadStatisticsUC : XtraUserControl { private GithubObjects.GithubReleaseEntry[] Releases { get; } - + private int TotalDownloadFramework; + private int TotalDownloadNet; public DownloadStatisticsUC() { InitializeComponent(); @@ -48,9 +49,10 @@ private void DownloadStatisticsUC_Load(object sender, EventArgs e) var net5Downloads = net5.Sum(r => r.Sum(a => a.Downloads)); var net6Downloads = net6.Sum(r => r.Sum(a => a.Downloads)); var net7Downloads = net7.Sum(r => r.Sum(a => a.Downloads)); - - var total = net471Downloads + net472Downloads + net48Downloads + net31Downloads + net5Downloads + net6Downloads + net7Downloads; - lblTotal.Text = $"Total Downloads: {total}. Net Frameworks: {net471Downloads + net472Downloads + net48Downloads}. Net 3.1/5/6/7: {net31Downloads + net5Downloads + net6Downloads + net7Downloads}"; + TotalDownloadFramework = net471Downloads + net472Downloads + net48Downloads; + TotalDownloadNet = net31Downloads + net5Downloads + net6Downloads + net7Downloads; + var total = TotalDownloadFramework + TotalDownloadNet; + lblTotal.Text = $"Total Downloads: {total}. Net Frameworks: {TotalDownloadFramework}. Net 3.1/5/6/7: {TotalDownloadNet}"; var net471percentage = (double)net471Downloads / (total) * 100.0; var net472percentage = (double)net472Downloads / (total) * 100.0; var net48percentage = (double)net48Downloads / (total) * 100.0; @@ -144,7 +146,7 @@ private void cbeReleases_SelectedIndexChanged(object sender, EventArgs e) var net7Downloads = net7.Sum(r => r.Downloads); var total = net471Downloads + net472Downloads + net48Downloads + net31Downloads + net5Downloads + net6Downloads + net7Downloads; - + lblTotal.Text = $"Total Downloads ({release.TagName}): {total}. Net Frameworks: {net471Downloads + net472Downloads + net48Downloads}. Net 3.1/5/6/7: {net31Downloads + net5Downloads + net6Downloads + net7Downloads}"; List data = new List() { new PieChartSingleDataPoint("NET Framework 471", net471Downloads), From dd24613705a96935899f432ec00aa655e71520d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 26 Oct 2022 13:07:05 +0200 Subject: [PATCH 13/25] =?UTF-8?q?=E2=9C=A8=20Enable=20show=20ShowCondition?= =?UTF-8?q?alFormatting=20by=20default=20(existing=20AnalogyGridlayout.xml?= =?UTF-8?q?=20and=20custom=20layouts=20will=20overrride=20it).=20=E2=9A=B0?= =?UTF-8?q?=EF=B8=8F=20LogGridUC=20and=20UCLogsNonFloatable=20don't=20seem?= =?UTF-8?q?=20to=20be=20used=20anymore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserControls/LogMessagesUC.Designer.cs | 2 + Analogy/UserControls/LogGridUC.Designer.cs | 642 --- Analogy/UserControls/LogGridUC.cs | 21 - Analogy/UserControls/LogGridUC.resx | 120 - .../UCLogsNonFloatable.Designer.cs | 3352 ---------------- Analogy/UserControls/UCLogsNonFloatable.cs | 3108 --------------- Analogy/UserControls/UCLogsNonFloatable.resx | 3529 ----------------- 7 files changed, 2 insertions(+), 10772 deletions(-) delete mode 100644 Analogy/UserControls/LogGridUC.Designer.cs delete mode 100644 Analogy/UserControls/LogGridUC.cs delete mode 100644 Analogy/UserControls/LogGridUC.resx delete mode 100644 Analogy/UserControls/UCLogsNonFloatable.Designer.cs delete mode 100644 Analogy/UserControls/UCLogsNonFloatable.cs delete mode 100644 Analogy/UserControls/UCLogsNonFloatable.resx diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.Designer.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.Designer.cs index 7459e9061..b2680fecf 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.Designer.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.Designer.cs @@ -480,6 +480,8 @@ private void InitializeComponent() this.logGrid.OptionsView.RowAutoHeight = true; this.logGrid.OptionsView.ShowAutoFilterRow = true; this.logGrid.OptionsView.ShowGroupPanel = false; + this.logGrid.OptionsMenu.ShowConditionalFormattingItem = true; + this.logGrid.OptionsMenu.EnableColumnMenu = true; this.logGrid.ShowFilterPopupListBox += new DevExpress.XtraGrid.Views.Grid.FilterPopupListBoxEventHandler(this.GridViewShowFilterPopupListBox); this.logGrid.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.LogGridViewCustomColumnDisplayText); this.logGrid.Click += new System.EventHandler(this.logGrid_Click); diff --git a/Analogy/UserControls/LogGridUC.Designer.cs b/Analogy/UserControls/LogGridUC.Designer.cs deleted file mode 100644 index 6bafe0aac..000000000 --- a/Analogy/UserControls/LogGridUC.Designer.cs +++ /dev/null @@ -1,642 +0,0 @@ - -namespace Analogy.UserControls -{ - partial class LogGridUC - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.layoutControlLogs = new DevExpress.XtraLayout.LayoutControl(); - this.sbtnPageFirst = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnMoreHighlight = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnPagePrevious = new DevExpress.XtraEditors.SimpleButton(); - this.sBtnPageNext = new DevExpress.XtraEditors.SimpleButton(); - this.chkbHighlight = new DevExpress.XtraEditors.CheckEdit(); - this.sBtnLastPage = new DevExpress.XtraEditors.SimpleButton(); - this.txtbHighlight = new DevExpress.XtraEditors.TextEdit(); - this.gridControl = new DevExpress.XtraGrid.GridControl(); - this.logGrid = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.gridColumnDataSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnDate = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnTimeDiff = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnText = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnLevel = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnClass = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnCategory = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnUser = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnModule = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnObject = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnProcessID = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnThread = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnMachineName = new DevExpress.XtraGrid.Columns.GridColumn(); - this.layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup(); - this.layoutControlItem20 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem22 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem23 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem24 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem25 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem27 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem28 = new DevExpress.XtraLayout.LayoutControlItem(); - this.layoutControlItem21 = new DevExpress.XtraLayout.LayoutControlItem(); - this.lblPageNumber = new DevExpress.XtraLayout.SimpleLabelItem(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlLogs)).BeginInit(); - this.layoutControlLogs.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.chkbHighlight.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.txtbHighlight.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.logGrid)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem22)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem23)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem24)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem27)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem28)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem21)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.lblPageNumber)).BeginInit(); - this.SuspendLayout(); - // - // layoutControlLogs - // - this.layoutControlLogs.Controls.Add(this.sbtnPageFirst); - this.layoutControlLogs.Controls.Add(this.sbtnMoreHighlight); - this.layoutControlLogs.Controls.Add(this.sbtnPagePrevious); - this.layoutControlLogs.Controls.Add(this.sBtnPageNext); - this.layoutControlLogs.Controls.Add(this.chkbHighlight); - this.layoutControlLogs.Controls.Add(this.sBtnLastPage); - this.layoutControlLogs.Controls.Add(this.txtbHighlight); - this.layoutControlLogs.Controls.Add(this.gridControl); - this.layoutControlLogs.Dock = System.Windows.Forms.DockStyle.Fill; - this.layoutControlLogs.Location = new System.Drawing.Point(0, 0); - this.layoutControlLogs.Name = "layoutControlLogs"; - this.layoutControlLogs.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(520, 50, 812, 500); - this.layoutControlLogs.Root = this.layoutControlGroup1; - this.layoutControlLogs.Size = new System.Drawing.Size(1052, 407); - this.layoutControlLogs.TabIndex = 7; - this.layoutControlLogs.Text = "layoutControl2"; - // - // sbtnPageFirst - // - this.sbtnPageFirst.Location = new System.Drawing.Point(696, 373); - this.sbtnPageFirst.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnPageFirst.Name = "sbtnPageFirst"; - this.sbtnPageFirst.Size = new System.Drawing.Size(63, 27); - this.sbtnPageFirst.StyleController = this.layoutControlLogs; - this.sbtnPageFirst.TabIndex = 5; - this.sbtnPageFirst.Text = "first Page"; - // - // sbtnMoreHighlight - // - this.sbtnMoreHighlight.Location = new System.Drawing.Point(638, 373); - this.sbtnMoreHighlight.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnMoreHighlight.Name = "sbtnMoreHighlight"; - this.sbtnMoreHighlight.Size = new System.Drawing.Size(54, 27); - this.sbtnMoreHighlight.StyleController = this.layoutControlLogs; - this.sbtnMoreHighlight.TabIndex = 4; - this.sbtnMoreHighlight.Text = "More ..."; - // - // sbtnPagePrevious - // - this.sbtnPagePrevious.Location = new System.Drawing.Point(763, 373); - this.sbtnPagePrevious.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnPagePrevious.Name = "sbtnPagePrevious"; - this.sbtnPagePrevious.Size = new System.Drawing.Size(89, 27); - this.sbtnPagePrevious.StyleController = this.layoutControlLogs; - this.sbtnPagePrevious.TabIndex = 6; - this.sbtnPagePrevious.Text = "Previous Page"; - // - // sBtnPageNext - // - this.sBtnPageNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.sBtnPageNext.Location = new System.Drawing.Point(911, 373); - this.sBtnPageNext.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sBtnPageNext.Name = "sBtnPageNext"; - this.sBtnPageNext.Size = new System.Drawing.Size(66, 27); - this.sBtnPageNext.StyleController = this.layoutControlLogs; - this.sBtnPageNext.TabIndex = 7; - this.sBtnPageNext.Text = "Next Page"; - // - // chkbHighlight - // - this.chkbHighlight.Location = new System.Drawing.Point(7, 373); - this.chkbHighlight.Name = "chkbHighlight"; - this.chkbHighlight.Properties.Caption = "Highlight lines that contains:"; - this.chkbHighlight.Size = new System.Drawing.Size(183, 20); - this.chkbHighlight.StyleController = this.layoutControlLogs; - this.chkbHighlight.TabIndex = 2; - // - // sBtnLastPage - // - this.sBtnLastPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.sBtnLastPage.Location = new System.Drawing.Point(981, 373); - this.sBtnLastPage.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sBtnLastPage.Name = "sBtnLastPage"; - this.sBtnLastPage.Size = new System.Drawing.Size(64, 27); - this.sBtnLastPage.StyleController = this.layoutControlLogs; - this.sBtnLastPage.TabIndex = 8; - this.sBtnLastPage.Text = "Last Page"; - // - // txtbHighlight - // - this.txtbHighlight.Location = new System.Drawing.Point(194, 373); - this.txtbHighlight.Name = "txtbHighlight"; - this.txtbHighlight.Size = new System.Drawing.Size(440, 22); - this.txtbHighlight.StyleController = this.layoutControlLogs; - this.txtbHighlight.TabIndex = 3; - // - // gridControl - // - this.gridControl.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControl.Location = new System.Drawing.Point(7, 7); - this.gridControl.MainView = this.logGrid; - this.gridControl.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControl.Name = "gridControl"; - this.gridControl.Size = new System.Drawing.Size(1038, 362); - this.gridControl.TabIndex = 0; - this.gridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.logGrid}); - // - // logGrid - // - this.logGrid.Appearance.Row.Options.UseTextOptions = true; - this.logGrid.Appearance.Row.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.logGrid.Appearance.Row.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.logGrid.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; - this.logGrid.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.gridColumnDataSource, - this.gridColumnDate, - this.gridColumnTimeDiff, - this.gridColumnText, - this.gridColumnSource, - this.gridColumnLevel, - this.gridColumnClass, - this.gridColumnCategory, - this.gridColumnUser, - this.gridColumnModule, - this.gridColumnObject, - this.gridColumnProcessID, - this.gridColumnThread, - this.gridColumnMachineName}); - this.logGrid.DetailHeight = 431; - this.logGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; - this.logGrid.GridControl = this.gridControl; - this.logGrid.IndicatorWidth = 24; - this.logGrid.Name = "logGrid"; - this.logGrid.OptionsBehavior.AllowIncrementalSearch = true; - this.logGrid.OptionsFilter.AllowColumnMRUFilterList = false; - this.logGrid.OptionsFilter.AllowMRUFilterList = false; - this.logGrid.OptionsFind.AlwaysVisible = true; - this.logGrid.OptionsLayout.Columns.StoreAllOptions = true; - this.logGrid.OptionsLayout.Columns.StoreAppearance = true; - this.logGrid.OptionsLayout.StoreAllOptions = true; - this.logGrid.OptionsLayout.StoreAppearance = true; - this.logGrid.OptionsLayout.StoreFormatRules = true; - this.logGrid.OptionsSelection.EnableAppearanceFocusedCell = false; - this.logGrid.OptionsView.AutoCalcPreviewLineCount = true; - this.logGrid.OptionsView.ColumnAutoWidth = false; - this.logGrid.OptionsView.RowAutoHeight = true; - this.logGrid.OptionsView.ShowAutoFilterRow = true; - this.logGrid.OptionsView.ShowGroupPanel = false; - // - // gridColumnDataSource - // - this.gridColumnDataSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnDataSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnDataSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnDataSource.Caption = "Data Source/File Name"; - this.gridColumnDataSource.FieldName = "DataProvider"; - this.gridColumnDataSource.MinWidth = 24; - this.gridColumnDataSource.Name = "gridColumnDataSource"; - this.gridColumnDataSource.OptionsColumn.AllowEdit = false; - this.gridColumnDataSource.OptionsColumn.AllowFocus = false; - this.gridColumnDataSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDataSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDataSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnDataSource.OptionsColumn.ReadOnly = true; - this.gridColumnDataSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnDataSource.Visible = true; - this.gridColumnDataSource.VisibleIndex = 0; - this.gridColumnDataSource.Width = 175; - // - // gridColumnDate - // - this.gridColumnDate.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnDate.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnDate.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnDate.Caption = "Date"; - this.gridColumnDate.DisplayFormat.FormatString = "yyyy.MM.dd HH:mm:ss.ff"; - this.gridColumnDate.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.gridColumnDate.FieldName = "Date"; - this.gridColumnDate.MinWidth = 24; - this.gridColumnDate.Name = "gridColumnDate"; - this.gridColumnDate.OptionsColumn.AllowEdit = false; - this.gridColumnDate.OptionsColumn.AllowFocus = false; - this.gridColumnDate.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDate.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDate.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnDate.OptionsColumn.ReadOnly = true; - this.gridColumnDate.OptionsFilter.AllowAutoFilter = false; - this.gridColumnDate.Visible = true; - this.gridColumnDate.VisibleIndex = 1; - this.gridColumnDate.Width = 164; - // - // gridColumnTimeDiff - // - this.gridColumnTimeDiff.Caption = "Time Difference"; - this.gridColumnTimeDiff.FieldName = "TimeDiff"; - this.gridColumnTimeDiff.MinWidth = 22; - this.gridColumnTimeDiff.Name = "gridColumnTimeDiff"; - this.gridColumnTimeDiff.OptionsColumn.AllowEdit = false; - this.gridColumnTimeDiff.Width = 87; - // - // gridColumnText - // - this.gridColumnText.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnText.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnText.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnText.Caption = "Text"; - this.gridColumnText.FieldName = "Text"; - this.gridColumnText.MinWidth = 24; - this.gridColumnText.Name = "gridColumnText"; - this.gridColumnText.OptionsColumn.AllowEdit = false; - this.gridColumnText.OptionsColumn.AllowFocus = false; - this.gridColumnText.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnText.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnText.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnText.OptionsColumn.ReadOnly = true; - this.gridColumnText.OptionsFilter.AllowFilter = false; - this.gridColumnText.Visible = true; - this.gridColumnText.VisibleIndex = 2; - this.gridColumnText.Width = 290; - // - // gridColumnSource - // - this.gridColumnSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnSource.Caption = "Source"; - this.gridColumnSource.FieldName = "Source"; - this.gridColumnSource.MinWidth = 24; - this.gridColumnSource.Name = "gridColumnSource"; - this.gridColumnSource.OptionsColumn.AllowEdit = false; - this.gridColumnSource.OptionsColumn.AllowFocus = false; - this.gridColumnSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnSource.OptionsColumn.ReadOnly = true; - this.gridColumnSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnSource.Visible = true; - this.gridColumnSource.VisibleIndex = 3; - this.gridColumnSource.Width = 234; - // - // gridColumnLevel - // - this.gridColumnLevel.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnLevel.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnLevel.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnLevel.Caption = "Level"; - this.gridColumnLevel.FieldName = "Level"; - this.gridColumnLevel.MinWidth = 24; - this.gridColumnLevel.Name = "gridColumnLevel"; - this.gridColumnLevel.OptionsColumn.AllowEdit = false; - this.gridColumnLevel.OptionsColumn.AllowFocus = false; - this.gridColumnLevel.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnLevel.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnLevel.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnLevel.OptionsColumn.ReadOnly = true; - this.gridColumnLevel.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnLevel.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { - new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom)}); - this.gridColumnLevel.Visible = true; - this.gridColumnLevel.VisibleIndex = 4; - this.gridColumnLevel.Width = 115; - // - // gridColumnClass - // - this.gridColumnClass.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnClass.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnClass.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnClass.Caption = "Class"; - this.gridColumnClass.FieldName = "Class"; - this.gridColumnClass.MinWidth = 24; - this.gridColumnClass.Name = "gridColumnClass"; - this.gridColumnClass.OptionsColumn.AllowEdit = false; - this.gridColumnClass.OptionsColumn.AllowFocus = false; - this.gridColumnClass.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnClass.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnClass.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnClass.OptionsColumn.ReadOnly = true; - this.gridColumnClass.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnClass.Visible = true; - this.gridColumnClass.VisibleIndex = 6; - this.gridColumnClass.Width = 115; - // - // gridColumnCategory - // - this.gridColumnCategory.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnCategory.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnCategory.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnCategory.Caption = "Category"; - this.gridColumnCategory.FieldName = "Category"; - this.gridColumnCategory.MinWidth = 24; - this.gridColumnCategory.Name = "gridColumnCategory"; - this.gridColumnCategory.OptionsColumn.AllowEdit = false; - this.gridColumnCategory.OptionsColumn.AllowFocus = false; - this.gridColumnCategory.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnCategory.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnCategory.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnCategory.OptionsColumn.ReadOnly = true; - this.gridColumnCategory.Visible = true; - this.gridColumnCategory.VisibleIndex = 7; - this.gridColumnCategory.Width = 115; - // - // gridColumnUser - // - this.gridColumnUser.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnUser.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnUser.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnUser.Caption = "User"; - this.gridColumnUser.FieldName = "User"; - this.gridColumnUser.MinWidth = 24; - this.gridColumnUser.Name = "gridColumnUser"; - this.gridColumnUser.OptionsColumn.AllowEdit = false; - this.gridColumnUser.OptionsColumn.AllowFocus = false; - this.gridColumnUser.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnUser.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnUser.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnUser.OptionsColumn.ReadOnly = true; - this.gridColumnUser.Visible = true; - this.gridColumnUser.VisibleIndex = 8; - this.gridColumnUser.Width = 115; - // - // gridColumnModule - // - this.gridColumnModule.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnModule.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnModule.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnModule.Caption = "Process/Module"; - this.gridColumnModule.FieldName = "Module"; - this.gridColumnModule.MinWidth = 24; - this.gridColumnModule.Name = "gridColumnModule"; - this.gridColumnModule.OptionsColumn.AllowEdit = false; - this.gridColumnModule.OptionsColumn.AllowFocus = false; - this.gridColumnModule.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnModule.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnModule.OptionsColumn.ReadOnly = true; - this.gridColumnModule.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnModule.Visible = true; - this.gridColumnModule.VisibleIndex = 5; - this.gridColumnModule.Width = 115; - // - // gridColumnObject - // - this.gridColumnObject.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnObject.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnObject.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnObject.Caption = "Object"; - this.gridColumnObject.FieldName = "Object"; - this.gridColumnObject.MinWidth = 24; - this.gridColumnObject.Name = "gridColumnObject"; - this.gridColumnObject.OptionsColumn.AllowEdit = false; - this.gridColumnObject.OptionsColumn.AllowFocus = false; - this.gridColumnObject.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnObject.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnObject.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnObject.OptionsColumn.ReadOnly = true; - this.gridColumnObject.OptionsColumn.ShowCaption = false; - this.gridColumnObject.OptionsColumn.ShowInCustomizationForm = false; - this.gridColumnObject.Width = 87; - // - // gridColumnProcessID - // - this.gridColumnProcessID.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnProcessID.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnProcessID.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnProcessID.Caption = "ProcessID"; - this.gridColumnProcessID.FieldName = "ProcessID"; - this.gridColumnProcessID.MinWidth = 24; - this.gridColumnProcessID.Name = "gridColumnProcessID"; - this.gridColumnProcessID.OptionsColumn.AllowEdit = false; - this.gridColumnProcessID.OptionsColumn.AllowFocus = false; - this.gridColumnProcessID.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnProcessID.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnProcessID.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnProcessID.OptionsColumn.ReadOnly = true; - this.gridColumnProcessID.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnProcessID.Visible = true; - this.gridColumnProcessID.VisibleIndex = 9; - this.gridColumnProcessID.Width = 115; - // - // gridColumnThread - // - this.gridColumnThread.Caption = "Thread ID"; - this.gridColumnThread.FieldName = "ThreadID"; - this.gridColumnThread.MinWidth = 25; - this.gridColumnThread.Name = "gridColumnThread"; - this.gridColumnThread.OptionsColumn.AllowEdit = false; - this.gridColumnThread.Visible = true; - this.gridColumnThread.VisibleIndex = 10; - this.gridColumnThread.Width = 109; - // - // gridColumnMachineName - // - this.gridColumnMachineName.Caption = "Machine Name"; - this.gridColumnMachineName.FieldName = "MachineName"; - this.gridColumnMachineName.MinWidth = 25; - this.gridColumnMachineName.Name = "gridColumnMachineName"; - this.gridColumnMachineName.OptionsColumn.AllowEdit = false; - this.gridColumnMachineName.Visible = true; - this.gridColumnMachineName.VisibleIndex = 11; - this.gridColumnMachineName.Width = 94; - // - // layoutControlGroup1 - // - this.layoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True; - this.layoutControlGroup1.GroupBordersVisible = false; - this.layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { - this.layoutControlItem20, - this.layoutControlItem22, - this.layoutControlItem23, - this.layoutControlItem24, - this.layoutControlItem25, - this.layoutControlItem27, - this.layoutControlItem28, - this.layoutControlItem21, - this.lblPageNumber}); - this.layoutControlGroup1.Name = "Root"; - this.layoutControlGroup1.Padding = new DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5); - this.layoutControlGroup1.Size = new System.Drawing.Size(1052, 407); - this.layoutControlGroup1.TextVisible = false; - // - // layoutControlItem20 - // - this.layoutControlItem20.Control = this.gridControl; - this.layoutControlItem20.Location = new System.Drawing.Point(0, 0); - this.layoutControlItem20.Name = "layoutControlItem20"; - this.layoutControlItem20.Size = new System.Drawing.Size(1042, 366); - this.layoutControlItem20.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem20.TextVisible = false; - // - // layoutControlItem22 - // - this.layoutControlItem22.Control = this.txtbHighlight; - this.layoutControlItem22.Location = new System.Drawing.Point(187, 366); - this.layoutControlItem22.Name = "layoutControlItem22"; - this.layoutControlItem22.Size = new System.Drawing.Size(444, 31); - this.layoutControlItem22.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem22.TextVisible = false; - // - // layoutControlItem23 - // - this.layoutControlItem23.Control = this.chkbHighlight; - this.layoutControlItem23.Location = new System.Drawing.Point(0, 366); - this.layoutControlItem23.Name = "layoutControlItem23"; - this.layoutControlItem23.Size = new System.Drawing.Size(187, 31); - this.layoutControlItem23.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem23.TextVisible = false; - // - // layoutControlItem24 - // - this.layoutControlItem24.Control = this.sBtnLastPage; - this.layoutControlItem24.Location = new System.Drawing.Point(974, 366); - this.layoutControlItem24.Name = "layoutControlItem24"; - this.layoutControlItem24.Size = new System.Drawing.Size(68, 31); - this.layoutControlItem24.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem24.TextVisible = false; - // - // layoutControlItem25 - // - this.layoutControlItem25.Control = this.sBtnPageNext; - this.layoutControlItem25.Location = new System.Drawing.Point(904, 366); - this.layoutControlItem25.Name = "layoutControlItem25"; - this.layoutControlItem25.Size = new System.Drawing.Size(70, 31); - this.layoutControlItem25.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem25.TextVisible = false; - // - // layoutControlItem27 - // - this.layoutControlItem27.Control = this.sbtnPagePrevious; - this.layoutControlItem27.Location = new System.Drawing.Point(756, 366); - this.layoutControlItem27.Name = "layoutControlItem27"; - this.layoutControlItem27.Size = new System.Drawing.Size(93, 31); - this.layoutControlItem27.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem27.TextVisible = false; - // - // layoutControlItem28 - // - this.layoutControlItem28.Control = this.sbtnPageFirst; - this.layoutControlItem28.Location = new System.Drawing.Point(689, 366); - this.layoutControlItem28.Name = "layoutControlItem28"; - this.layoutControlItem28.Size = new System.Drawing.Size(67, 31); - this.layoutControlItem28.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem28.TextVisible = false; - // - // layoutControlItem21 - // - this.layoutControlItem21.Control = this.sbtnMoreHighlight; - this.layoutControlItem21.Location = new System.Drawing.Point(631, 366); - this.layoutControlItem21.Name = "layoutControlItem21"; - this.layoutControlItem21.Size = new System.Drawing.Size(58, 31); - this.layoutControlItem21.TextSize = new System.Drawing.Size(0, 0); - this.layoutControlItem21.TextVisible = false; - // - // lblPageNumber - // - this.lblPageNumber.AllowHotTrack = false; - this.lblPageNumber.Location = new System.Drawing.Point(849, 366); - this.lblPageNumber.Name = "lblPageNumber"; - this.lblPageNumber.Size = new System.Drawing.Size(55, 31); - this.lblPageNumber.Text = "Page 1/1"; - this.lblPageNumber.TextAlignMode = DevExpress.XtraLayout.TextAlignModeItem.AutoSize; - this.lblPageNumber.TextSize = new System.Drawing.Size(51, 16); - // - // LogGridUC - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.layoutControlLogs); - this.Name = "LogGridUC"; - this.Size = new System.Drawing.Size(1052, 407); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlLogs)).EndInit(); - this.layoutControlLogs.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.chkbHighlight.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.txtbHighlight.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.logGrid)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlGroup1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem20)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem22)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem23)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem24)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem25)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem27)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem28)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem21)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.lblPageNumber)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private DevExpress.XtraLayout.LayoutControl layoutControlLogs; - private DevExpress.XtraEditors.SimpleButton sbtnPageFirst; - private DevExpress.XtraEditors.SimpleButton sbtnMoreHighlight; - private DevExpress.XtraEditors.SimpleButton sbtnPagePrevious; - private DevExpress.XtraEditors.SimpleButton sBtnPageNext; - private DevExpress.XtraEditors.CheckEdit chkbHighlight; - private DevExpress.XtraEditors.SimpleButton sBtnLastPage; - private DevExpress.XtraEditors.TextEdit txtbHighlight; - private DevExpress.XtraGrid.GridControl gridControl; - private DevExpress.XtraGrid.Views.Grid.GridView logGrid; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnDataSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnDate; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnTimeDiff; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnText; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnLevel; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnClass; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnCategory; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnUser; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnModule; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnObject; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnProcessID; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnThread; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnMachineName; - private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem20; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem22; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem23; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem24; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem25; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem27; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem28; - private DevExpress.XtraLayout.LayoutControlItem layoutControlItem21; - private DevExpress.XtraLayout.SimpleLabelItem lblPageNumber; - } -} diff --git a/Analogy/UserControls/LogGridUC.cs b/Analogy/UserControls/LogGridUC.cs deleted file mode 100644 index d423df058..000000000 --- a/Analogy/UserControls/LogGridUC.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using DevExpress.XtraEditors; - -namespace Analogy.UserControls -{ - public partial class LogGridUC : XtraUserControl - { - public LogGridUC() - { - InitializeComponent(); - } - } -} diff --git a/Analogy/UserControls/LogGridUC.resx b/Analogy/UserControls/LogGridUC.resx deleted file mode 100644 index 1af7de150..000000000 --- a/Analogy/UserControls/LogGridUC.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Analogy/UserControls/UCLogsNonFloatable.Designer.cs b/Analogy/UserControls/UCLogsNonFloatable.Designer.cs deleted file mode 100644 index a0bfdff8d..000000000 --- a/Analogy/UserControls/UCLogsNonFloatable.Designer.cs +++ /dev/null @@ -1,3352 +0,0 @@ -using DevExpress.XtraGrid.Views.Grid; - -namespace Analogy -{ - partial class UCLogsNonFloatable - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (DesignMode) return; - tmrNewData.Stop(); - tmrNewData.Dispose(); - if (disposing) - { - - if (components != null) - { - components.Dispose(); - - } - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UCLogs)); - DevExpress.Utils.SuperToolTip superToolTip5 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipTitleItem toolTipTitleItem5 = new DevExpress.Utils.ToolTipTitleItem(); - DevExpress.Utils.ToolTipItem toolTipItem5 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipTitleItem toolTipTitleItem1 = new DevExpress.Utils.ToolTipTitleItem(); - DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip2 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipTitleItem toolTipTitleItem2 = new DevExpress.Utils.ToolTipTitleItem(); - DevExpress.Utils.ToolTipItem toolTipItem2 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip3 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipTitleItem toolTipTitleItem3 = new DevExpress.Utils.ToolTipTitleItem(); - DevExpress.Utils.ToolTipItem toolTipItem3 = new DevExpress.Utils.ToolTipItem(); - this.gridControl = new DevExpress.XtraGrid.GridControl(); - this.logGrid = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.gridColumnDataSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnDate = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnTimeDiff = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnText = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnLevel = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnClass = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnCategory = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnUser = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnModule = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnObject = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnProcessID = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnThread = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnMachineName = new DevExpress.XtraGrid.Columns.GridColumn(); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.panel1 = new System.Windows.Forms.Panel(); - this.txtbHighlight = new DevExpress.XtraEditors.TextEdit(); - this.barManager1 = new DevExpress.XtraBars.BarManager(this.components); - this.barTopFiltering = new DevExpress.XtraBars.Bar(); - this.bBtnClearLog = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnRemoveBoomark = new DevExpress.XtraBars.BarButtonItem(); - this.bbtnReload = new DevExpress.XtraBars.BarButtonItem(); - this.btswitchMessageDetails = new DevExpress.XtraBars.BarToggleSwitchItem(); - this.btswitchRefreshLog = new DevExpress.XtraBars.BarToggleSwitchItem(); - this.btsAutoScrollToBottom = new DevExpress.XtraBars.BarToggleSwitchItem(); - this.barSubItemSaveLog = new DevExpress.XtraBars.BarSubItem(); - this.barButtonItemSaveEntireInAnalogy = new DevExpress.XtraBars.BarButtonItem(); - this.bbtnSaveViewAgnostic = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnSaveCurrentSelectionAnalogyFormat = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnSaveEntireLog = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnSaveLog = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnSaveCurrentSelectionCustomFormat = new DevExpress.XtraBars.BarButtonItem(); - this.bSMExports = new DevExpress.XtraBars.BarSubItem(); - this.bBtnExportExcel = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnExportCSV = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnExportHtml = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnFullGrid = new DevExpress.XtraBars.BarButtonItem(); - this.barSubItem1 = new DevExpress.XtraBars.BarSubItem(); - this.bBtnUndockView = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnUndockViewPerProcess = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnUndockSelection = new DevExpress.XtraBars.BarButtonItem(); - this.bbiScreenshot = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnImport = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnDataVisualizer = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnShare = new DevExpress.XtraBars.BarButtonItem(); - this.bdcTopFiltering = new DevExpress.XtraBars.StandaloneBarDockControl(); - this.BbarMainMenu = new DevExpress.XtraBars.Bar(); - this.barMessage = new DevExpress.XtraBars.Bar(); - this.bBtnCopyButtom = new DevExpress.XtraBars.BarButtonItem(); - this.bdcMessageBottom = new DevExpress.XtraBars.StandaloneBarDockControl(); - this.barBookmark = new DevExpress.XtraBars.Bar(); - this.bbiSaveBookmarks = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnopyBookmarked = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnCopyAllBookmarks = new DevExpress.XtraBars.BarButtonItem(); - this.barButtonItem4 = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnGoToMessage = new DevExpress.XtraBars.BarButtonItem(); - this.bdcBookmarks = new DevExpress.XtraBars.StandaloneBarDockControl(); - this.barGroup = new DevExpress.XtraBars.Bar(); - this.standaloneBarDockControlLeft = new DevExpress.XtraBars.StandaloneBarDockControl(); - this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); - this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); - this.bBtnExpand = new DevExpress.XtraBars.BarButtonItem(); - this.barButtonItem3 = new DevExpress.XtraBars.BarButtonItem(); - this.bBtnButtomExpand = new DevExpress.XtraBars.BarButtonItem(); - this.btSwitchExpandButtomMessage = new DevExpress.XtraBars.BarToggleSwitchItem(); - this.bbiDiffTime = new DevExpress.XtraBars.BarButtonItem(); - this.bbiDatetiemFilterFrom = new DevExpress.XtraBars.BarButtonItem(); - this.bbiDatetiemFilterTo = new DevExpress.XtraBars.BarButtonItem(); - this.bbiBookmarkNonPersist = new DevExpress.XtraBars.BarButtonItem(); - this.bbiBookmarkPersist = new DevExpress.XtraBars.BarButtonItem(); - this.bbiCopyMessage = new DevExpress.XtraBars.BarButtonItem(); - this.bbiCopyAllMessages = new DevExpress.XtraBars.BarButtonItem(); - this.bbiAddNoteToMessage = new DevExpress.XtraBars.BarButtonItem(); - this.bbiIncludeMessage = new DevExpress.XtraBars.BarButtonItem(); - this.bbiIncludeColumnHeaderFilter = new DevExpress.XtraBars.BarButtonItem(); - this.bbiExcludeMessage = new DevExpress.XtraBars.BarButtonItem(); - this.bbiExcludeSource = new DevExpress.XtraBars.BarButtonItem(); - this.bbiExcludeModule = new DevExpress.XtraBars.BarButtonItem(); - this.bbiSaveLayout = new DevExpress.XtraBars.BarButtonItem(); - this.bbiIncreaseFontSize = new DevExpress.XtraBars.BarButtonItem(); - this.bbiDecreaseFontSize = new DevExpress.XtraBars.BarButtonItem(); - this.bbiIncludeSource = new DevExpress.XtraBars.BarButtonItem(); - this.bbiIncludeModule = new DevExpress.XtraBars.BarButtonItem(); - this.bbiJsonViewer = new DevExpress.XtraBars.BarButtonItem(); - this.sbtnMoreHighlight = new DevExpress.XtraEditors.SimpleButton(); - this.pnlButtonsHighlight = new System.Windows.Forms.Panel(); - this.lblPageNumber = new DevExpress.XtraEditors.LabelControl(); - this.sBtnPageNext = new DevExpress.XtraEditors.SimpleButton(); - this.sBtnLastPage = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnPagePrevious = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnPageFirst = new DevExpress.XtraEditors.SimpleButton(); - this.chkbHighlight = new System.Windows.Forms.CheckBox(); - this.spltcDateFiltering = new System.Windows.Forms.SplitContainer(); - this.deOlderThanFilter = new DevExpress.XtraEditors.DateEdit(); - this.ceOlderThanFilter = new DevExpress.XtraEditors.CheckEdit(); - this.deNewerThanFilter = new DevExpress.XtraEditors.DateEdit(); - this.ceNewerThanFilter = new DevExpress.XtraEditors.CheckEdit(); - this.spltcProcessesModule = new System.Windows.Forms.SplitContainer(); - this.txtbModule = new DevExpress.XtraEditors.TextEdit(); - this.ceModulesProcess = new DevExpress.XtraEditors.CheckEdit(); - this.sbtnIncludeModules = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnUndockPerProcess = new DevExpress.XtraEditors.SimpleButton(); - this.spltcSources = new System.Windows.Forms.SplitContainer(); - this.txtbSource = new DevExpress.XtraEditors.TextEdit(); - this.ceSources = new DevExpress.XtraEditors.CheckEdit(); - this.sbtnIncludeSources = new DevExpress.XtraEditors.SimpleButton(); - this.spltTextExclude = new System.Windows.Forms.SplitContainer(); - this.txtbExclude = new DevExpress.XtraEditors.TextEdit(); - this.ceExcludeText = new DevExpress.XtraEditors.CheckEdit(); - this.sbtnTextExclude = new DevExpress.XtraEditors.SimpleButton(); - this.sBtnMostCommon = new DevExpress.XtraEditors.SimpleButton(); - this.spltText = new System.Windows.Forms.SplitContainer(); - this.txtbInclude = new DevExpress.XtraEditors.TextEdit(); - this.ceIncludeText = new DevExpress.XtraEditors.CheckEdit(); - this.defaultToolTipController = new DevExpress.Utils.ToolTipController(this.components); - this.sbtnTextInclude = new DevExpress.XtraEditors.SimpleButton(); - this.sbtnPreDefinedFilters = new DevExpress.XtraEditors.SimpleButton(); - this.chkLstLogLevel = new DevExpress.XtraEditors.CheckedListBoxControl(); - this.tcBottom = new DevExpress.XtraTab.XtraTabControl(); - this.xtpMessageInfo = new DevExpress.XtraTab.XtraTabPage(); - this.rtxtContent = new DevExpress.XtraEditors.MemoEdit(); - this.xtpBookmarks = new DevExpress.XtraTab.XtraTabPage(); - this.gridControlBookmarkedMessages = new DevExpress.XtraGrid.GridControl(); - this.gridViewBookmarkedMessages = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.gridColumnBookmarkDataSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkDate = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkText = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkSource = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkLevel = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkClass = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkCategory = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkUser = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkModule = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkAudit = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkObject = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkProcessID = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumnBookmarkMachineName = new DevExpress.XtraGrid.Columns.GridColumn(); - this.imageListBottom = new System.Windows.Forms.ImageList(this.components); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.tmrNewData = new System.Windows.Forms.Timer(this.components); - this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl(); - this.xtpMain = new DevExpress.XtraTab.XtraTabPage(); - this.splitContainerMain = new DevExpress.XtraEditors.SplitContainerControl(); - this.pnlFilters = new DevExpress.XtraEditors.PanelControl(); - this.xtcFiltersLeft = new DevExpress.XtraTab.XtraTabControl(); - this.xtpFilters = new DevExpress.XtraTab.XtraTabPage(); - this.pnlLeftFilters = new DevExpress.XtraEditors.PanelControl(); - this.pnlModulesAndDates = new System.Windows.Forms.Panel(); - this.xtcFilters = new DevExpress.XtraTab.XtraTabControl(); - this.xtpFiltersIncludes = new DevExpress.XtraTab.XtraTabPage(); - this.clbInclude = new DevExpress.XtraEditors.CheckedListBoxControl(); - this.xtpFiltersExclude = new DevExpress.XtraTab.XtraTabPage(); - this.clbExclude = new DevExpress.XtraEditors.CheckedListBoxControl(); - this.xtpSearchFilterPanel = new DevExpress.XtraTab.XtraTabPage(); - this.rgSearchMode = new DevExpress.XtraEditors.RadioGroup(); - this.labelControl1 = new DevExpress.XtraEditors.LabelControl(); - this.sbtnToggleSearchFilter = new DevExpress.XtraEditors.SimpleButton(); - this.pnlBottom = new System.Windows.Forms.Panel(); - this.lblTotalMessagesAlert = new DevExpress.XtraEditors.LabelControl(); - this.sBtnCancel = new DevExpress.XtraEditors.SimpleButton(); - this.lblTotalMessages = new DevExpress.XtraEditors.LabelControl(); - this.xtCounts = new DevExpress.XtraTab.XtraTabPage(); - this.spltGroupByChars = new System.Windows.Forms.SplitContainer(); - this.gCtrlGrouping = new DevExpress.XtraGrid.GridControl(); - this.gridViewGrouping = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.gridControlMessageGrouping = new DevExpress.XtraGrid.GridControl(); - this.gridViewGrouping2 = new DevExpress.XtraGrid.Views.Grid.GridView(); - this.gridColumn13 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn14 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn15 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn16 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn17 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn18 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn19 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn20 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn21 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn22 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn23 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.gridColumn24 = new DevExpress.XtraGrid.Columns.GridColumn(); - this.panelControl1 = new DevExpress.XtraEditors.PanelControl(); - this.sBtnGroup = new DevExpress.XtraEditors.SimpleButton(); - this.nudGroupBychars = new System.Windows.Forms.NumericUpDown(); - this.rbGroupByTextLength = new System.Windows.Forms.RadioButton(); - this.sBtnLength = new DevExpress.XtraEditors.SimpleButton(); - this.txtbGroupByChars = new DevExpress.XtraEditors.TextEdit(); - this.rbGroupByText = new System.Windows.Forms.RadioButton(); - this.behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager(this.components); - this.contextMenuStripFilters = new System.Windows.Forms.ContextMenuStrip(this.components); - this.MainSplitContainer = new DevExpress.XtraEditors.SplitContainerControl(); - this.LogGridPopupMenu = new DevExpress.XtraBars.PopupMenu(this.components); - this.alertControl1 = new DevExpress.XtraBars.Alerter.AlertControl(this.components); - ((System.ComponentModel.ISupportInitialize)(this.gridControl)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.logGrid)).BeginInit(); - this.panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbHighlight.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).BeginInit(); - this.pnlButtonsHighlight.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltcDateFiltering)).BeginInit(); - this.spltcDateFiltering.Panel1.SuspendLayout(); - this.spltcDateFiltering.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.deOlderThanFilter.Properties.CalendarTimeProperties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.deOlderThanFilter.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceOlderThanFilter.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.deNewerThanFilter.Properties.CalendarTimeProperties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.deNewerThanFilter.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceNewerThanFilter.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.spltcProcessesModule)).BeginInit(); - this.spltcProcessesModule.Panel1.SuspendLayout(); - this.spltcProcessesModule.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbModule.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceModulesProcess.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.spltcSources)).BeginInit(); - this.spltcSources.Panel1.SuspendLayout(); - this.spltcSources.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbSource.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceSources.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.spltTextExclude)).BeginInit(); - this.spltTextExclude.Panel1.SuspendLayout(); - this.spltTextExclude.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbExclude.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceExcludeText.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.spltText)).BeginInit(); - this.spltText.Panel1.SuspendLayout(); - this.spltText.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbInclude.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceIncludeText.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.chkLstLogLevel)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.tcBottom)).BeginInit(); - this.tcBottom.SuspendLayout(); - this.xtpMessageInfo.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.rtxtContent.Properties)).BeginInit(); - this.xtpBookmarks.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gridControlBookmarkedMessages)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewBookmarkedMessages)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).BeginInit(); - this.xtraTabControl1.SuspendLayout(); - this.xtpMain.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).BeginInit(); - this.splitContainerMain.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pnlFilters)).BeginInit(); - this.pnlFilters.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.xtcFiltersLeft)).BeginInit(); - this.xtcFiltersLeft.SuspendLayout(); - this.xtpFilters.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pnlLeftFilters)).BeginInit(); - this.pnlLeftFilters.SuspendLayout(); - this.pnlModulesAndDates.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.xtcFilters)).BeginInit(); - this.xtcFilters.SuspendLayout(); - this.xtpFiltersIncludes.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.clbInclude)).BeginInit(); - this.xtpFiltersExclude.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.clbExclude)).BeginInit(); - this.xtpSearchFilterPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.rgSearchMode.Properties)).BeginInit(); - this.pnlBottom.SuspendLayout(); - this.xtCounts.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltGroupByChars)).BeginInit(); - this.spltGroupByChars.Panel1.SuspendLayout(); - this.spltGroupByChars.Panel2.SuspendLayout(); - this.spltGroupByChars.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gCtrlGrouping)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewGrouping)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridControlMessageGrouping)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewGrouping2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit(); - this.panelControl1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudGroupBychars)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.txtbGroupByChars.Properties)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.MainSplitContainer)).BeginInit(); - this.MainSplitContainer.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.LogGridPopupMenu)).BeginInit(); - this.SuspendLayout(); - // - // gridControl - // - this.gridControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridControl.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControl.Location = new System.Drawing.Point(0, 167); - this.gridControl.MainView = this.logGrid; - this.gridControl.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControl.Name = "gridControl"; - this.gridControl.Size = new System.Drawing.Size(1846, 233); - this.gridControl.TabIndex = 0; - this.gridControl.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.logGrid}); - this.gridControl.Click += new System.EventHandler(this.gridControl_Click); - this.gridControl.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.LogGrid_KeyPress); - // - // logGrid - // - this.logGrid.Appearance.Row.Options.UseTextOptions = true; - this.logGrid.Appearance.Row.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.logGrid.Appearance.Row.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.logGrid.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; - this.logGrid.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.gridColumnDataSource, - this.gridColumnDate, - this.gridColumnTimeDiff, - this.gridColumnText, - this.gridColumnSource, - this.gridColumnLevel, - this.gridColumnClass, - this.gridColumnCategory, - this.gridColumnUser, - this.gridColumnModule, - this.gridColumnObject, - this.gridColumnProcessID, - this.gridColumnThread, - this.gridColumnMachineName}); - this.logGrid.DetailHeight = 431; - this.logGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; - this.logGrid.GridControl = this.gridControl; - this.logGrid.Images = this.imageList; - this.logGrid.IndicatorWidth = 24; - this.logGrid.Name = "logGrid"; - this.logGrid.OptionsBehavior.AllowIncrementalSearch = true; - this.logGrid.OptionsFilter.AllowColumnMRUFilterList = false; - this.logGrid.OptionsFilter.AllowMRUFilterList = false; - this.logGrid.OptionsFind.AlwaysVisible = true; - this.logGrid.OptionsLayout.Columns.StoreAllOptions = true; - this.logGrid.OptionsLayout.Columns.StoreAppearance = true; - this.logGrid.OptionsLayout.StoreAllOptions = true; - this.logGrid.OptionsLayout.StoreAppearance = true; - this.logGrid.OptionsLayout.StoreFormatRules = true; - this.logGrid.OptionsSelection.EnableAppearanceFocusedCell = false; - this.logGrid.OptionsView.AutoCalcPreviewLineCount = true; - this.logGrid.OptionsView.ColumnAutoWidth = false; - this.logGrid.OptionsView.RowAutoHeight = true; - this.logGrid.OptionsView.ShowAutoFilterRow = true; - this.logGrid.OptionsView.ShowGroupPanel = false; - this.logGrid.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.LogGrid_CustomDrawRowIndicator); - this.logGrid.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(this.LogGridView_SelectionChanged); - this.logGrid.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.logGrid_FocusedRowChanged); - this.logGrid.ShowFilterPopupListBox += new DevExpress.XtraGrid.Views.Grid.FilterPopupListBoxEventHandler(this.GridViewShowFilterPopupListBox); - this.logGrid.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(this.LogGridViewCustomColumnDisplayText); - this.logGrid.Click += new System.EventHandler(this.logGrid_Click); - this.logGrid.DoubleClick += new System.EventHandler(this.LogGrid_DoubleClick); - - // - // gridColumnDataSource - // - this.gridColumnDataSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnDataSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnDataSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnDataSource.Caption = "Data Source/File Name"; - this.gridColumnDataSource.FieldName = "DataProvider"; - this.gridColumnDataSource.MinWidth = 24; - this.gridColumnDataSource.Name = "gridColumnDataSource"; - this.gridColumnDataSource.OptionsColumn.AllowEdit = false; - this.gridColumnDataSource.OptionsColumn.AllowFocus = false; - this.gridColumnDataSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDataSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDataSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnDataSource.OptionsColumn.ReadOnly = true; - this.gridColumnDataSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnDataSource.Visible = true; - this.gridColumnDataSource.VisibleIndex = 0; - this.gridColumnDataSource.Width = 175; - // - // gridColumnDate - // - this.gridColumnDate.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnDate.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnDate.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnDate.Caption = "Date"; - this.gridColumnDate.DisplayFormat.FormatString = "yyyy.MM.dd HH:mm:ss.ff"; - this.gridColumnDate.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.gridColumnDate.FieldName = "Date"; - this.gridColumnDate.MinWidth = 24; - this.gridColumnDate.Name = "gridColumnDate"; - this.gridColumnDate.OptionsColumn.AllowEdit = false; - this.gridColumnDate.OptionsColumn.AllowFocus = false; - this.gridColumnDate.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDate.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnDate.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnDate.OptionsColumn.ReadOnly = true; - this.gridColumnDate.OptionsFilter.AllowAutoFilter = false; - this.gridColumnDate.Visible = true; - this.gridColumnDate.VisibleIndex = 1; - this.gridColumnDate.Width = 164; - // - // gridColumnTimeDiff - // - this.gridColumnTimeDiff.Caption = "Time Difference"; - this.gridColumnTimeDiff.FieldName = "TimeDiff"; - this.gridColumnTimeDiff.MinWidth = 22; - this.gridColumnTimeDiff.Name = "gridColumnTimeDiff"; - this.gridColumnTimeDiff.OptionsColumn.AllowEdit = false; - this.gridColumnTimeDiff.Width = 87; - // - // gridColumnText - // - this.gridColumnText.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnText.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnText.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnText.Caption = "Text"; - this.gridColumnText.FieldName = "Text"; - this.gridColumnText.MinWidth = 24; - this.gridColumnText.Name = "gridColumnText"; - this.gridColumnText.OptionsColumn.AllowEdit = false; - this.gridColumnText.OptionsColumn.AllowFocus = false; - this.gridColumnText.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnText.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnText.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnText.OptionsColumn.ReadOnly = true; - this.gridColumnText.OptionsFilter.AllowFilter = false; - this.gridColumnText.Visible = true; - this.gridColumnText.VisibleIndex = 2; - this.gridColumnText.Width = 290; - // - // gridColumnSource - // - this.gridColumnSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnSource.Caption = "Source"; - this.gridColumnSource.FieldName = "Source"; - this.gridColumnSource.MinWidth = 24; - this.gridColumnSource.Name = "gridColumnSource"; - this.gridColumnSource.OptionsColumn.AllowEdit = false; - this.gridColumnSource.OptionsColumn.AllowFocus = false; - this.gridColumnSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnSource.OptionsColumn.ReadOnly = true; - this.gridColumnSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnSource.Visible = true; - this.gridColumnSource.VisibleIndex = 3; - this.gridColumnSource.Width = 234; - // - // gridColumnLevel - // - this.gridColumnLevel.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnLevel.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnLevel.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnLevel.Caption = "Level"; - this.gridColumnLevel.FieldName = "Level"; - this.gridColumnLevel.MinWidth = 24; - this.gridColumnLevel.Name = "gridColumnLevel"; - this.gridColumnLevel.OptionsColumn.AllowEdit = false; - this.gridColumnLevel.OptionsColumn.AllowFocus = false; - this.gridColumnLevel.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnLevel.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnLevel.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnLevel.OptionsColumn.ReadOnly = true; - this.gridColumnLevel.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnLevel.Visible = true; - this.gridColumnLevel.VisibleIndex = 4; - this.gridColumnLevel.Width = 115; - // - // gridColumnClass - // - this.gridColumnClass.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnClass.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnClass.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnClass.Caption = "Class"; - this.gridColumnClass.FieldName = "Class"; - this.gridColumnClass.MinWidth = 24; - this.gridColumnClass.Name = "gridColumnClass"; - this.gridColumnClass.OptionsColumn.AllowEdit = false; - this.gridColumnClass.OptionsColumn.AllowFocus = false; - this.gridColumnClass.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnClass.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnClass.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnClass.OptionsColumn.ReadOnly = true; - this.gridColumnClass.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnClass.Visible = true; - this.gridColumnClass.VisibleIndex = 6; - this.gridColumnClass.Width = 115; - // - // gridColumnCategory - // - this.gridColumnCategory.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnCategory.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnCategory.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnCategory.Caption = "Category"; - this.gridColumnCategory.FieldName = "Category"; - this.gridColumnCategory.MinWidth = 24; - this.gridColumnCategory.Name = "gridColumnCategory"; - this.gridColumnCategory.OptionsColumn.AllowEdit = false; - this.gridColumnCategory.OptionsColumn.AllowFocus = false; - this.gridColumnCategory.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnCategory.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnCategory.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnCategory.OptionsColumn.ReadOnly = true; - this.gridColumnCategory.Visible = true; - this.gridColumnCategory.VisibleIndex = 7; - this.gridColumnCategory.Width = 115; - // - // gridColumnUser - // - this.gridColumnUser.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnUser.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnUser.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnUser.Caption = "User"; - this.gridColumnUser.FieldName = "User"; - this.gridColumnUser.MinWidth = 24; - this.gridColumnUser.Name = "gridColumnUser"; - this.gridColumnUser.OptionsColumn.AllowEdit = false; - this.gridColumnUser.OptionsColumn.AllowFocus = false; - this.gridColumnUser.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnUser.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnUser.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnUser.OptionsColumn.ReadOnly = true; - this.gridColumnUser.Visible = true; - this.gridColumnUser.VisibleIndex = 8; - this.gridColumnUser.Width = 115; - // - // gridColumnModule - // - this.gridColumnModule.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnModule.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnModule.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnModule.Caption = "Process/Module"; - this.gridColumnModule.FieldName = "Module"; - this.gridColumnModule.MinWidth = 24; - this.gridColumnModule.Name = "gridColumnModule"; - this.gridColumnModule.OptionsColumn.AllowEdit = false; - this.gridColumnModule.OptionsColumn.AllowFocus = false; - this.gridColumnModule.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnModule.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnModule.OptionsColumn.ReadOnly = true; - this.gridColumnModule.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnModule.Visible = true; - this.gridColumnModule.VisibleIndex = 5; - this.gridColumnModule.Width = 115; - // - // gridColumnObject - // - this.gridColumnObject.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnObject.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnObject.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnObject.Caption = "Object"; - this.gridColumnObject.FieldName = "Object"; - this.gridColumnObject.MinWidth = 24; - this.gridColumnObject.Name = "gridColumnObject"; - this.gridColumnObject.OptionsColumn.AllowEdit = false; - this.gridColumnObject.OptionsColumn.AllowFocus = false; - this.gridColumnObject.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnObject.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnObject.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnObject.OptionsColumn.ReadOnly = true; - this.gridColumnObject.OptionsColumn.ShowCaption = false; - this.gridColumnObject.OptionsColumn.ShowInCustomizationForm = false; - this.gridColumnObject.Width = 87; - // - // gridColumnProcessID - // - this.gridColumnProcessID.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnProcessID.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnProcessID.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnProcessID.Caption = "ProcessID"; - this.gridColumnProcessID.FieldName = "ProcessID"; - this.gridColumnProcessID.MinWidth = 24; - this.gridColumnProcessID.Name = "gridColumnProcessID"; - this.gridColumnProcessID.OptionsColumn.AllowEdit = false; - this.gridColumnProcessID.OptionsColumn.AllowFocus = false; - this.gridColumnProcessID.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnProcessID.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnProcessID.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnProcessID.OptionsColumn.ReadOnly = true; - this.gridColumnProcessID.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnProcessID.Visible = true; - this.gridColumnProcessID.VisibleIndex = 9; - this.gridColumnProcessID.Width = 115; - // - // gridColumnThread - // - this.gridColumnThread.Caption = "Thread ID"; - this.gridColumnThread.FieldName = "ThreadID"; - this.gridColumnThread.MinWidth = 25; - this.gridColumnThread.Name = "gridColumnThread"; - this.gridColumnThread.OptionsColumn.AllowEdit = false; - this.gridColumnThread.Visible = true; - this.gridColumnThread.VisibleIndex = 10; - this.gridColumnThread.Width = 109; - // - // gridColumnMachineName - // - this.gridColumnMachineName.Caption = "Machine Name"; - this.gridColumnMachineName.FieldName = "MachineName"; - this.gridColumnMachineName.MinWidth = 25; - this.gridColumnMachineName.Name = "gridColumnMachineName"; - this.gridColumnMachineName.OptionsColumn.AllowEdit = false; - this.gridColumnMachineName.Visible = true; - this.gridColumnMachineName.VisibleIndex = 11; - this.gridColumnMachineName.Width = 94; - // - // imageList - // - this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); - this.imageList.TransparentColor = System.Drawing.Color.Transparent; - this.imageList.Images.SetKeyName(0, "Error_16x16.png"); - this.imageList.Images.SetKeyName(1, "Warning_16x16.png"); - this.imageList.Images.SetKeyName(2, ""); - this.imageList.Images.SetKeyName(3, "folder32x32.gif"); - this.imageList.Images.SetKeyName(4, "Error_32x32.png"); - this.imageList.Images.SetKeyName(5, "Warning_32x32.png"); - this.imageList.Images.SetKeyName(6, "debug.gif"); - this.imageList.Images.SetKeyName(7, "New_16x16.png"); - this.imageList.Images.SetKeyName(8, "Analogy_icon1_16x16.ico"); - this.imageList.Images.SetKeyName(9, "Question_16x16.png"); - this.imageList.Images.SetKeyName(10, "log16x16.ico"); - // - // panel1 - // - this.panel1.Controls.Add(this.txtbHighlight); - this.panel1.Controls.Add(this.sbtnMoreHighlight); - this.panel1.Controls.Add(this.pnlButtonsHighlight); - this.panel1.Controls.Add(this.chkbHighlight); - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 400); - this.panel1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1846, 26); - this.panel1.TabIndex = 4; - // - // txtbHighlight - // - this.txtbHighlight.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtbHighlight.Location = new System.Drawing.Point(200, 0); - this.txtbHighlight.MenuManager = this.barManager1; - this.txtbHighlight.Name = "txtbHighlight"; - this.txtbHighlight.Size = new System.Drawing.Size(1162, 22); - this.txtbHighlight.TabIndex = 23; - this.txtbHighlight.KeyUp += new System.Windows.Forms.KeyEventHandler(this.txtbHighlight_KeyUp); - // - // barManager1 - // - this.barManager1.Bars.AddRange(new DevExpress.XtraBars.Bar[] { - this.barTopFiltering, - this.BbarMainMenu, - this.barMessage, - this.barBookmark, - this.barGroup}); - this.barManager1.DockControls.Add(this.barDockControlTop); - this.barManager1.DockControls.Add(this.barDockControlBottom); - this.barManager1.DockControls.Add(this.barDockControlLeft); - this.barManager1.DockControls.Add(this.barDockControlRight); - this.barManager1.DockControls.Add(this.bdcTopFiltering); - this.barManager1.DockControls.Add(this.bdcMessageBottom); - this.barManager1.DockControls.Add(this.bdcBookmarks); - this.barManager1.DockControls.Add(this.standaloneBarDockControlLeft); - this.barManager1.Form = this; - this.barManager1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { - this.btswitchMessageDetails, - this.btswitchRefreshLog, - this.bBtnSaveLog, - this.bBtnImport, - this.bBtnClearLog, - this.bBtnExpand, - this.barButtonItem3, - this.bBtnButtomExpand, - this.bBtnCopyButtom, - this.btSwitchExpandButtomMessage, - this.bBtnopyBookmarked, - this.barButtonItem4, - this.bBtnGoToMessage, - this.bBtnRemoveBoomark, - this.bBtnCopyAllBookmarks, - this.btsAutoScrollToBottom, - this.bSMExports, - this.bBtnExportExcel, - this.bBtnExportCSV, - this.bBtnExportHtml, - this.bBtnUndockView, - this.bBtnSaveEntireLog, - this.bBtnDataVisualizer, - this.bbiScreenshot, - this.bbtnSaveViewAgnostic, - this.barSubItemSaveLog, - this.barButtonItemSaveEntireInAnalogy, - this.barSubItem1, - this.bBtnUndockViewPerProcess, - this.bBtnShare, - this.bBtnFullGrid, - this.bbtnReload, - this.bBtnSaveCurrentSelectionCustomFormat, - this.bBtnSaveCurrentSelectionAnalogyFormat, - this.bBtnUndockSelection, - this.bbiDiffTime, - this.bbiDatetiemFilterFrom, - this.bbiDatetiemFilterTo, - this.bbiBookmarkNonPersist, - this.bbiBookmarkPersist, - this.bbiCopyMessage, - this.bbiCopyAllMessages, - this.bbiAddNoteToMessage, - this.bbiIncludeMessage, - this.bbiIncludeColumnHeaderFilter, - this.bbiExcludeMessage, - this.bbiExcludeSource, - this.bbiExcludeModule, - this.bbiSaveLayout, - this.bbiIncreaseFontSize, - this.bbiDecreaseFontSize, - this.bbiIncludeSource, - this.bbiIncludeModule, - this.bbiSaveBookmarks, - this.bbiJsonViewer}); - this.barManager1.MainMenu = this.BbarMainMenu; - this.barManager1.MaxItemId = 63; - // - // barTopFiltering - // - this.barTopFiltering.BarName = "Log Operations"; - this.barTopFiltering.DockCol = 0; - this.barTopFiltering.DockRow = 0; - this.barTopFiltering.DockStyle = DevExpress.XtraBars.BarDockStyle.Standalone; - this.barTopFiltering.FloatLocation = new System.Drawing.Point(192, 279); - this.barTopFiltering.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnClearLog), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnRemoveBoomark), - new DevExpress.XtraBars.LinkPersistInfo(this.bbtnReload), - new DevExpress.XtraBars.LinkPersistInfo(this.btswitchMessageDetails), - new DevExpress.XtraBars.LinkPersistInfo(this.btswitchRefreshLog), - new DevExpress.XtraBars.LinkPersistInfo(this.btsAutoScrollToBottom), - new DevExpress.XtraBars.LinkPersistInfo(this.barSubItemSaveLog), - new DevExpress.XtraBars.LinkPersistInfo(this.bSMExports), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnFullGrid), - new DevExpress.XtraBars.LinkPersistInfo(this.barSubItem1), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiScreenshot), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnImport), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnDataVisualizer), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnShare)}); - this.barTopFiltering.OptionsBar.AllowQuickCustomization = false; - this.barTopFiltering.OptionsBar.AutoPopupMode = DevExpress.XtraBars.BarAutoPopupMode.None; - this.barTopFiltering.OptionsBar.DisableClose = true; - this.barTopFiltering.OptionsBar.DisableCustomization = true; - this.barTopFiltering.OptionsBar.UseWholeRow = true; - this.barTopFiltering.StandaloneBarDockControl = this.bdcTopFiltering; - this.barTopFiltering.Text = "Operations"; - // - // bBtnClearLog - // - this.bBtnClearLog.Caption = "Clear Log"; - this.bBtnClearLog.Id = 6; - this.bBtnClearLog.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnClearLog.ImageOptions.Image"))); - this.bBtnClearLog.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnClearLog.ImageOptions.LargeImage"))); - this.bBtnClearLog.Name = "bBtnClearLog"; - this.bBtnClearLog.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnClearLog.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnClearLog_ItemClick); - // - // bBtnRemoveBoomark - // - this.bBtnRemoveBoomark.Caption = "Delete message"; - this.bBtnRemoveBoomark.Id = 15; - this.bBtnRemoveBoomark.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnRemoveBoomark.ImageOptions.Image"))); - this.bBtnRemoveBoomark.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnRemoveBoomark.ImageOptions.LargeImage"))); - this.bBtnRemoveBoomark.Name = "bBtnRemoveBoomark"; - this.bBtnRemoveBoomark.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnRemoveBoomark.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; - this.bBtnRemoveBoomark.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnRemoveBoomark_ItemClick); - // - // bbtnReload - // - this.bbtnReload.Caption = "Reload Files"; - this.bbtnReload.Id = 38; - this.bbtnReload.ImageOptions.SvgImage = ((DevExpress.Utils.Svg.SvgImage)(resources.GetObject("bbtnReload.ImageOptions.SvgImage"))); - this.bbtnReload.Name = "bbtnReload"; - this.bbtnReload.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bbtnReload.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; - // - // btswitchMessageDetails - // - this.btswitchMessageDetails.BindableChecked = true; - this.btswitchMessageDetails.Caption = "Message Details"; - this.btswitchMessageDetails.Checked = true; - this.btswitchMessageDetails.Hint = "Show/Hide selected message details (CTRL+D)"; - this.btswitchMessageDetails.Id = 2; - this.btswitchMessageDetails.Name = "btswitchMessageDetails"; - this.btswitchMessageDetails.CheckedChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.btswitchExpand_CheckedChanged); - // - // btswitchRefreshLog - // - this.btswitchRefreshLog.Caption = "Refresh log:"; - this.btswitchRefreshLog.Id = 3; - this.btswitchRefreshLog.Name = "btswitchRefreshLog"; - this.btswitchRefreshLog.CheckedChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.btswitchRefreshLog_CheckedChanged); - // - // btsAutoScrollToBottom - // - this.btsAutoScrollToBottom.Caption = "Scroll to newest message:"; - this.btsAutoScrollToBottom.Id = 18; - this.btsAutoScrollToBottom.Name = "btsAutoScrollToBottom"; - this.btsAutoScrollToBottom.CheckedChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.btsAutoScrollToBottom_CheckedChanged); - // - // barSubItemSaveLog - // - this.barSubItemSaveLog.Caption = "Save Log"; - this.barSubItemSaveLog.Id = 31; - this.barSubItemSaveLog.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barSubItemSaveLog.ImageOptions.Image"))); - this.barSubItemSaveLog.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barSubItemSaveLog.ImageOptions.LargeImage"))); - this.barSubItemSaveLog.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.barButtonItemSaveEntireInAnalogy), - new DevExpress.XtraBars.LinkPersistInfo(this.bbtnSaveViewAgnostic), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnSaveCurrentSelectionAnalogyFormat), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnSaveEntireLog), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnSaveLog), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnSaveCurrentSelectionCustomFormat)}); - this.barSubItemSaveLog.Name = "barSubItemSaveLog"; - this.barSubItemSaveLog.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // barButtonItemSaveEntireInAnalogy - // - this.barButtonItemSaveEntireInAnalogy.Caption = "Save entire log in Analogy Format (agnostic to specific implementation)"; - this.barButtonItemSaveEntireInAnalogy.Id = 32; - this.barButtonItemSaveEntireInAnalogy.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barButtonItemSaveEntireInAnalogy.ImageOptions.Image"))); - this.barButtonItemSaveEntireInAnalogy.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barButtonItemSaveEntireInAnalogy.ImageOptions.LargeImage"))); - this.barButtonItemSaveEntireInAnalogy.Name = "barButtonItemSaveEntireInAnalogy"; - this.barButtonItemSaveEntireInAnalogy.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.BarButtonItemSaveEntireInAnalogy_ItemClick); - // - // bbtnSaveViewAgnostic - // - this.bbtnSaveViewAgnostic.Caption = "Save current view in Analogy Format (agnostic to Specific implementation)"; - this.bbtnSaveViewAgnostic.Id = 30; - this.bbtnSaveViewAgnostic.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbtnSaveViewAgnostic.ImageOptions.Image"))); - this.bbtnSaveViewAgnostic.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbtnSaveViewAgnostic.ImageOptions.LargeImage"))); - this.bbtnSaveViewAgnostic.Name = "bbtnSaveViewAgnostic"; - this.bbtnSaveViewAgnostic.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.BbtnSaveViewAgnostic_ItemClick); - // - // bBtnSaveCurrentSelectionAnalogyFormat - // - this.bBtnSaveCurrentSelectionAnalogyFormat.Caption = "Save current rows selection in Analogy Format (agnostic to Specific implementatio" + - "n)"; - this.bBtnSaveCurrentSelectionAnalogyFormat.Id = 40; - this.bBtnSaveCurrentSelectionAnalogyFormat.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnSaveCurrentSelectionAnalogyFormat.ImageOptions.Image"))); - this.bBtnSaveCurrentSelectionAnalogyFormat.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnSaveCurrentSelectionAnalogyFormat.ImageOptions.LargeImage"))); - this.bBtnSaveCurrentSelectionAnalogyFormat.Name = "bBtnSaveCurrentSelectionAnalogyFormat"; - this.bBtnSaveCurrentSelectionAnalogyFormat.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnSaveCurrentSelectionAnalogyFormat_ItemClick); - // - // bBtnSaveEntireLog - // - this.bBtnSaveEntireLog.Caption = "Save entire Log (custom Format)"; - this.bBtnSaveEntireLog.Id = 25; - this.bBtnSaveEntireLog.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnSaveEntireLog.ImageOptions.Image"))); - this.bBtnSaveEntireLog.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnSaveEntireLog.ImageOptions.LargeImage"))); - this.bBtnSaveEntireLog.Name = "bBtnSaveEntireLog"; - this.bBtnSaveEntireLog.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnSaveEntireLog.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnSaveEntireLog_ItemClick); - // - // bBtnSaveLog - // - this.bBtnSaveLog.Caption = "Save current view (custom Format)"; - this.bBtnSaveLog.Id = 4; - this.bBtnSaveLog.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnSaveLog.ImageOptions.Image"))); - this.bBtnSaveLog.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnSaveLog.ImageOptions.LargeImage"))); - this.bBtnSaveLog.Name = "bBtnSaveLog"; - this.bBtnSaveLog.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnSaveLog.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnSaveLog_ItemClick); - // - // bBtnSaveCurrentSelectionCustomFormat - // - this.bBtnSaveCurrentSelectionCustomFormat.Caption = "save current rows selection (custom Format)"; - this.bBtnSaveCurrentSelectionCustomFormat.Id = 39; - this.bBtnSaveCurrentSelectionCustomFormat.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnSaveCurrentSelectionCustomFormat.ImageOptions.Image"))); - this.bBtnSaveCurrentSelectionCustomFormat.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnSaveCurrentSelectionCustomFormat.ImageOptions.LargeImage"))); - this.bBtnSaveCurrentSelectionCustomFormat.Name = "bBtnSaveCurrentSelectionCustomFormat"; - this.bBtnSaveCurrentSelectionCustomFormat.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnSaveCurrentSelectionCustomFormat_ItemClick); - // - // bSMExports - // - this.bSMExports.Caption = "Export"; - this.bSMExports.Id = 20; - this.bSMExports.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bSMExports.ImageOptions.Image"))); - this.bSMExports.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bSMExports.ImageOptions.LargeImage"))); - this.bSMExports.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(DevExpress.XtraBars.BarLinkUserDefines.PaintStyle, this.bBtnExportExcel, DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnExportCSV), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnExportHtml)}); - this.bSMExports.Name = "bSMExports"; - this.bSMExports.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // bBtnExportExcel - // - this.bBtnExportExcel.Caption = "Export To Excel"; - this.bBtnExportExcel.Id = 21; - this.bBtnExportExcel.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnExportExcel.ImageOptions.Image"))); - this.bBtnExportExcel.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnExportExcel.ImageOptions.LargeImage"))); - this.bBtnExportExcel.Name = "bBtnExportExcel"; - this.bBtnExportExcel.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnExportExcel_ItemClick); - // - // bBtnExportCSV - // - this.bBtnExportCSV.Caption = "Export To CSV"; - this.bBtnExportCSV.Id = 22; - this.bBtnExportCSV.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnExportCSV.ImageOptions.Image"))); - this.bBtnExportCSV.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnExportCSV.ImageOptions.LargeImage"))); - this.bBtnExportCSV.Name = "bBtnExportCSV"; - this.bBtnExportCSV.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnExportCSV_ItemClick); - // - // bBtnExportHtml - // - this.bBtnExportHtml.Caption = "Export To Html"; - this.bBtnExportHtml.Id = 23; - this.bBtnExportHtml.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnExportHtml.ImageOptions.Image"))); - this.bBtnExportHtml.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnExportHtml.ImageOptions.LargeImage"))); - this.bBtnExportHtml.Name = "bBtnExportHtml"; - this.bBtnExportHtml.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnExportHtml.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; - this.bBtnExportHtml.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnExportHtml_ItemClick); - // - // bBtnFullGrid - // - this.bBtnFullGrid.Caption = "Full"; - this.bBtnFullGrid.Id = 37; - this.bBtnFullGrid.ImageOptions.Image = global::Analogy.Properties.Resources.FullscreenBlue16; - this.bBtnFullGrid.Name = "bBtnFullGrid"; - this.bBtnFullGrid.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // barSubItem1 - // - this.barSubItem1.Caption = "Undock View"; - this.barSubItem1.Id = 34; - this.barSubItem1.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barSubItem1.ImageOptions.Image"))); - this.barSubItem1.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barSubItem1.ImageOptions.LargeImage"))); - this.barSubItem1.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnUndockView), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnUndockViewPerProcess), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnUndockSelection)}); - this.barSubItem1.Name = "barSubItem1"; - this.barSubItem1.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // bBtnUndockView - // - this.bBtnUndockView.Caption = "Undock View (No Filtering)"; - this.bBtnUndockView.Id = 24; - this.bBtnUndockView.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnUndockView.ImageOptions.Image"))); - this.bBtnUndockView.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnUndockView.ImageOptions.LargeImage"))); - this.bBtnUndockView.Name = "bBtnUndockView"; - this.bBtnUndockView.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnUndockView.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnUndockView_ItemClick); - // - // bBtnUndockViewPerProcess - // - this.bBtnUndockViewPerProcess.Caption = "Undock View per process/Module"; - this.bBtnUndockViewPerProcess.Id = 35; - this.bBtnUndockViewPerProcess.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnUndockViewPerProcess.ImageOptions.Image"))); - this.bBtnUndockViewPerProcess.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnUndockViewPerProcess.ImageOptions.LargeImage"))); - this.bBtnUndockViewPerProcess.Name = "bBtnUndockViewPerProcess"; - this.bBtnUndockViewPerProcess.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnUndockViewPerProcess_ItemClick); - // - // bBtnUndockSelection - // - this.bBtnUndockSelection.Caption = "Undock rows selection"; - this.bBtnUndockSelection.Id = 41; - this.bBtnUndockSelection.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnUndockSelection.ImageOptions.Image"))); - this.bBtnUndockSelection.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnUndockSelection.ImageOptions.LargeImage"))); - this.bBtnUndockSelection.Name = "bBtnUndockSelection"; - this.bBtnUndockSelection.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnUndockSelection_ItemClick); - // - // bbiScreenshot - // - this.bbiScreenshot.Caption = "Take screenshot"; - this.bbiScreenshot.Hint = "Take screenshot of the messages control"; - this.bbiScreenshot.Id = 27; - this.bbiScreenshot.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiScreenshot.ImageOptions.Image"))); - this.bbiScreenshot.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiScreenshot.ImageOptions.LargeImage"))); - this.bbiScreenshot.Name = "bbiScreenshot"; - this.bbiScreenshot.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bbiScreenshot.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bbiScreenshot_ItemClick); - // - // bBtnImport - // - this.bBtnImport.Caption = "Import Log"; - this.bBtnImport.Id = 5; - this.bBtnImport.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnImport.ImageOptions.Image"))); - this.bBtnImport.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnImport.ImageOptions.LargeImage"))); - this.bBtnImport.Name = "bBtnImport"; - this.bBtnImport.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnImport.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; - this.bBtnImport.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnImport_ItemClick); - // - // bBtnDataVisualizer - // - this.bBtnDataVisualizer.Caption = "Data Visualizer"; - this.bBtnDataVisualizer.Id = 26; - this.bBtnDataVisualizer.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnDataVisualizer.ImageOptions.Image"))); - this.bBtnDataVisualizer.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnDataVisualizer.ImageOptions.LargeImage"))); - this.bBtnDataVisualizer.Name = "bBtnDataVisualizer"; - this.bBtnDataVisualizer.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnDataVisualizer.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnDataVisualizer_ItemClick); - // - // bBtnShare - // - this.bBtnShare.Caption = "Share Log"; - this.bBtnShare.Id = 36; - this.bBtnShare.ImageOptions.Image = global::Analogy.Properties.Resources.upload16x16; - this.bBtnShare.Name = "bBtnShare"; - this.bBtnShare.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // bdcTopFiltering - // - this.bdcTopFiltering.AutoSize = true; - this.bdcTopFiltering.CausesValidation = false; - this.bdcTopFiltering.Dock = System.Windows.Forms.DockStyle.Top; - this.bdcTopFiltering.Location = new System.Drawing.Point(0, 0); - this.bdcTopFiltering.Manager = this.barManager1; - this.bdcTopFiltering.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.bdcTopFiltering.Name = "bdcTopFiltering"; - this.bdcTopFiltering.Size = new System.Drawing.Size(1846, 39); - this.bdcTopFiltering.Text = "standaloneBarDockControl1"; - // - // BbarMainMenu - // - this.BbarMainMenu.BarName = "Main menu"; - this.BbarMainMenu.DockCol = 0; - this.BbarMainMenu.DockRow = 0; - this.BbarMainMenu.DockStyle = DevExpress.XtraBars.BarDockStyle.Top; - this.BbarMainMenu.FloatLocation = new System.Drawing.Point(258, 133); - this.BbarMainMenu.OptionsBar.MultiLine = true; - this.BbarMainMenu.OptionsBar.UseWholeRow = true; - this.BbarMainMenu.Text = "Main menu"; - this.BbarMainMenu.Visible = false; - // - // barMessage - // - this.barMessage.BarName = "Message"; - this.barMessage.DockCol = 0; - this.barMessage.DockRow = 0; - this.barMessage.DockStyle = DevExpress.XtraBars.BarDockStyle.Standalone; - this.barMessage.FloatLocation = new System.Drawing.Point(104, 295); - this.barMessage.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnCopyButtom)}); - this.barMessage.OptionsBar.AllowCollapse = true; - this.barMessage.OptionsBar.AllowDelete = true; - this.barMessage.OptionsBar.AllowQuickCustomization = false; - this.barMessage.OptionsBar.AllowRename = true; - this.barMessage.OptionsBar.AutoPopupMode = DevExpress.XtraBars.BarAutoPopupMode.None; - this.barMessage.OptionsBar.DisableClose = true; - this.barMessage.OptionsBar.DisableCustomization = true; - this.barMessage.OptionsBar.UseWholeRow = true; - this.barMessage.StandaloneBarDockControl = this.bdcMessageBottom; - this.barMessage.Text = "Message Info"; - // - // bBtnCopyButtom - // - this.bBtnCopyButtom.Caption = "Copy"; - this.bBtnCopyButtom.Id = 10; - this.bBtnCopyButtom.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnCopyButtom.ImageOptions.Image"))); - this.bBtnCopyButtom.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnCopyButtom.ImageOptions.LargeImage"))); - this.bBtnCopyButtom.Name = "bBtnCopyButtom"; - this.bBtnCopyButtom.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnCopyButtom.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnCopyButtom_ItemClick); - // - // bdcMessageBottom - // - this.bdcMessageBottom.AutoSize = true; - this.bdcMessageBottom.CausesValidation = false; - this.bdcMessageBottom.Dock = System.Windows.Forms.DockStyle.Top; - this.bdcMessageBottom.Location = new System.Drawing.Point(0, 0); - this.bdcMessageBottom.Manager = this.barManager1; - this.bdcMessageBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.bdcMessageBottom.Name = "bdcMessageBottom"; - this.bdcMessageBottom.Size = new System.Drawing.Size(1839, 37); - this.bdcMessageBottom.Text = "standaloneBarDockControl2"; - // - // barBookmark - // - this.barBookmark.BarName = "Boommarks"; - this.barBookmark.DockCol = 0; - this.barBookmark.DockRow = 0; - this.barBookmark.DockStyle = DevExpress.XtraBars.BarDockStyle.Standalone; - this.barBookmark.FloatLocation = new System.Drawing.Point(566, 323); - this.barBookmark.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.bbiSaveBookmarks), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnopyBookmarked), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnCopyAllBookmarks), - new DevExpress.XtraBars.LinkPersistInfo(this.barButtonItem4), - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnGoToMessage)}); - this.barBookmark.OptionsBar.AllowCollapse = true; - this.barBookmark.OptionsBar.AllowDelete = true; - this.barBookmark.OptionsBar.AllowQuickCustomization = false; - this.barBookmark.OptionsBar.AutoPopupMode = DevExpress.XtraBars.BarAutoPopupMode.None; - this.barBookmark.OptionsBar.DisableClose = true; - this.barBookmark.OptionsBar.DisableCustomization = true; - this.barBookmark.OptionsBar.UseWholeRow = true; - this.barBookmark.StandaloneBarDockControl = this.bdcBookmarks; - this.barBookmark.Text = "Custom 5"; - // - // bbiSaveBookmarks - // - this.bbiSaveBookmarks.Caption = "Save Bookmarks"; - this.bbiSaveBookmarks.Id = 61; - this.bbiSaveBookmarks.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiSaveBookmarks.ImageOptions.Image"))); - this.bbiSaveBookmarks.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiSaveBookmarks.ImageOptions.LargeImage"))); - this.bbiSaveBookmarks.Name = "bbiSaveBookmarks"; - this.bbiSaveBookmarks.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // bBtnopyBookmarked - // - this.bBtnopyBookmarked.Caption = "Copy Selected Message"; - this.bBtnopyBookmarked.Id = 12; - this.bBtnopyBookmarked.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnopyBookmarked.ImageOptions.Image"))); - this.bBtnopyBookmarked.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnopyBookmarked.ImageOptions.LargeImage"))); - this.bBtnopyBookmarked.Name = "bBtnopyBookmarked"; - this.bBtnopyBookmarked.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnopyBookmarked.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnopyBookmarked_ItemClick); - // - // bBtnCopyAllBookmarks - // - this.bBtnCopyAllBookmarks.Caption = "Copy all messages in grid"; - this.bBtnCopyAllBookmarks.Id = 16; - this.bBtnCopyAllBookmarks.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnCopyAllBookmarks.ImageOptions.Image"))); - this.bBtnCopyAllBookmarks.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnCopyAllBookmarks.ImageOptions.LargeImage"))); - this.bBtnCopyAllBookmarks.Name = "bBtnCopyAllBookmarks"; - this.bBtnCopyAllBookmarks.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnCopyAllBookmarks.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnCopyAllBookmarks_ItemClick); - // - // barButtonItem4 - // - this.barButtonItem4.Caption = "Clear Bookmarks"; - this.barButtonItem4.Id = 13; - this.barButtonItem4.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barButtonItem4.ImageOptions.Image"))); - this.barButtonItem4.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barButtonItem4.ImageOptions.LargeImage"))); - this.barButtonItem4.Name = "barButtonItem4"; - this.barButtonItem4.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.barButtonItem4.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barButtonItem4_ItemClick); - // - // bBtnGoToMessage - // - this.bBtnGoToMessage.Caption = "Go To Message"; - this.bBtnGoToMessage.Id = 14; - this.bBtnGoToMessage.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnGoToMessage.ImageOptions.Image"))); - this.bBtnGoToMessage.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnGoToMessage.ImageOptions.LargeImage"))); - this.bBtnGoToMessage.Name = "bBtnGoToMessage"; - this.bBtnGoToMessage.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnGoToMessage.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnGoToMessage_ItemClick); - // - // bdcBookmarks - // - this.bdcBookmarks.AutoSize = true; - this.bdcBookmarks.CausesValidation = false; - this.bdcBookmarks.Dock = System.Windows.Forms.DockStyle.Top; - this.bdcBookmarks.Location = new System.Drawing.Point(0, 0); - this.bdcBookmarks.Manager = this.barManager1; - this.bdcBookmarks.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.bdcBookmarks.Name = "bdcBookmarks"; - this.bdcBookmarks.Size = new System.Drawing.Size(1839, 37); - this.bdcBookmarks.Text = "standaloneBarDockControl1"; - // - // barGroup - // - this.barGroup.BarName = "Counts"; - this.barGroup.DockCol = 0; - this.barGroup.DockRow = 0; - this.barGroup.DockStyle = DevExpress.XtraBars.BarDockStyle.Standalone; - this.barGroup.FloatLocation = new System.Drawing.Point(327, 221); - this.barGroup.OptionsBar.AllowQuickCustomization = false; - this.barGroup.OptionsBar.AutoPopupMode = DevExpress.XtraBars.BarAutoPopupMode.None; - this.barGroup.OptionsBar.UseWholeRow = true; - this.barGroup.StandaloneBarDockControl = this.standaloneBarDockControlLeft; - this.barGroup.Text = "Counts"; - // - // standaloneBarDockControlLeft - // - this.standaloneBarDockControlLeft.AutoSize = true; - this.standaloneBarDockControlLeft.CausesValidation = false; - this.standaloneBarDockControlLeft.Dock = System.Windows.Forms.DockStyle.Top; - this.standaloneBarDockControlLeft.Location = new System.Drawing.Point(0, 0); - this.standaloneBarDockControlLeft.Manager = this.barManager1; - this.standaloneBarDockControlLeft.Name = "standaloneBarDockControlLeft"; - this.standaloneBarDockControlLeft.Size = new System.Drawing.Size(0, 31); - this.standaloneBarDockControlLeft.Text = "standaloneBarDockControl1"; - // - // barDockControlTop - // - this.barDockControlTop.CausesValidation = false; - this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; - this.barDockControlTop.Location = new System.Drawing.Point(0, 0); - this.barDockControlTop.Manager = this.barManager1; - this.barDockControlTop.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.barDockControlTop.Size = new System.Drawing.Size(1853, 20); - // - // barDockControlBottom - // - this.barDockControlBottom.CausesValidation = false; - this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.barDockControlBottom.Location = new System.Drawing.Point(0, 759); - this.barDockControlBottom.Manager = this.barManager1; - this.barDockControlBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.barDockControlBottom.Size = new System.Drawing.Size(1853, 0); - // - // barDockControlLeft - // - this.barDockControlLeft.CausesValidation = false; - this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; - this.barDockControlLeft.Location = new System.Drawing.Point(0, 20); - this.barDockControlLeft.Manager = this.barManager1; - this.barDockControlLeft.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.barDockControlLeft.Size = new System.Drawing.Size(0, 739); - // - // barDockControlRight - // - this.barDockControlRight.CausesValidation = false; - this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; - this.barDockControlRight.Location = new System.Drawing.Point(1853, 20); - this.barDockControlRight.Manager = this.barManager1; - this.barDockControlRight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.barDockControlRight.Size = new System.Drawing.Size(0, 739); - // - // bBtnExpand - // - this.bBtnExpand.Caption = "Expand"; - this.bBtnExpand.Id = 7; - this.bBtnExpand.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnExpand.ImageOptions.Image"))); - this.bBtnExpand.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnExpand.ImageOptions.LargeImage"))); - this.bBtnExpand.Name = "bBtnExpand"; - this.bBtnExpand.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // barButtonItem3 - // - this.barButtonItem3.Caption = "Copy"; - this.barButtonItem3.Id = 8; - this.barButtonItem3.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("barButtonItem3.ImageOptions.Image"))); - this.barButtonItem3.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("barButtonItem3.ImageOptions.LargeImage"))); - this.barButtonItem3.Name = "barButtonItem3"; - this.barButtonItem3.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - // - // bBtnButtomExpand - // - this.bBtnButtomExpand.Caption = "Expand"; - this.bBtnButtomExpand.Id = 9; - this.bBtnButtomExpand.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bBtnButtomExpand.ImageOptions.Image"))); - this.bBtnButtomExpand.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bBtnButtomExpand.ImageOptions.LargeImage"))); - this.bBtnButtomExpand.Name = "bBtnButtomExpand"; - this.bBtnButtomExpand.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph; - this.bBtnButtomExpand.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bBtnButtomExpand_ItemClick); - // - // btSwitchExpandButtomMessage - // - this.btSwitchExpandButtomMessage.Caption = "Expand"; - this.btSwitchExpandButtomMessage.Id = 11; - this.btSwitchExpandButtomMessage.Name = "btSwitchExpandButtomMessage"; - this.btSwitchExpandButtomMessage.CheckedChanged += new DevExpress.XtraBars.ItemClickEventHandler(this.barToggleSwitchItem1_CheckedChanged); - // - // bbiDiffTime - // - this.bbiDiffTime.Caption = "Calculate time difference from this point"; - this.bbiDiffTime.Id = 43; - this.bbiDiffTime.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiDiffTime.ImageOptions.Image"))); - this.bbiDiffTime.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiDiffTime.ImageOptions.LargeImage"))); - this.bbiDiffTime.Name = "bbiDiffTime"; - // - // bbiDatetiemFilterFrom - // - this.bbiDatetiemFilterFrom.Caption = "Date Time Filter: From"; - this.bbiDatetiemFilterFrom.Id = 44; - this.bbiDatetiemFilterFrom.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiDatetiemFilterFrom.ImageOptions.Image"))); - this.bbiDatetiemFilterFrom.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiDatetiemFilterFrom.ImageOptions.LargeImage"))); - this.bbiDatetiemFilterFrom.Name = "bbiDatetiemFilterFrom"; - // - // bbiDatetiemFilterTo - // - this.bbiDatetiemFilterTo.Caption = "Date Time Filter: To"; - this.bbiDatetiemFilterTo.Id = 45; - this.bbiDatetiemFilterTo.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiDatetiemFilterTo.ImageOptions.Image"))); - this.bbiDatetiemFilterTo.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiDatetiemFilterTo.ImageOptions.LargeImage"))); - this.bbiDatetiemFilterTo.Name = "bbiDatetiemFilterTo"; - // - // bbiBookmarkNonPersist - // - this.bbiBookmarkNonPersist.Caption = "Bookmark this message (Non persist)"; - this.bbiBookmarkNonPersist.Id = 46; - this.bbiBookmarkNonPersist.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiBookmarkNonPersist.ImageOptions.Image"))); - this.bbiBookmarkNonPersist.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiBookmarkNonPersist.ImageOptions.LargeImage"))); - this.bbiBookmarkNonPersist.Name = "bbiBookmarkNonPersist"; - // - // bbiBookmarkPersist - // - this.bbiBookmarkPersist.Caption = "Bookmark this message for later user (Persist)"; - this.bbiBookmarkPersist.Id = 47; - this.bbiBookmarkPersist.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiBookmarkPersist.ImageOptions.Image"))); - this.bbiBookmarkPersist.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiBookmarkPersist.ImageOptions.LargeImage"))); - this.bbiBookmarkPersist.Name = "bbiBookmarkPersist"; - // - // bbiCopyMessage - // - this.bbiCopyMessage.Caption = "Copy selected message to clipboard"; - this.bbiCopyMessage.Id = 48; - this.bbiCopyMessage.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiCopyMessage.ImageOptions.Image"))); - this.bbiCopyMessage.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiCopyMessage.ImageOptions.LargeImage"))); - this.bbiCopyMessage.Name = "bbiCopyMessage"; - // - // bbiCopyAllMessages - // - this.bbiCopyAllMessages.Caption = "Copy all messages in view to clipboard"; - this.bbiCopyAllMessages.Id = 49; - this.bbiCopyAllMessages.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiCopyAllMessages.ImageOptions.Image"))); - this.bbiCopyAllMessages.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiCopyAllMessages.ImageOptions.LargeImage"))); - this.bbiCopyAllMessages.Name = "bbiCopyAllMessages"; - // - // bbiAddNoteToMessage - // - this.bbiAddNoteToMessage.Caption = "Add Note/Comment to this message (not auto saved)"; - this.bbiAddNoteToMessage.Id = 50; - this.bbiAddNoteToMessage.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiAddNoteToMessage.ImageOptions.Image"))); - this.bbiAddNoteToMessage.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiAddNoteToMessage.ImageOptions.LargeImage"))); - this.bbiAddNoteToMessage.Name = "bbiAddNoteToMessage"; - // - // bbiIncludeMessage - // - this.bbiIncludeMessage.Caption = "Include Selected message"; - this.bbiIncludeMessage.Id = 51; - this.bbiIncludeMessage.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiIncludeMessage.ImageOptions.Image"))); - this.bbiIncludeMessage.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiIncludeMessage.ImageOptions.LargeImage"))); - this.bbiIncludeMessage.Name = "bbiIncludeMessage"; - // - // bbiIncludeColumnHeaderFilter - // - this.bbiIncludeColumnHeaderFilter.Caption = "Set X as column header filter for Y"; - this.bbiIncludeColumnHeaderFilter.Id = 52; - this.bbiIncludeColumnHeaderFilter.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiIncludeColumnHeaderFilter.ImageOptions.Image"))); - this.bbiIncludeColumnHeaderFilter.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiIncludeColumnHeaderFilter.ImageOptions.LargeImage"))); - this.bbiIncludeColumnHeaderFilter.Name = "bbiIncludeColumnHeaderFilter"; - // - // bbiExcludeMessage - // - this.bbiExcludeMessage.Caption = "Exclude selected message"; - this.bbiExcludeMessage.Id = 53; - this.bbiExcludeMessage.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiExcludeMessage.ImageOptions.Image"))); - this.bbiExcludeMessage.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiExcludeMessage.ImageOptions.LargeImage"))); - this.bbiExcludeMessage.Name = "bbiExcludeMessage"; - // - // bbiExcludeSource - // - this.bbiExcludeSource.Caption = "Exclude source"; - this.bbiExcludeSource.Id = 54; - this.bbiExcludeSource.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiExcludeSource.ImageOptions.Image"))); - this.bbiExcludeSource.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiExcludeSource.ImageOptions.LargeImage"))); - this.bbiExcludeSource.Name = "bbiExcludeSource"; - // - // bbiExcludeModule - // - this.bbiExcludeModule.Caption = "Exclude process/module"; - this.bbiExcludeModule.Id = 55; - this.bbiExcludeModule.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiExcludeModule.ImageOptions.Image"))); - this.bbiExcludeModule.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiExcludeModule.ImageOptions.LargeImage"))); - this.bbiExcludeModule.Name = "bbiExcludeModule"; - // - // bbiSaveLayout - // - this.bbiSaveLayout.Caption = "Save columns layout"; - this.bbiSaveLayout.Id = 56; - this.bbiSaveLayout.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiSaveLayout.ImageOptions.Image"))); - this.bbiSaveLayout.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiSaveLayout.ImageOptions.LargeImage"))); - this.bbiSaveLayout.Name = "bbiSaveLayout"; - // - // bbiIncreaseFontSize - // - this.bbiIncreaseFontSize.Caption = "Increase font size"; - this.bbiIncreaseFontSize.Id = 57; - this.bbiIncreaseFontSize.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiIncreaseFontSize.ImageOptions.Image"))); - this.bbiIncreaseFontSize.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiIncreaseFontSize.ImageOptions.LargeImage"))); - this.bbiIncreaseFontSize.Name = "bbiIncreaseFontSize"; - // - // bbiDecreaseFontSize - // - this.bbiDecreaseFontSize.Caption = "Decrease font size"; - this.bbiDecreaseFontSize.Id = 58; - this.bbiDecreaseFontSize.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiDecreaseFontSize.ImageOptions.Image"))); - this.bbiDecreaseFontSize.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiDecreaseFontSize.ImageOptions.LargeImage"))); - this.bbiDecreaseFontSize.Name = "bbiDecreaseFontSize"; - // - // bbiIncludeSource - // - this.bbiIncludeSource.Caption = "Include source"; - this.bbiIncludeSource.Id = 59; - this.bbiIncludeSource.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiIncludeSource.ImageOptions.Image"))); - this.bbiIncludeSource.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiIncludeSource.ImageOptions.LargeImage"))); - this.bbiIncludeSource.Name = "bbiIncludeSource"; - // - // bbiIncludeModule - // - this.bbiIncludeModule.Caption = "Include process/module"; - this.bbiIncludeModule.Id = 60; - this.bbiIncludeModule.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("bbiIncludeModule.ImageOptions.Image"))); - this.bbiIncludeModule.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiIncludeModule.ImageOptions.LargeImage"))); - this.bbiIncludeModule.Name = "bbiIncludeModule"; - // - // bbiJsonViewer - // - this.bbiJsonViewer.Caption = "Open message in JSON Visualizer"; - this.bbiJsonViewer.Id = 62; - this.bbiJsonViewer.ImageOptions.Image = global::Analogy.Properties.Resources.json16x16; - this.bbiJsonViewer.ImageOptions.LargeImage = ((System.Drawing.Image)(resources.GetObject("bbiJsonViewer.ImageOptions.LargeImage"))); - this.bbiJsonViewer.Name = "bbiJsonViewer"; - // - // sbtnMoreHighlight - // - this.sbtnMoreHighlight.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnMoreHighlight.Location = new System.Drawing.Point(1362, 0); - this.sbtnMoreHighlight.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnMoreHighlight.Name = "sbtnMoreHighlight"; - this.sbtnMoreHighlight.Size = new System.Drawing.Size(71, 26); - this.sbtnMoreHighlight.TabIndex = 43; - this.sbtnMoreHighlight.Text = "More ..."; - this.sbtnMoreHighlight.Click += new System.EventHandler(this.sbtnMoreHighlight_Click); - // - // pnlButtonsHighlight - // - this.pnlButtonsHighlight.Controls.Add(this.lblPageNumber); - this.pnlButtonsHighlight.Controls.Add(this.sBtnPageNext); - this.pnlButtonsHighlight.Controls.Add(this.sBtnLastPage); - this.pnlButtonsHighlight.Controls.Add(this.sbtnPagePrevious); - this.pnlButtonsHighlight.Controls.Add(this.sbtnPageFirst); - this.pnlButtonsHighlight.Dock = System.Windows.Forms.DockStyle.Right; - this.pnlButtonsHighlight.Location = new System.Drawing.Point(1433, 0); - this.pnlButtonsHighlight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.pnlButtonsHighlight.Name = "pnlButtonsHighlight"; - this.pnlButtonsHighlight.Size = new System.Drawing.Size(413, 26); - this.pnlButtonsHighlight.TabIndex = 12; - // - // lblPageNumber - // - this.lblPageNumber.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.lblPageNumber.Appearance.Options.UseTextOptions = true; - this.lblPageNumber.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; - this.lblPageNumber.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.lblPageNumber.Location = new System.Drawing.Point(178, 4); - this.lblPageNumber.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.lblPageNumber.Name = "lblPageNumber"; - this.lblPageNumber.Size = new System.Drawing.Size(60, 18); - this.lblPageNumber.TabIndex = 46; - this.lblPageNumber.Text = "Page 1 / 1"; - // - // sBtnPageNext - // - this.sBtnPageNext.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.sBtnPageNext.Location = new System.Drawing.Point(248, 0); - this.sBtnPageNext.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sBtnPageNext.Name = "sBtnPageNext"; - this.sBtnPageNext.Size = new System.Drawing.Size(87, 25); - this.sBtnPageNext.TabIndex = 45; - this.sBtnPageNext.Text = "Next Page"; - this.sBtnPageNext.Click += new System.EventHandler(this.sBtnPageNext_Click); - // - // sBtnLastPage - // - this.sBtnLastPage.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.sBtnLastPage.Location = new System.Drawing.Point(337, 0); - this.sBtnLastPage.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sBtnLastPage.Name = "sBtnLastPage"; - this.sBtnLastPage.Size = new System.Drawing.Size(73, 25); - this.sBtnLastPage.TabIndex = 44; - this.sBtnLastPage.Text = "Last Page"; - this.sBtnLastPage.Click += new System.EventHandler(this.sBtnLastPage_Click); - // - // sbtnPagePrevious - // - this.sbtnPagePrevious.Location = new System.Drawing.Point(85, 0); - this.sbtnPagePrevious.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnPagePrevious.Name = "sbtnPagePrevious"; - this.sbtnPagePrevious.Size = new System.Drawing.Size(87, 25); - this.sbtnPagePrevious.TabIndex = 43; - this.sbtnPagePrevious.Text = "Previous Page"; - this.sbtnPagePrevious.Click += new System.EventHandler(this.sbtnPagePrevious_Click); - // - // sbtnPageFirst - // - this.sbtnPageFirst.Location = new System.Drawing.Point(6, 0); - this.sbtnPageFirst.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.sbtnPageFirst.Name = "sbtnPageFirst"; - this.sbtnPageFirst.Size = new System.Drawing.Size(73, 25); - this.sbtnPageFirst.TabIndex = 42; - this.sbtnPageFirst.Text = "first Page"; - this.sbtnPageFirst.Click += new System.EventHandler(this.sbtnPageFirst_Click); - // - // chkbHighlight - // - this.chkbHighlight.AutoSize = true; - this.chkbHighlight.Dock = System.Windows.Forms.DockStyle.Left; - this.chkbHighlight.Location = new System.Drawing.Point(0, 0); - this.chkbHighlight.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.chkbHighlight.Name = "chkbHighlight"; - this.chkbHighlight.Size = new System.Drawing.Size(200, 26); - this.chkbHighlight.TabIndex = 11; - this.chkbHighlight.Text = "Highlight lines that contains:"; - this.chkbHighlight.UseVisualStyleBackColor = true; - this.chkbHighlight.CheckedChanged += new System.EventHandler(this.chkbHighlight_CheckedChanged); - // - // spltcDateFiltering - // - this.spltcDateFiltering.Dock = System.Windows.Forms.DockStyle.Right; - this.spltcDateFiltering.Location = new System.Drawing.Point(961, 0); - this.spltcDateFiltering.Name = "spltcDateFiltering"; - // - // spltcDateFiltering.Panel1 - // - this.spltcDateFiltering.Panel1.Controls.Add(this.deOlderThanFilter); - this.spltcDateFiltering.Panel1.Controls.Add(this.ceOlderThanFilter); - this.spltcDateFiltering.Panel1.Controls.Add(this.deNewerThanFilter); - this.spltcDateFiltering.Panel1.Controls.Add(this.ceNewerThanFilter); - this.spltcDateFiltering.Panel2Collapsed = true; - this.spltcDateFiltering.Size = new System.Drawing.Size(521, 22); - this.spltcDateFiltering.SplitterDistance = 496; - this.spltcDateFiltering.TabIndex = 27; - // - // deOlderThanFilter - // - this.deOlderThanFilter.Dock = System.Windows.Forms.DockStyle.Left; - this.deOlderThanFilter.EditValue = new System.DateTime(2019, 11, 29, 10, 2, 22, 242); - this.deOlderThanFilter.Location = new System.Drawing.Point(306, 0); - this.deOlderThanFilter.MenuManager = this.barManager1; - this.deOlderThanFilter.Name = "deOlderThanFilter"; - this.deOlderThanFilter.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.deOlderThanFilter.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.deOlderThanFilter.Properties.CalendarTimeProperties.EditFormat.FormatString = "dd.MM.yyyy hh:mm:ss.fff"; - this.deOlderThanFilter.Properties.CalendarTimeProperties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; - this.deOlderThanFilter.Properties.DisplayFormat.FormatString = "dd.MM.yyyy HH:mm:ss.fff"; - this.deOlderThanFilter.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.deOlderThanFilter.Properties.EditFormat.FormatString = "dd.MM.yyyy HH:mm:ss.fff"; - this.deOlderThanFilter.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; - this.deOlderThanFilter.Properties.Mask.EditMask = "dd.MM.yyyy HH:mm:ss.fff"; - this.deOlderThanFilter.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.DateTimeAdvancingCaret; - this.deOlderThanFilter.Properties.Mask.UseMaskAsDisplayFormat = true; - this.deOlderThanFilter.Size = new System.Drawing.Size(207, 22); - this.deOlderThanFilter.TabIndex = 27; - // - // ceOlderThanFilter - // - this.ceOlderThanFilter.Dock = System.Windows.Forms.DockStyle.Left; - this.ceOlderThanFilter.Location = new System.Drawing.Point(264, 0); - this.ceOlderThanFilter.MenuManager = this.barManager1; - this.ceOlderThanFilter.Name = "ceOlderThanFilter"; - this.ceOlderThanFilter.Properties.Appearance.Options.UseImage = true; - this.ceOlderThanFilter.Properties.AutoWidth = true; - this.ceOlderThanFilter.Properties.Caption = "To:"; - this.ceOlderThanFilter.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceOlderThanFilter.Properties.ImageOptions.ImageChecked"))); - this.ceOlderThanFilter.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceOlderThanFilter.Properties.ImageOptions.ImageUnchecked"))); - this.ceOlderThanFilter.Size = new System.Drawing.Size(42, 22); - this.ceOlderThanFilter.TabIndex = 29; - // - // deNewerThanFilter - // - this.deNewerThanFilter.Dock = System.Windows.Forms.DockStyle.Left; - this.deNewerThanFilter.EditValue = new System.DateTime(2019, 11, 29, 10, 2, 22, 242); - this.deNewerThanFilter.Location = new System.Drawing.Point(57, 0); - this.deNewerThanFilter.MenuManager = this.barManager1; - this.deNewerThanFilter.Name = "deNewerThanFilter"; - this.deNewerThanFilter.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.deNewerThanFilter.Properties.CalendarTimeProperties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { - new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); - this.deNewerThanFilter.Properties.CalendarTimeProperties.EditFormat.FormatString = "dd.MM.yyyy hh:mm:ss.fff"; - this.deNewerThanFilter.Properties.CalendarTimeProperties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; - this.deNewerThanFilter.Properties.DisplayFormat.FormatString = "dd.MM.yyyy HH:mm:ss.fff"; - this.deNewerThanFilter.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.deNewerThanFilter.Properties.EditFormat.FormatString = "dd.MM.yyyy HH:mm:ss.fff"; - this.deNewerThanFilter.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom; - this.deNewerThanFilter.Properties.Mask.EditMask = "dd.MM.yyyy HH:mm:ss.fff"; - this.deNewerThanFilter.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.DateTimeAdvancingCaret; - this.deNewerThanFilter.Properties.Mask.UseMaskAsDisplayFormat = true; - this.deNewerThanFilter.Size = new System.Drawing.Size(207, 22); - this.deNewerThanFilter.TabIndex = 25; - // - // ceNewerThanFilter - // - this.ceNewerThanFilter.Dock = System.Windows.Forms.DockStyle.Left; - this.ceNewerThanFilter.Location = new System.Drawing.Point(0, 0); - this.ceNewerThanFilter.MenuManager = this.barManager1; - this.ceNewerThanFilter.Name = "ceNewerThanFilter"; - this.ceNewerThanFilter.Properties.Appearance.Options.UseImage = true; - this.ceNewerThanFilter.Properties.AutoWidth = true; - this.ceNewerThanFilter.Properties.Caption = "From:"; - this.ceNewerThanFilter.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceNewerThanFilter.Properties.ImageOptions.ImageChecked"))); - this.ceNewerThanFilter.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceNewerThanFilter.Properties.ImageOptions.ImageUnchecked"))); - this.ceNewerThanFilter.Size = new System.Drawing.Size(57, 22); - this.ceNewerThanFilter.TabIndex = 28; - // - // spltcProcessesModule - // - this.spltcProcessesModule.Dock = System.Windows.Forms.DockStyle.Fill; - this.spltcProcessesModule.Location = new System.Drawing.Point(0, 0); - this.spltcProcessesModule.Name = "spltcProcessesModule"; - // - // spltcProcessesModule.Panel1 - // - this.spltcProcessesModule.Panel1.Controls.Add(this.txtbModule); - this.spltcProcessesModule.Panel1.Controls.Add(this.ceModulesProcess); - this.spltcProcessesModule.Panel1.Controls.Add(this.sbtnIncludeModules); - this.spltcProcessesModule.Panel1.Controls.Add(this.sbtnUndockPerProcess); - this.spltcProcessesModule.Panel2Collapsed = true; - this.spltcProcessesModule.Size = new System.Drawing.Size(961, 22); - this.spltcProcessesModule.SplitterDistance = 574; - this.spltcProcessesModule.TabIndex = 26; - // - // txtbModule - // - this.txtbModule.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtbModule.Location = new System.Drawing.Point(229, 0); - this.txtbModule.MenuManager = this.barManager1; - this.txtbModule.Name = "txtbModule"; - this.txtbModule.Properties.NullText = "Use , to separate values. to exclude source or module prefix it with -. e.g: incl" + - "udeA, -ExcludeB"; - this.txtbModule.Size = new System.Drawing.Size(528, 22); - this.txtbModule.TabIndex = 26; - // - // ceModulesProcess - // - this.ceModulesProcess.Dock = System.Windows.Forms.DockStyle.Left; - this.ceModulesProcess.Location = new System.Drawing.Point(0, 0); - this.ceModulesProcess.MenuManager = this.barManager1; - this.ceModulesProcess.Name = "ceModulesProcess"; - this.ceModulesProcess.Properties.AutoWidth = true; - this.ceModulesProcess.Properties.Caption = "Include/Exclude Processes/Modules:"; - this.ceModulesProcess.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceModulesProcess.Properties.ImageOptions.ImageChecked"))); - this.ceModulesProcess.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceModulesProcess.Properties.ImageOptions.ImageUnchecked"))); - this.ceModulesProcess.Size = new System.Drawing.Size(229, 22); - toolTipTitleItem5.Text = "Process / Module Property Filtering (include and exclude)"; - toolTipItem5.LeftIndent = 6; - toolTipItem5.Text = "Use , to separate values. to exclude source or module prefix it with -. e.g: incl" + - "udeA, -ExcludeB"; - superToolTip5.Items.Add(toolTipTitleItem5); - superToolTip5.Items.Add(toolTipItem5); - this.ceModulesProcess.SuperTip = superToolTip5; - this.ceModulesProcess.TabIndex = 27; - this.ceModulesProcess.ToolTip = "Use , to separate values. to exclude source or module prefix it with -"; - // - // sbtnIncludeModules - // - this.sbtnIncludeModules.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnIncludeModules.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("sbtnIncludeModules.ImageOptions.Image"))); - this.sbtnIncludeModules.Location = new System.Drawing.Point(757, 0); - this.sbtnIncludeModules.Name = "sbtnIncludeModules"; - this.sbtnIncludeModules.Size = new System.Drawing.Size(23, 22); - this.sbtnIncludeModules.TabIndex = 24; - this.sbtnIncludeModules.ToolTip = "Clear the text"; - this.sbtnIncludeModules.Click += new System.EventHandler(this.sbtnIncludeModules_Click); - // - // sbtnUndockPerProcess - // - this.sbtnUndockPerProcess.AutoSize = true; - this.sbtnUndockPerProcess.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnUndockPerProcess.Location = new System.Drawing.Point(780, 0); - this.sbtnUndockPerProcess.Name = "sbtnUndockPerProcess"; - this.sbtnUndockPerProcess.Size = new System.Drawing.Size(181, 22); - this.sbtnUndockPerProcess.TabIndex = 24; - this.sbtnUndockPerProcess.Text = "Split view per Process/Module"; - this.sbtnUndockPerProcess.Visible = false; - this.sbtnUndockPerProcess.Click += new System.EventHandler(this.sbtnUndockPerProcess_Click); - // - // spltcSources - // - this.spltcSources.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.spltcSources.Location = new System.Drawing.Point(2, 62); - this.spltcSources.Name = "spltcSources"; - // - // spltcSources.Panel1 - // - this.spltcSources.Panel1.Controls.Add(this.txtbSource); - this.spltcSources.Panel1.Controls.Add(this.ceSources); - this.spltcSources.Panel1.Controls.Add(this.sbtnIncludeSources); - this.spltcSources.Panel2Collapsed = true; - this.spltcSources.Size = new System.Drawing.Size(1482, 24); - this.spltcSources.SplitterDistance = 683; - this.spltcSources.TabIndex = 25; - // - // txtbSource - // - this.txtbSource.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtbSource.EditValue = "Use , to separate values. to exclude source or module prefix it with -. e.g: incl" + - "udeA, includeB, -ExcludeC, -ExcludeD"; - this.txtbSource.Location = new System.Drawing.Point(166, 0); - this.txtbSource.MenuManager = this.barManager1; - this.txtbSource.Name = "txtbSource"; - this.txtbSource.Properties.NullText = "Use , to separate values. to exclude source or module prefix it with -. e.g: incl" + - "udeA, includeB, -ExcludeC, -ExcludeD"; - this.txtbSource.Size = new System.Drawing.Size(1293, 22); - this.txtbSource.TabIndex = 25; - // - // ceSources - // - this.ceSources.Dock = System.Windows.Forms.DockStyle.Left; - this.ceSources.Location = new System.Drawing.Point(0, 0); - this.ceSources.MenuManager = this.barManager1; - this.ceSources.Name = "ceSources"; - this.ceSources.Properties.AutoWidth = true; - this.ceSources.Properties.Caption = "Include/Exclude Sources:"; - this.ceSources.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceSources.Properties.ImageOptions.ImageChecked"))); - this.ceSources.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceSources.Properties.ImageOptions.ImageUnchecked"))); - this.ceSources.Size = new System.Drawing.Size(166, 24); - toolTipTitleItem1.Text = "Source Propery Filtering (include and exclude)"; - toolTipItem1.LeftIndent = 6; - toolTipItem1.Text = "Use , to separate values. to exclude source prefix it with -. e.g: includeA, incl" + - "udeB, -ExcludeC, -ExcludeD"; - superToolTip1.Items.Add(toolTipTitleItem1); - superToolTip1.Items.Add(toolTipItem1); - this.ceSources.SuperTip = superToolTip1; - this.ceSources.TabIndex = 26; - this.ceSources.ToolTip = "Use , to separate values. to exclude source or module prefix it with -"; - // - // sbtnIncludeSources - // - this.sbtnIncludeSources.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnIncludeSources.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("sbtnIncludeSources.ImageOptions.Image"))); - this.sbtnIncludeSources.Location = new System.Drawing.Point(1459, 0); - this.sbtnIncludeSources.Name = "sbtnIncludeSources"; - this.sbtnIncludeSources.Size = new System.Drawing.Size(23, 24); - this.sbtnIncludeSources.TabIndex = 24; - this.sbtnIncludeSources.ToolTip = "Clear the text"; - this.sbtnIncludeSources.Click += new System.EventHandler(this.sbtnIncludeSources_Click); - // - // spltTextExclude - // - this.spltTextExclude.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.spltTextExclude.Location = new System.Drawing.Point(2, 33); - this.spltTextExclude.Name = "spltTextExclude"; - // - // spltTextExclude.Panel1 - // - this.spltTextExclude.Panel1.Controls.Add(this.txtbExclude); - this.spltTextExclude.Panel1.Controls.Add(this.ceExcludeText); - this.spltTextExclude.Panel1.Controls.Add(this.sbtnTextExclude); - this.spltTextExclude.Panel1.Controls.Add(this.sBtnMostCommon); - this.spltTextExclude.Panel2Collapsed = true; - this.spltTextExclude.Size = new System.Drawing.Size(1482, 24); - this.spltTextExclude.SplitterDistance = 998; - this.spltTextExclude.TabIndex = 24; - // - // txtbExclude - // - this.txtbExclude.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtbExclude.Location = new System.Drawing.Point(99, 0); - this.txtbExclude.MenuManager = this.barManager1; - this.txtbExclude.Name = "txtbExclude"; - this.txtbExclude.Properties.NullText = "Use & or + for AND operations. Use | for OR operations"; - this.txtbExclude.Size = new System.Drawing.Size(1240, 22); - this.txtbExclude.TabIndex = 20; - this.txtbExclude.EditValueChanged += new System.EventHandler(this.txtbExclude_EditValueChanged); - // - // ceExcludeText - // - this.ceExcludeText.Dock = System.Windows.Forms.DockStyle.Left; - this.ceExcludeText.Location = new System.Drawing.Point(0, 0); - this.ceExcludeText.MenuManager = this.barManager1; - this.ceExcludeText.Name = "ceExcludeText"; - this.ceExcludeText.Properties.AutoWidth = true; - this.ceExcludeText.Properties.Caption = "Exclude Text:"; - this.ceExcludeText.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceExcludeText.Properties.ImageOptions.ImageChecked"))); - this.ceExcludeText.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceExcludeText.Properties.ImageOptions.ImageUnchecked"))); - this.ceExcludeText.Size = new System.Drawing.Size(99, 24); - toolTipTitleItem2.Text = "Text Property Filtering (exclude)"; - toolTipItem2.LeftIndent = 6; - toolTipItem2.Text = "Use (&& or +) for AND operations. Use | for OR operations"; - superToolTip2.Items.Add(toolTipTitleItem2); - superToolTip2.Items.Add(toolTipItem2); - this.ceExcludeText.SuperTip = superToolTip2; - this.ceExcludeText.TabIndex = 23; - // - // sbtnTextExclude - // - this.sbtnTextExclude.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnTextExclude.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("sbtnTextExclude.ImageOptions.Image"))); - this.sbtnTextExclude.Location = new System.Drawing.Point(1339, 0); - this.sbtnTextExclude.Name = "sbtnTextExclude"; - this.sbtnTextExclude.Size = new System.Drawing.Size(23, 24); - this.sbtnTextExclude.TabIndex = 20; - this.sbtnTextExclude.ToolTip = "Clear the text"; - this.sbtnTextExclude.Click += new System.EventHandler(this.sbtnTextExclude_Click); - // - // sBtnMostCommon - // - this.sBtnMostCommon.Dock = System.Windows.Forms.DockStyle.Right; - this.sBtnMostCommon.Location = new System.Drawing.Point(1362, 0); - this.sBtnMostCommon.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.sBtnMostCommon.Name = "sBtnMostCommon"; - this.sBtnMostCommon.Size = new System.Drawing.Size(120, 24); - this.sBtnMostCommon.TabIndex = 8; - this.sBtnMostCommon.Text = "Most Common"; - this.sBtnMostCommon.Click += new System.EventHandler(this.sBtnMostCommon_Click); - // - // spltText - // - this.spltText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.spltText.Location = new System.Drawing.Point(2, 5); - this.spltText.Name = "spltText"; - // - // spltText.Panel1 - // - this.spltText.Panel1.Controls.Add(this.txtbInclude); - this.spltText.Panel1.Controls.Add(this.ceIncludeText); - this.spltText.Panel1.Controls.Add(this.sbtnTextInclude); - this.spltText.Panel1.Controls.Add(this.sbtnPreDefinedFilters); - this.spltText.Panel2Collapsed = true; - this.spltText.Size = new System.Drawing.Size(1482, 23); - this.spltText.SplitterDistance = 998; - this.spltText.TabIndex = 22; - // - // txtbInclude - // - this.txtbInclude.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtbInclude.Location = new System.Drawing.Point(97, 0); - this.txtbInclude.MenuManager = this.barManager1; - this.txtbInclude.Name = "txtbInclude"; - this.txtbInclude.Properties.NullText = "Use & or + for AND operations. Use | for OR operations"; - this.txtbInclude.Size = new System.Drawing.Size(1339, 22); - this.txtbInclude.TabIndex = 19; - this.txtbInclude.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtbInclude_KeyPress); - // - // ceIncludeText - // - this.ceIncludeText.Dock = System.Windows.Forms.DockStyle.Left; - this.ceIncludeText.Location = new System.Drawing.Point(0, 0); - this.ceIncludeText.MenuManager = this.barManager1; - this.ceIncludeText.Name = "ceIncludeText"; - this.ceIncludeText.Properties.Appearance.Options.UseImage = true; - this.ceIncludeText.Properties.AutoWidth = true; - this.ceIncludeText.Properties.Caption = "Include Text:"; - this.ceIncludeText.Properties.ImageOptions.ImageChecked = ((System.Drawing.Image)(resources.GetObject("ceIncludeText.Properties.ImageOptions.ImageChecked"))); - this.ceIncludeText.Properties.ImageOptions.ImageUnchecked = ((System.Drawing.Image)(resources.GetObject("ceIncludeText.Properties.ImageOptions.ImageUnchecked"))); - this.ceIncludeText.Size = new System.Drawing.Size(97, 23); - toolTipTitleItem3.Text = "Text Property Filtering"; - toolTipItem3.LeftIndent = 6; - toolTipItem3.Text = "Use (&& or +) for AND operations. Use | for OR operations"; - superToolTip3.Items.Add(toolTipTitleItem3); - superToolTip3.Items.Add(toolTipItem3); - this.ceIncludeText.SuperTip = superToolTip3; - this.ceIncludeText.TabIndex = 22; - this.ceIncludeText.ToolTip = "Use & or + for AND operations. Use | for OR operations"; - this.ceIncludeText.ToolTipController = this.defaultToolTipController; - // - // defaultToolTipController - // - this.defaultToolTipController.Appearance.Options.UseBorderColor = true; - // - // sbtnTextInclude - // - this.sbtnTextInclude.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnTextInclude.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("sbtnTextInclude.ImageOptions.Image"))); - this.sbtnTextInclude.Location = new System.Drawing.Point(1436, 0); - this.sbtnTextInclude.Name = "sbtnTextInclude"; - this.sbtnTextInclude.Size = new System.Drawing.Size(23, 23); - this.sbtnTextInclude.TabIndex = 20; - this.sbtnTextInclude.ToolTip = "Clear the text"; - this.sbtnTextInclude.Click += new System.EventHandler(this.sbtnTextInclude_Click); - // - // sbtnPreDefinedFilters - // - this.sbtnPreDefinedFilters.Dock = System.Windows.Forms.DockStyle.Right; - this.sbtnPreDefinedFilters.ImageOptions.Image = global::Analogy.Properties.Resources.SingleMasterFilter_16x16; - this.sbtnPreDefinedFilters.Location = new System.Drawing.Point(1459, 0); - this.sbtnPreDefinedFilters.Name = "sbtnPreDefinedFilters"; - this.sbtnPreDefinedFilters.Size = new System.Drawing.Size(23, 23); - this.sbtnPreDefinedFilters.TabIndex = 21; - this.sbtnPreDefinedFilters.ToolTip = "Pre-defined filters"; - this.sbtnPreDefinedFilters.Click += new System.EventHandler(this.sbtnPreDefinedFilters_Click); - // - // chkLstLogLevel - // - this.chkLstLogLevel.CheckMode = DevExpress.XtraEditors.CheckMode.Single; - this.chkLstLogLevel.CheckOnClick = true; - this.chkLstLogLevel.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Radio; - this.chkLstLogLevel.Dock = System.Windows.Forms.DockStyle.Right; - this.chkLstLogLevel.Items.AddRange(new DevExpress.XtraEditors.Controls.CheckedListBoxItem[] { - new DevExpress.XtraEditors.Controls.CheckedListBoxItem(null, "Trace"), - new DevExpress.XtraEditors.Controls.CheckedListBoxItem(null, "Error + Critical"), - new DevExpress.XtraEditors.Controls.CheckedListBoxItem(null, "Warning"), - new DevExpress.XtraEditors.Controls.CheckedListBoxItem(null, "Debug"), - new DevExpress.XtraEditors.Controls.CheckedListBoxItem(null, "Verbose")}); - this.chkLstLogLevel.Location = new System.Drawing.Point(1703, 2); - this.chkLstLogLevel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.chkLstLogLevel.Name = "chkLstLogLevel"; - this.chkLstLogLevel.Size = new System.Drawing.Size(141, 163); - this.chkLstLogLevel.TabIndex = 22; - this.chkLstLogLevel.ItemCheck += new DevExpress.XtraEditors.Controls.ItemCheckEventHandler(this.chkLstLogLevel_ItemCheck); - this.chkLstLogLevel.SelectedIndexChanged += new System.EventHandler(this.chkLstLogLevel_SelectedIndexChanged); - // - // tcBottom - // - this.tcBottom.Dock = System.Windows.Forms.DockStyle.Fill; - this.tcBottom.Location = new System.Drawing.Point(0, 0); - this.tcBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.tcBottom.Name = "tcBottom"; - this.tcBottom.SelectedTabPage = this.xtpMessageInfo; - this.tcBottom.Size = new System.Drawing.Size(1846, 204); - this.tcBottom.TabIndex = 6; - this.tcBottom.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { - this.xtpMessageInfo, - this.xtpBookmarks}); - // - // xtpMessageInfo - // - this.xtpMessageInfo.Controls.Add(this.rtxtContent); - this.xtpMessageInfo.Controls.Add(this.bdcMessageBottom); - this.xtpMessageInfo.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.xtpMessageInfo.Name = "xtpMessageInfo"; - this.xtpMessageInfo.Size = new System.Drawing.Size(1839, 170); - this.xtpMessageInfo.Text = "Message Info"; - // - // rtxtContent - // - this.rtxtContent.Dock = System.Windows.Forms.DockStyle.Fill; - this.rtxtContent.Location = new System.Drawing.Point(0, 37); - this.rtxtContent.MenuManager = this.barManager1; - this.rtxtContent.Name = "rtxtContent"; - this.rtxtContent.Size = new System.Drawing.Size(1839, 133); - this.rtxtContent.TabIndex = 2; - // - // xtpBookmarks - // - this.xtpBookmarks.Controls.Add(this.gridControlBookmarkedMessages); - this.xtpBookmarks.Controls.Add(this.bdcBookmarks); - this.xtpBookmarks.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.xtpBookmarks.Name = "xtpBookmarks"; - this.xtpBookmarks.Size = new System.Drawing.Size(1839, 170); - this.xtpBookmarks.Text = "Bookmarks"; - // - // gridControlBookmarkedMessages - // - this.gridControlBookmarkedMessages.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridControlBookmarkedMessages.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControlBookmarkedMessages.Location = new System.Drawing.Point(0, 37); - this.gridControlBookmarkedMessages.MainView = this.gridViewBookmarkedMessages; - this.gridControlBookmarkedMessages.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControlBookmarkedMessages.Name = "gridControlBookmarkedMessages"; - this.gridControlBookmarkedMessages.Size = new System.Drawing.Size(1839, 133); - this.gridControlBookmarkedMessages.TabIndex = 3; - this.gridControlBookmarkedMessages.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridViewBookmarkedMessages}); - this.gridControlBookmarkedMessages.DoubleClick += new System.EventHandler(this.gridControlBookmarkedMessages_DoubleClick); - // - // gridViewBookmarkedMessages - // - this.gridViewBookmarkedMessages.Appearance.OddRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.gridViewBookmarkedMessages.Appearance.OddRow.Options.UseBackColor = true; - this.gridViewBookmarkedMessages.Appearance.Row.Options.UseTextOptions = true; - this.gridViewBookmarkedMessages.Appearance.Row.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridViewBookmarkedMessages.Appearance.Row.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridViewBookmarkedMessages.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; - this.gridViewBookmarkedMessages.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.gridColumnBookmarkDataSource, - this.gridColumnBookmarkDate, - this.gridColumnBookmarkText, - this.gridColumnBookmarkSource, - this.gridColumnBookmarkLevel, - this.gridColumnBookmarkClass, - this.gridColumnBookmarkCategory, - this.gridColumnBookmarkUser, - this.gridColumnBookmarkModule, - this.gridColumnBookmarkAudit, - this.gridColumnBookmarkObject, - this.gridColumnBookmarkProcessID, - this.gridColumnBookmarkMachineName}); - this.gridViewBookmarkedMessages.DetailHeight = 431; - this.gridViewBookmarkedMessages.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; - this.gridViewBookmarkedMessages.GridControl = this.gridControlBookmarkedMessages; - this.gridViewBookmarkedMessages.Images = this.imageList; - this.gridViewBookmarkedMessages.IndicatorWidth = 24; - this.gridViewBookmarkedMessages.Name = "gridViewBookmarkedMessages"; - this.gridViewBookmarkedMessages.OptionsBehavior.Editable = false; - this.gridViewBookmarkedMessages.OptionsCustomization.AllowGroup = false; - this.gridViewBookmarkedMessages.OptionsFilter.AllowColumnMRUFilterList = false; - this.gridViewBookmarkedMessages.OptionsFilter.AllowMRUFilterList = false; - this.gridViewBookmarkedMessages.OptionsLayout.Columns.StoreAllOptions = true; - this.gridViewBookmarkedMessages.OptionsLayout.Columns.StoreAppearance = true; - this.gridViewBookmarkedMessages.OptionsLayout.StoreAllOptions = true; - this.gridViewBookmarkedMessages.OptionsLayout.StoreAppearance = true; - this.gridViewBookmarkedMessages.OptionsLayout.StoreFormatRules = true; - this.gridViewBookmarkedMessages.OptionsSelection.EnableAppearanceFocusedCell = false; - this.gridViewBookmarkedMessages.OptionsView.AutoCalcPreviewLineCount = true; - this.gridViewBookmarkedMessages.OptionsView.ColumnAutoWidth = false; - this.gridViewBookmarkedMessages.OptionsView.EnableAppearanceEvenRow = true; - this.gridViewBookmarkedMessages.OptionsView.EnableAppearanceOddRow = true; - this.gridViewBookmarkedMessages.OptionsView.RowAutoHeight = true; - this.gridViewBookmarkedMessages.OptionsView.ShowAutoFilterRow = true; - this.gridViewBookmarkedMessages.OptionsView.ShowGroupPanel = false; - this.gridViewBookmarkedMessages.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.LogGrid_CustomDrawRowIndicator); - // - // gridColumnBookmarkDataSource - // - this.gridColumnBookmarkDataSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkDataSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkDataSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkDataSource.Caption = "Data Source"; - this.gridColumnBookmarkDataSource.FieldName = "DataProvider"; - this.gridColumnBookmarkDataSource.MinWidth = 24; - this.gridColumnBookmarkDataSource.Name = "gridColumnBookmarkDataSource"; - this.gridColumnBookmarkDataSource.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkDataSource.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkDataSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkDataSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkDataSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkDataSource.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkDataSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkDataSource.Visible = true; - this.gridColumnBookmarkDataSource.VisibleIndex = 0; - this.gridColumnBookmarkDataSource.Width = 175; - // - // gridColumnBookmarkDate - // - this.gridColumnBookmarkDate.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkDate.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkDate.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkDate.Caption = "Date"; - this.gridColumnBookmarkDate.DisplayFormat.FormatString = "yyyy.MM.dd HH:mm:ss.ff"; - this.gridColumnBookmarkDate.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.gridColumnBookmarkDate.FieldName = "Date"; - this.gridColumnBookmarkDate.MinWidth = 24; - this.gridColumnBookmarkDate.Name = "gridColumnBookmarkDate"; - this.gridColumnBookmarkDate.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkDate.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkDate.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkDate.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkDate.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkDate.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkDate.OptionsFilter.AllowAutoFilter = false; - this.gridColumnBookmarkDate.Visible = true; - this.gridColumnBookmarkDate.VisibleIndex = 1; - this.gridColumnBookmarkDate.Width = 164; - // - // gridColumnBookmarkText - // - this.gridColumnBookmarkText.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkText.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkText.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkText.Caption = "Text"; - this.gridColumnBookmarkText.FieldName = "Text"; - this.gridColumnBookmarkText.MinWidth = 24; - this.gridColumnBookmarkText.Name = "gridColumnBookmarkText"; - this.gridColumnBookmarkText.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkText.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkText.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkText.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkText.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkText.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkText.OptionsFilter.AllowFilter = false; - this.gridColumnBookmarkText.Visible = true; - this.gridColumnBookmarkText.VisibleIndex = 2; - this.gridColumnBookmarkText.Width = 290; - // - // gridColumnBookmarkSource - // - this.gridColumnBookmarkSource.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkSource.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkSource.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkSource.Caption = "Source"; - this.gridColumnBookmarkSource.FieldName = "Source"; - this.gridColumnBookmarkSource.MinWidth = 24; - this.gridColumnBookmarkSource.Name = "gridColumnBookmarkSource"; - this.gridColumnBookmarkSource.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkSource.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkSource.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkSource.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkSource.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkSource.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkSource.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkSource.Visible = true; - this.gridColumnBookmarkSource.VisibleIndex = 5; - this.gridColumnBookmarkSource.Width = 234; - // - // gridColumnBookmarkLevel - // - this.gridColumnBookmarkLevel.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkLevel.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkLevel.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkLevel.Caption = "Level"; - this.gridColumnBookmarkLevel.FieldName = "Level"; - this.gridColumnBookmarkLevel.MinWidth = 24; - this.gridColumnBookmarkLevel.Name = "gridColumnBookmarkLevel"; - this.gridColumnBookmarkLevel.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkLevel.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkLevel.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkLevel.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkLevel.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkLevel.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkLevel.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkLevel.Visible = true; - this.gridColumnBookmarkLevel.VisibleIndex = 6; - this.gridColumnBookmarkLevel.Width = 115; - // - // gridColumnBookmarkClass - // - this.gridColumnBookmarkClass.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkClass.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkClass.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkClass.Caption = "Class"; - this.gridColumnBookmarkClass.FieldName = "Class"; - this.gridColumnBookmarkClass.MinWidth = 24; - this.gridColumnBookmarkClass.Name = "gridColumnBookmarkClass"; - this.gridColumnBookmarkClass.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkClass.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkClass.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkClass.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkClass.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkClass.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkClass.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkClass.Visible = true; - this.gridColumnBookmarkClass.VisibleIndex = 7; - this.gridColumnBookmarkClass.Width = 115; - // - // gridColumnBookmarkCategory - // - this.gridColumnBookmarkCategory.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkCategory.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkCategory.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkCategory.Caption = "Category"; - this.gridColumnBookmarkCategory.FieldName = "Category"; - this.gridColumnBookmarkCategory.MinWidth = 24; - this.gridColumnBookmarkCategory.Name = "gridColumnBookmarkCategory"; - this.gridColumnBookmarkCategory.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkCategory.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkCategory.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkCategory.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkCategory.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkCategory.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkCategory.Visible = true; - this.gridColumnBookmarkCategory.VisibleIndex = 8; - this.gridColumnBookmarkCategory.Width = 115; - // - // gridColumnBookmarkUser - // - this.gridColumnBookmarkUser.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkUser.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkUser.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkUser.Caption = "User"; - this.gridColumnBookmarkUser.FieldName = "User"; - this.gridColumnBookmarkUser.MinWidth = 24; - this.gridColumnBookmarkUser.Name = "gridColumnBookmarkUser"; - this.gridColumnBookmarkUser.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkUser.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkUser.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkUser.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkUser.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkUser.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkUser.Visible = true; - this.gridColumnBookmarkUser.VisibleIndex = 9; - this.gridColumnBookmarkUser.Width = 115; - // - // gridColumnBookmarkModule - // - this.gridColumnBookmarkModule.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkModule.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkModule.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkModule.Caption = "Module"; - this.gridColumnBookmarkModule.FieldName = "Module"; - this.gridColumnBookmarkModule.MinWidth = 24; - this.gridColumnBookmarkModule.Name = "gridColumnBookmarkModule"; - this.gridColumnBookmarkModule.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkModule.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkModule.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkModule.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkModule.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkModule.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkModule.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkModule.Visible = true; - this.gridColumnBookmarkModule.VisibleIndex = 10; - this.gridColumnBookmarkModule.Width = 115; - // - // gridColumnBookmarkAudit - // - this.gridColumnBookmarkAudit.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkAudit.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkAudit.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkAudit.Caption = "Audit"; - this.gridColumnBookmarkAudit.FieldName = "Audit"; - this.gridColumnBookmarkAudit.MinWidth = 24; - this.gridColumnBookmarkAudit.Name = "gridColumnBookmarkAudit"; - this.gridColumnBookmarkAudit.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkAudit.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkAudit.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkAudit.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkAudit.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkAudit.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkAudit.Visible = true; - this.gridColumnBookmarkAudit.VisibleIndex = 3; - this.gridColumnBookmarkAudit.Width = 115; - // - // gridColumnBookmarkObject - // - this.gridColumnBookmarkObject.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkObject.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkObject.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkObject.Caption = "Object"; - this.gridColumnBookmarkObject.MinWidth = 24; - this.gridColumnBookmarkObject.Name = "gridColumnBookmarkObject"; - this.gridColumnBookmarkObject.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkObject.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkObject.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkObject.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkObject.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkObject.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkObject.OptionsColumn.ShowCaption = false; - this.gridColumnBookmarkObject.OptionsColumn.ShowInCustomizationForm = false; - this.gridColumnBookmarkObject.Width = 87; - // - // gridColumnBookmarkProcessID - // - this.gridColumnBookmarkProcessID.AppearanceCell.Options.UseTextOptions = true; - this.gridColumnBookmarkProcessID.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumnBookmarkProcessID.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumnBookmarkProcessID.Caption = "ProcessID"; - this.gridColumnBookmarkProcessID.FieldName = "ProcessID"; - this.gridColumnBookmarkProcessID.MinWidth = 24; - this.gridColumnBookmarkProcessID.Name = "gridColumnBookmarkProcessID"; - this.gridColumnBookmarkProcessID.OptionsColumn.AllowEdit = false; - this.gridColumnBookmarkProcessID.OptionsColumn.AllowFocus = false; - this.gridColumnBookmarkProcessID.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkProcessID.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumnBookmarkProcessID.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumnBookmarkProcessID.OptionsColumn.ReadOnly = true; - this.gridColumnBookmarkProcessID.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumnBookmarkProcessID.Visible = true; - this.gridColumnBookmarkProcessID.VisibleIndex = 4; - this.gridColumnBookmarkProcessID.Width = 115; - // - // gridColumnBookmarkMachineName - // - this.gridColumnBookmarkMachineName.Caption = "Machine Name"; - this.gridColumnBookmarkMachineName.FieldName = "MachineName"; - this.gridColumnBookmarkMachineName.MinWidth = 25; - this.gridColumnBookmarkMachineName.Name = "gridColumnBookmarkMachineName"; - this.gridColumnBookmarkMachineName.Visible = true; - this.gridColumnBookmarkMachineName.VisibleIndex = 11; - this.gridColumnBookmarkMachineName.Width = 94; - // - // imageListBottom - // - this.imageListBottom.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListBottom.ImageStream"))); - this.imageListBottom.TransparentColor = System.Drawing.Color.Transparent; - this.imageListBottom.Images.SetKeyName(0, "Info_16x16.png"); - this.imageListBottom.Images.SetKeyName(1, "RichEditBookmark_16x16.png"); - this.imageListBottom.Images.SetKeyName(2, "RichEditBookmark_32x32.png"); - // - // progressBar1 - // - this.progressBar1.Dock = System.Windows.Forms.DockStyle.Fill; - this.progressBar1.Location = new System.Drawing.Point(312, 0); - this.progressBar1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.progressBar1.MarqueeAnimationSpeed = 1; - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(1335, 30); - this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.progressBar1.TabIndex = 1; - this.progressBar1.Visible = false; - // - // tmrNewData - // - this.tmrNewData.Enabled = true; - this.tmrNewData.Interval = 1000; - this.tmrNewData.Tick += new System.EventHandler(this.tmrNewData_Tick); - // - // xtraTabControl1 - // - this.xtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.xtraTabControl1.Location = new System.Drawing.Point(0, 0); - this.xtraTabControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.xtraTabControl1.Name = "xtraTabControl1"; - this.xtraTabControl1.SelectedTabPage = this.xtpMain; - this.xtraTabControl1.Size = new System.Drawing.Size(1853, 739); - this.xtraTabControl1.TabIndex = 7; - this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { - this.xtpMain, - this.xtCounts}); - // - // xtpMain - // - this.xtpMain.Controls.Add(this.splitContainerMain); - this.xtpMain.Controls.Add(this.bdcTopFiltering); - this.xtpMain.Controls.Add(this.pnlBottom); - this.xtpMain.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.xtpMain.Name = "xtpMain"; - this.xtpMain.Size = new System.Drawing.Size(1846, 705); - this.xtpMain.Text = "Logs"; - // - // splitContainerMain - // - this.splitContainerMain.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel2; - this.splitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainerMain.FixedPanel = DevExpress.XtraEditors.SplitFixedPanel.Panel2; - this.splitContainerMain.Horizontal = false; - this.splitContainerMain.Location = new System.Drawing.Point(0, 39); - this.splitContainerMain.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.splitContainerMain.Name = "splitContainerMain"; - this.splitContainerMain.Panel1.Controls.Add(this.gridControl); - this.splitContainerMain.Panel1.Controls.Add(this.pnlFilters); - this.splitContainerMain.Panel1.Controls.Add(this.panel1); - this.splitContainerMain.Panel1.Text = "Panel1"; - this.splitContainerMain.Panel2.Controls.Add(this.tcBottom); - this.splitContainerMain.Panel2.Text = "Panel2"; - this.splitContainerMain.Size = new System.Drawing.Size(1846, 636); - this.splitContainerMain.SplitterPosition = 204; - this.splitContainerMain.TabIndex = 21; - this.splitContainerMain.Text = "splitContainerControl1"; - // - // pnlFilters - // - this.pnlFilters.Controls.Add(this.xtcFiltersLeft); - this.pnlFilters.Controls.Add(this.chkLstLogLevel); - this.pnlFilters.Dock = System.Windows.Forms.DockStyle.Top; - this.pnlFilters.Location = new System.Drawing.Point(0, 0); - this.pnlFilters.Name = "pnlFilters"; - this.pnlFilters.Size = new System.Drawing.Size(1846, 167); - this.pnlFilters.TabIndex = 6; - // - // xtcFiltersLeft - // - this.xtcFiltersLeft.Dock = System.Windows.Forms.DockStyle.Fill; - this.xtcFiltersLeft.Location = new System.Drawing.Point(2, 2); - this.xtcFiltersLeft.Name = "xtcFiltersLeft"; - this.xtcFiltersLeft.SelectedTabPage = this.xtpFilters; - this.xtcFiltersLeft.Size = new System.Drawing.Size(1701, 163); - this.xtcFiltersLeft.TabIndex = 28; - this.xtcFiltersLeft.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { - this.xtpFilters, - this.xtpSearchFilterPanel}); - // - // xtpFilters - // - this.xtpFilters.Controls.Add(this.pnlLeftFilters); - this.xtpFilters.Controls.Add(this.xtcFilters); - this.xtpFilters.Name = "xtpFilters"; - this.xtpFilters.Size = new System.Drawing.Size(1694, 129); - this.xtpFilters.Text = "Filters"; - // - // pnlLeftFilters - // - this.pnlLeftFilters.Controls.Add(this.pnlModulesAndDates); - this.pnlLeftFilters.Controls.Add(this.spltcSources); - this.pnlLeftFilters.Controls.Add(this.spltTextExclude); - this.pnlLeftFilters.Controls.Add(this.spltText); - this.pnlLeftFilters.Dock = System.Windows.Forms.DockStyle.Fill; - this.pnlLeftFilters.Location = new System.Drawing.Point(0, 0); - this.pnlLeftFilters.Name = "pnlLeftFilters"; - this.pnlLeftFilters.Size = new System.Drawing.Size(1486, 129); - this.pnlLeftFilters.TabIndex = 27; - // - // pnlModulesAndDates - // - this.pnlModulesAndDates.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pnlModulesAndDates.Controls.Add(this.spltcProcessesModule); - this.pnlModulesAndDates.Controls.Add(this.spltcDateFiltering); - this.pnlModulesAndDates.Location = new System.Drawing.Point(2, 91); - this.pnlModulesAndDates.Name = "pnlModulesAndDates"; - this.pnlModulesAndDates.Size = new System.Drawing.Size(1482, 22); - this.pnlModulesAndDates.TabIndex = 28; - // - // xtcFilters - // - this.xtcFilters.Dock = System.Windows.Forms.DockStyle.Right; - this.xtcFilters.Location = new System.Drawing.Point(1486, 0); - this.xtcFilters.Name = "xtcFilters"; - this.xtcFilters.SelectedTabPage = this.xtpFiltersIncludes; - this.xtcFilters.Size = new System.Drawing.Size(208, 129); - this.xtcFilters.TabIndex = 29; - this.xtcFilters.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] { - this.xtpFiltersIncludes, - this.xtpFiltersExclude}); - // - // xtpFiltersIncludes - // - this.xtpFiltersIncludes.Controls.Add(this.clbInclude); - this.xtpFiltersIncludes.Name = "xtpFiltersIncludes"; - this.xtpFiltersIncludes.Size = new System.Drawing.Size(201, 95); - this.xtpFiltersIncludes.Text = "Includes"; - // - // clbInclude - // - this.clbInclude.CheckOnClick = true; - this.clbInclude.Dock = System.Windows.Forms.DockStyle.Fill; - this.clbInclude.Location = new System.Drawing.Point(0, 0); - this.clbInclude.Name = "clbInclude"; - this.clbInclude.Size = new System.Drawing.Size(201, 95); - this.clbInclude.TabIndex = 21; - // - // xtpFiltersExclude - // - this.xtpFiltersExclude.Controls.Add(this.clbExclude); - this.xtpFiltersExclude.Name = "xtpFiltersExclude"; - this.xtpFiltersExclude.Size = new System.Drawing.Size(201, 95); - this.xtpFiltersExclude.Text = "Excludes"; - // - // clbExclude - // - this.clbExclude.CheckOnClick = true; - this.clbExclude.Dock = System.Windows.Forms.DockStyle.Fill; - this.clbExclude.Location = new System.Drawing.Point(0, 0); - this.clbExclude.Name = "clbExclude"; - this.clbExclude.Size = new System.Drawing.Size(201, 95); - this.clbExclude.TabIndex = 22; - // - // xtpSearchFilterPanel - // - this.xtpSearchFilterPanel.Controls.Add(this.rgSearchMode); - this.xtpSearchFilterPanel.Controls.Add(this.labelControl1); - this.xtpSearchFilterPanel.Controls.Add(this.sbtnToggleSearchFilter); - this.xtpSearchFilterPanel.Name = "xtpSearchFilterPanel"; - this.xtpSearchFilterPanel.Size = new System.Drawing.Size(1694, 129); - this.xtpSearchFilterPanel.Text = "Search/Filter Panel"; - // - // rgSearchMode - // - this.rgSearchMode.AutoSizeInLayoutControl = true; - this.rgSearchMode.Location = new System.Drawing.Point(398, 3); - this.rgSearchMode.MenuManager = this.barManager1; - this.rgSearchMode.Name = "rgSearchMode"; - this.rgSearchMode.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] { - new DevExpress.XtraEditors.Controls.RadioGroupItem(null, "Search Mode (CTRL + F)"), - new DevExpress.XtraEditors.Controls.RadioGroupItem(null, "Filter Mode (ALT + F)")}); - this.rgSearchMode.Size = new System.Drawing.Size(250, 94); - this.rgSearchMode.TabIndex = 4; - // - // labelControl1 - // - this.labelControl1.Location = new System.Drawing.Point(309, 9); - this.labelControl1.Name = "labelControl1"; - this.labelControl1.Size = new System.Drawing.Size(65, 16); - this.labelControl1.TabIndex = 1; - this.labelControl1.Text = "Text Mode:"; - // - // sbtnToggleSearchFilter - // - this.sbtnToggleSearchFilter.Location = new System.Drawing.Point(3, 3); - this.sbtnToggleSearchFilter.Name = "sbtnToggleSearchFilter"; - this.sbtnToggleSearchFilter.Size = new System.Drawing.Size(294, 28); - this.sbtnToggleSearchFilter.TabIndex = 0; - this.sbtnToggleSearchFilter.Text = "Toggle Search/Filter Panel On/Off"; - // - // pnlBottom - // - this.pnlBottom.Controls.Add(this.progressBar1); - this.pnlBottom.Controls.Add(this.lblTotalMessagesAlert); - this.pnlBottom.Controls.Add(this.sBtnCancel); - this.pnlBottom.Controls.Add(this.lblTotalMessages); - this.pnlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.pnlBottom.Location = new System.Drawing.Point(0, 675); - this.pnlBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.pnlBottom.Name = "pnlBottom"; - this.pnlBottom.Size = new System.Drawing.Size(1846, 30); - this.pnlBottom.TabIndex = 3; - // - // lblTotalMessagesAlert - // - this.lblTotalMessagesAlert.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(128))))); - this.lblTotalMessagesAlert.Appearance.Font = new System.Drawing.Font("Tahoma", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblTotalMessagesAlert.Appearance.Options.UseBackColor = true; - this.lblTotalMessagesAlert.Appearance.Options.UseFont = true; - this.lblTotalMessagesAlert.Appearance.Options.UseTextOptions = true; - this.lblTotalMessagesAlert.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - this.lblTotalMessagesAlert.Dock = System.Windows.Forms.DockStyle.Left; - this.lblTotalMessagesAlert.Location = new System.Drawing.Point(167, 0); - this.lblTotalMessagesAlert.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.lblTotalMessagesAlert.Name = "lblTotalMessagesAlert"; - this.lblTotalMessagesAlert.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); - this.lblTotalMessagesAlert.Size = new System.Drawing.Size(145, 21); - this.lblTotalMessagesAlert.TabIndex = 6; - this.lblTotalMessagesAlert.Text = "ALERTS EXISTS: !"; - this.lblTotalMessagesAlert.Visible = false; - // - // sBtnCancel - // - this.sBtnCancel.Appearance.Font = new System.Drawing.Font("Tahoma", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.sBtnCancel.Appearance.Options.UseFont = true; - this.sBtnCancel.Dock = System.Windows.Forms.DockStyle.Right; - this.sBtnCancel.ImageOptions.Image = ((System.Drawing.Image)(resources.GetObject("sBtnCancel.ImageOptions.Image"))); - this.sBtnCancel.Location = new System.Drawing.Point(1647, 0); - this.sBtnCancel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.sBtnCancel.Name = "sBtnCancel"; - this.sBtnCancel.Size = new System.Drawing.Size(199, 30); - this.sBtnCancel.TabIndex = 5; - this.sBtnCancel.Text = "Cancel Processing"; - this.sBtnCancel.Visible = false; - this.sBtnCancel.Click += new System.EventHandler(this.sBtnCancel_Click); - // - // lblTotalMessages - // - this.lblTotalMessages.Appearance.Font = new System.Drawing.Font("Tahoma", 10.2F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblTotalMessages.Appearance.Options.UseFont = true; - this.lblTotalMessages.Appearance.Options.UseTextOptions = true; - this.lblTotalMessages.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center; - this.lblTotalMessages.Dock = System.Windows.Forms.DockStyle.Left; - this.lblTotalMessages.Location = new System.Drawing.Point(0, 0); - this.lblTotalMessages.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.lblTotalMessages.Name = "lblTotalMessages"; - this.lblTotalMessages.Padding = new System.Windows.Forms.Padding(0, 0, 10, 0); - this.lblTotalMessages.Size = new System.Drawing.Size(167, 21); - this.lblTotalMessages.TabIndex = 0; - this.lblTotalMessages.Text = "Total messages: N/A"; - // - // xtCounts - // - this.xtCounts.Controls.Add(this.spltGroupByChars); - this.xtCounts.Controls.Add(this.panelControl1); - this.xtCounts.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.xtCounts.Name = "xtCounts"; - this.xtCounts.Size = new System.Drawing.Size(1846, 705); - this.xtCounts.Text = "Messages Grouping"; - // - // spltGroupByChars - // - this.spltGroupByChars.Dock = System.Windows.Forms.DockStyle.Fill; - this.spltGroupByChars.Location = new System.Drawing.Point(0, 40); - this.spltGroupByChars.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.spltGroupByChars.Name = "spltGroupByChars"; - this.spltGroupByChars.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // spltGroupByChars.Panel1 - // - this.spltGroupByChars.Panel1.Controls.Add(this.gCtrlGrouping); - // - // spltGroupByChars.Panel2 - // - this.spltGroupByChars.Panel2.Controls.Add(this.gridControlMessageGrouping); - this.spltGroupByChars.Size = new System.Drawing.Size(1846, 665); - this.spltGroupByChars.SplitterDistance = 338; - this.spltGroupByChars.TabIndex = 4; - // - // gCtrlGrouping - // - this.gCtrlGrouping.Dock = System.Windows.Forms.DockStyle.Fill; - this.gCtrlGrouping.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gCtrlGrouping.Location = new System.Drawing.Point(0, 0); - this.gCtrlGrouping.MainView = this.gridViewGrouping; - this.gCtrlGrouping.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gCtrlGrouping.MenuManager = this.barManager1; - this.gCtrlGrouping.Name = "gCtrlGrouping"; - this.gCtrlGrouping.Size = new System.Drawing.Size(1846, 338); - this.gCtrlGrouping.TabIndex = 0; - this.gCtrlGrouping.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridViewGrouping}); - // - // gridViewGrouping - // - this.gridViewGrouping.GridControl = this.gCtrlGrouping; - this.gridViewGrouping.Name = "gridViewGrouping"; - this.gridViewGrouping.OptionsSelection.EnableAppearanceFocusedCell = false; - this.gridViewGrouping.OptionsView.EnableAppearanceEvenRow = true; - this.gridViewGrouping.OptionsView.EnableAppearanceOddRow = true; - this.gridViewGrouping.OptionsView.ShowGroupPanel = false; - this.gridViewGrouping.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gridViewGrouping_FocusedRowChanged); - // - // gridControlMessageGrouping - // - this.gridControlMessageGrouping.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridControlMessageGrouping.EmbeddedNavigator.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControlMessageGrouping.Location = new System.Drawing.Point(0, 0); - this.gridControlMessageGrouping.MainView = this.gridViewGrouping2; - this.gridControlMessageGrouping.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.gridControlMessageGrouping.Name = "gridControlMessageGrouping"; - this.gridControlMessageGrouping.Size = new System.Drawing.Size(1846, 323); - this.gridControlMessageGrouping.TabIndex = 4; - this.gridControlMessageGrouping.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { - this.gridViewGrouping2}); - // - // gridViewGrouping2 - // - this.gridViewGrouping2.Appearance.OddRow.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.gridViewGrouping2.Appearance.OddRow.Options.UseBackColor = true; - this.gridViewGrouping2.Appearance.Row.Options.UseTextOptions = true; - this.gridViewGrouping2.Appearance.Row.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridViewGrouping2.Appearance.Row.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridViewGrouping2.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; - this.gridViewGrouping2.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { - this.gridColumn13, - this.gridColumn14, - this.gridColumn15, - this.gridColumn16, - this.gridColumn17, - this.gridColumn18, - this.gridColumn19, - this.gridColumn20, - this.gridColumn21, - this.gridColumn22, - this.gridColumn23, - this.gridColumn24}); - this.gridViewGrouping2.DetailHeight = 431; - this.gridViewGrouping2.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; - this.gridViewGrouping2.GridControl = this.gridControlMessageGrouping; - this.gridViewGrouping2.Images = this.imageList; - this.gridViewGrouping2.IndicatorWidth = 24; - this.gridViewGrouping2.Name = "gridViewGrouping2"; - this.gridViewGrouping2.OptionsBehavior.Editable = false; - this.gridViewGrouping2.OptionsCustomization.AllowGroup = false; - this.gridViewGrouping2.OptionsFilter.AllowColumnMRUFilterList = false; - this.gridViewGrouping2.OptionsFilter.AllowMRUFilterList = false; - this.gridViewGrouping2.OptionsSelection.EnableAppearanceFocusedCell = false; - this.gridViewGrouping2.OptionsView.AutoCalcPreviewLineCount = true; - this.gridViewGrouping2.OptionsView.ColumnAutoWidth = false; - this.gridViewGrouping2.OptionsView.RowAutoHeight = true; - this.gridViewGrouping2.OptionsView.ShowAutoFilterRow = true; - this.gridViewGrouping2.OptionsView.ShowGroupPanel = false; - this.gridViewGrouping2.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.LogGrid_CustomDrawRowIndicator); - // - // gridColumn13 - // - this.gridColumn13.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn13.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn13.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn13.Caption = "Data Source"; - this.gridColumn13.FieldName = "DataProvider"; - this.gridColumn13.MinWidth = 24; - this.gridColumn13.Name = "gridColumn13"; - this.gridColumn13.OptionsColumn.AllowEdit = false; - this.gridColumn13.OptionsColumn.AllowFocus = false; - this.gridColumn13.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn13.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn13.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn13.OptionsColumn.ReadOnly = true; - this.gridColumn13.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn13.Visible = true; - this.gridColumn13.VisibleIndex = 0; - this.gridColumn13.Width = 175; - // - // gridColumn14 - // - this.gridColumn14.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn14.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn14.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn14.Caption = "Date"; - this.gridColumn14.DisplayFormat.FormatString = "yyyy.MM.dd HH:mm:ss.ff"; - this.gridColumn14.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; - this.gridColumn14.FieldName = "Date"; - this.gridColumn14.MinWidth = 24; - this.gridColumn14.Name = "gridColumn14"; - this.gridColumn14.OptionsColumn.AllowEdit = false; - this.gridColumn14.OptionsColumn.AllowFocus = false; - this.gridColumn14.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn14.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn14.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn14.OptionsColumn.ReadOnly = true; - this.gridColumn14.OptionsFilter.AllowAutoFilter = false; - this.gridColumn14.Visible = true; - this.gridColumn14.VisibleIndex = 1; - this.gridColumn14.Width = 164; - // - // gridColumn15 - // - this.gridColumn15.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn15.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn15.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn15.Caption = "Text"; - this.gridColumn15.FieldName = "Text"; - this.gridColumn15.MinWidth = 24; - this.gridColumn15.Name = "gridColumn15"; - this.gridColumn15.OptionsColumn.AllowEdit = false; - this.gridColumn15.OptionsColumn.AllowFocus = false; - this.gridColumn15.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn15.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn15.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn15.OptionsColumn.ReadOnly = true; - this.gridColumn15.OptionsFilter.AllowFilter = false; - this.gridColumn15.Visible = true; - this.gridColumn15.VisibleIndex = 2; - this.gridColumn15.Width = 290; - // - // gridColumn16 - // - this.gridColumn16.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn16.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn16.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn16.Caption = "Source"; - this.gridColumn16.FieldName = "Source"; - this.gridColumn16.MinWidth = 24; - this.gridColumn16.Name = "gridColumn16"; - this.gridColumn16.OptionsColumn.AllowEdit = false; - this.gridColumn16.OptionsColumn.AllowFocus = false; - this.gridColumn16.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn16.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn16.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn16.OptionsColumn.ReadOnly = true; - this.gridColumn16.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn16.Visible = true; - this.gridColumn16.VisibleIndex = 5; - this.gridColumn16.Width = 234; - // - // gridColumn17 - // - this.gridColumn17.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn17.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn17.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn17.Caption = "Level"; - this.gridColumn17.FieldName = "Level"; - this.gridColumn17.MinWidth = 24; - this.gridColumn17.Name = "gridColumn17"; - this.gridColumn17.OptionsColumn.AllowEdit = false; - this.gridColumn17.OptionsColumn.AllowFocus = false; - this.gridColumn17.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn17.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn17.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn17.OptionsColumn.ReadOnly = true; - this.gridColumn17.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn17.Visible = true; - this.gridColumn17.VisibleIndex = 6; - this.gridColumn17.Width = 115; - // - // gridColumn18 - // - this.gridColumn18.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn18.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn18.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn18.Caption = "Class"; - this.gridColumn18.FieldName = "Class"; - this.gridColumn18.MinWidth = 24; - this.gridColumn18.Name = "gridColumn18"; - this.gridColumn18.OptionsColumn.AllowEdit = false; - this.gridColumn18.OptionsColumn.AllowFocus = false; - this.gridColumn18.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn18.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn18.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn18.OptionsColumn.ReadOnly = true; - this.gridColumn18.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn18.Visible = true; - this.gridColumn18.VisibleIndex = 7; - this.gridColumn18.Width = 115; - // - // gridColumn19 - // - this.gridColumn19.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn19.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn19.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn19.Caption = "Category"; - this.gridColumn19.FieldName = "Category"; - this.gridColumn19.MinWidth = 24; - this.gridColumn19.Name = "gridColumn19"; - this.gridColumn19.OptionsColumn.AllowEdit = false; - this.gridColumn19.OptionsColumn.AllowFocus = false; - this.gridColumn19.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn19.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn19.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn19.OptionsColumn.ReadOnly = true; - this.gridColumn19.Visible = true; - this.gridColumn19.VisibleIndex = 8; - this.gridColumn19.Width = 115; - // - // gridColumn20 - // - this.gridColumn20.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn20.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn20.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn20.Caption = "User"; - this.gridColumn20.FieldName = "User"; - this.gridColumn20.MinWidth = 24; - this.gridColumn20.Name = "gridColumn20"; - this.gridColumn20.OptionsColumn.AllowEdit = false; - this.gridColumn20.OptionsColumn.AllowFocus = false; - this.gridColumn20.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn20.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn20.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn20.OptionsColumn.ReadOnly = true; - this.gridColumn20.Visible = true; - this.gridColumn20.VisibleIndex = 9; - this.gridColumn20.Width = 115; - // - // gridColumn21 - // - this.gridColumn21.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn21.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn21.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn21.Caption = "Module"; - this.gridColumn21.FieldName = "Module"; - this.gridColumn21.MinWidth = 24; - this.gridColumn21.Name = "gridColumn21"; - this.gridColumn21.OptionsColumn.AllowEdit = false; - this.gridColumn21.OptionsColumn.AllowFocus = false; - this.gridColumn21.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn21.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn21.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn21.OptionsColumn.ReadOnly = true; - this.gridColumn21.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn21.Visible = true; - this.gridColumn21.VisibleIndex = 10; - this.gridColumn21.Width = 115; - // - // gridColumn22 - // - this.gridColumn22.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn22.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn22.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn22.Caption = "Audit"; - this.gridColumn22.FieldName = "Audit"; - this.gridColumn22.MinWidth = 24; - this.gridColumn22.Name = "gridColumn22"; - this.gridColumn22.OptionsColumn.AllowEdit = false; - this.gridColumn22.OptionsColumn.AllowFocus = false; - this.gridColumn22.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn22.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn22.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn22.OptionsColumn.ReadOnly = true; - this.gridColumn22.Visible = true; - this.gridColumn22.VisibleIndex = 3; - this.gridColumn22.Width = 115; - // - // gridColumn23 - // - this.gridColumn23.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn23.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn23.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn23.Caption = "Object"; - this.gridColumn23.MinWidth = 24; - this.gridColumn23.Name = "gridColumn23"; - this.gridColumn23.OptionsColumn.AllowEdit = false; - this.gridColumn23.OptionsColumn.AllowFocus = false; - this.gridColumn23.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn23.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn23.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn23.OptionsColumn.ReadOnly = true; - this.gridColumn23.OptionsColumn.ShowCaption = false; - this.gridColumn23.OptionsColumn.ShowInCustomizationForm = false; - this.gridColumn23.Width = 87; - // - // gridColumn24 - // - this.gridColumn24.AppearanceCell.Options.UseTextOptions = true; - this.gridColumn24.AppearanceCell.TextOptions.Trimming = DevExpress.Utils.Trimming.EllipsisCharacter; - this.gridColumn24.AppearanceCell.TextOptions.WordWrap = DevExpress.Utils.WordWrap.NoWrap; - this.gridColumn24.Caption = "ProcessID"; - this.gridColumn24.FieldName = "ProcessID"; - this.gridColumn24.MinWidth = 24; - this.gridColumn24.Name = "gridColumn24"; - this.gridColumn24.OptionsColumn.AllowEdit = false; - this.gridColumn24.OptionsColumn.AllowFocus = false; - this.gridColumn24.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn24.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False; - this.gridColumn24.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True; - this.gridColumn24.OptionsColumn.ReadOnly = true; - this.gridColumn24.OptionsFilter.FilterPopupMode = DevExpress.XtraGrid.Columns.FilterPopupMode.CheckedList; - this.gridColumn24.Visible = true; - this.gridColumn24.VisibleIndex = 4; - this.gridColumn24.Width = 115; - // - // panelControl1 - // - this.panelControl1.Controls.Add(this.sBtnGroup); - this.panelControl1.Controls.Add(this.nudGroupBychars); - this.panelControl1.Controls.Add(this.rbGroupByTextLength); - this.panelControl1.Controls.Add(this.sBtnLength); - this.panelControl1.Controls.Add(this.txtbGroupByChars); - this.panelControl1.Controls.Add(this.rbGroupByText); - this.panelControl1.Dock = System.Windows.Forms.DockStyle.Top; - this.panelControl1.Location = new System.Drawing.Point(0, 0); - this.panelControl1.Name = "panelControl1"; - this.panelControl1.Size = new System.Drawing.Size(1846, 40); - this.panelControl1.TabIndex = 16; - // - // sBtnGroup - // - this.sBtnGroup.Dock = System.Windows.Forms.DockStyle.Left; - this.sBtnGroup.Location = new System.Drawing.Point(794, 2); - this.sBtnGroup.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.sBtnGroup.Name = "sBtnGroup"; - this.sBtnGroup.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.sBtnGroup.Size = new System.Drawing.Size(83, 36); - this.sBtnGroup.TabIndex = 13; - this.sBtnGroup.Text = "Group"; - this.sBtnGroup.Click += new System.EventHandler(this.sBtnGroup_Click); - // - // nudGroupBychars - // - this.nudGroupBychars.Dock = System.Windows.Forms.DockStyle.Left; - this.nudGroupBychars.Location = new System.Drawing.Point(721, 2); - this.nudGroupBychars.Maximum = new decimal(new int[] { - 1000000, - 0, - 0, - 0}); - this.nudGroupBychars.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.nudGroupBychars.Name = "nudGroupBychars"; - this.nudGroupBychars.Size = new System.Drawing.Size(73, 23); - this.nudGroupBychars.TabIndex = 18; - this.nudGroupBychars.Value = new decimal(new int[] { - 10, - 0, - 0, - 0}); - this.nudGroupBychars.ValueChanged += new System.EventHandler(this.nudGroupBychars_ValueChanged); - // - // rbGroupByTextLength - // - this.rbGroupByTextLength.AutoSize = true; - this.rbGroupByTextLength.Dock = System.Windows.Forms.DockStyle.Left; - this.rbGroupByTextLength.Location = new System.Drawing.Point(465, 2); - this.rbGroupByTextLength.Name = "rbGroupByTextLength"; - this.rbGroupByTextLength.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.rbGroupByTextLength.Size = new System.Drawing.Size(256, 36); - this.rbGroupByTextLength.TabIndex = 17; - this.rbGroupByTextLength.Text = "Or group by number of characters:"; - this.rbGroupByTextLength.UseVisualStyleBackColor = true; - // - // sBtnLength - // - this.sBtnLength.Dock = System.Windows.Forms.DockStyle.Left; - this.sBtnLength.Location = new System.Drawing.Point(382, 2); - this.sBtnLength.Margin = new System.Windows.Forms.Padding(5, 2, 5, 2); - this.sBtnLength.Name = "sBtnLength"; - this.sBtnLength.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.sBtnLength.Size = new System.Drawing.Size(83, 36); - this.sBtnLength.TabIndex = 12; - this.sBtnLength.Text = "Set Length"; - this.sBtnLength.Click += new System.EventHandler(this.sBtnLength_Click); - // - // txtbGroupByChars - // - this.txtbGroupByChars.Dock = System.Windows.Forms.DockStyle.Left; - this.txtbGroupByChars.Location = new System.Drawing.Point(132, 2); - this.txtbGroupByChars.Margin = new System.Windows.Forms.Padding(5, 3, 5, 3); - this.txtbGroupByChars.MenuManager = this.barManager1; - this.txtbGroupByChars.Name = "txtbGroupByChars"; - this.txtbGroupByChars.Size = new System.Drawing.Size(250, 22); - this.txtbGroupByChars.TabIndex = 14; - this.txtbGroupByChars.Click += new System.EventHandler(this.txtbGroupByChars_Click); - // - // rbGroupByText - // - this.rbGroupByText.AutoSize = true; - this.rbGroupByText.Checked = true; - this.rbGroupByText.Dock = System.Windows.Forms.DockStyle.Left; - this.rbGroupByText.Location = new System.Drawing.Point(2, 2); - this.rbGroupByText.Name = "rbGroupByText"; - this.rbGroupByText.Padding = new System.Windows.Forms.Padding(5, 0, 5, 0); - this.rbGroupByText.Size = new System.Drawing.Size(130, 36); - this.rbGroupByText.TabIndex = 16; - this.rbGroupByText.TabStop = true; - this.rbGroupByText.Text = "group by text:"; - this.rbGroupByText.UseVisualStyleBackColor = true; - // - // contextMenuStripFilters - // - this.contextMenuStripFilters.ImageScalingSize = new System.Drawing.Size(20, 20); - this.contextMenuStripFilters.Name = "contextMenuStripFilters"; - this.contextMenuStripFilters.Size = new System.Drawing.Size(61, 4); - // - // MainSplitContainer - // - this.MainSplitContainer.Collapsed = true; - this.MainSplitContainer.CollapsePanel = DevExpress.XtraEditors.SplitCollapsePanel.Panel1; - this.MainSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - this.MainSplitContainer.FixedPanel = DevExpress.XtraEditors.SplitFixedPanel.None; - this.MainSplitContainer.Location = new System.Drawing.Point(0, 20); - this.MainSplitContainer.Name = "MainSplitContainer"; - this.MainSplitContainer.Panel1.Controls.Add(this.standaloneBarDockControlLeft); - this.MainSplitContainer.Panel1.Text = "Panel1"; - this.MainSplitContainer.Panel2.Controls.Add(this.xtraTabControl1); - this.MainSplitContainer.Panel2.Text = "Panel2"; - this.MainSplitContainer.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel2; - this.MainSplitContainer.Size = new System.Drawing.Size(1853, 739); - this.MainSplitContainer.SplitterPosition = 187; - this.MainSplitContainer.TabIndex = 12; - // - // LogGridPopupMenu - // - this.LogGridPopupMenu.LinksPersistInfo.AddRange(new DevExpress.XtraBars.LinkPersistInfo[] { - new DevExpress.XtraBars.LinkPersistInfo(this.bBtnClearLog), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiDiffTime), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiDatetiemFilterFrom), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiDatetiemFilterTo), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiBookmarkNonPersist), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiBookmarkPersist), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiJsonViewer), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiCopyMessage), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiCopyAllMessages), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiAddNoteToMessage), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiIncludeMessage, true), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiIncludeSource), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiIncludeModule), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiIncludeColumnHeaderFilter), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiExcludeMessage, true), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiExcludeSource), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiExcludeModule), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiSaveLayout, true), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiIncreaseFontSize), - new DevExpress.XtraBars.LinkPersistInfo(this.bbiDecreaseFontSize)}); - this.LogGridPopupMenu.Manager = this.barManager1; - this.LogGridPopupMenu.Name = "LogGridPopupMenu"; - // - // alertControl1 - // - this.alertControl1.ShowPinButton = false; - // - // UCLogs - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.MainSplitContainer); - this.Controls.Add(this.barDockControlLeft); - this.Controls.Add(this.barDockControlRight); - this.Controls.Add(this.barDockControlBottom); - this.Controls.Add(this.barDockControlTop); - this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.Name = "UCLogs"; - this.Size = new System.Drawing.Size(1853, 759); - this.Load += new System.EventHandler(this.UCLogs_Load); - this.DragDrop += new System.Windows.Forms.DragEventHandler(this.UCLogs_DragDrop); - this.DragEnter += new System.Windows.Forms.DragEventHandler(this.UCLogs_DragEnter); - ((System.ComponentModel.ISupportInitialize)(this.gridControl)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.logGrid)).EndInit(); - this.panel1.ResumeLayout(false); - this.panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.txtbHighlight.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.barManager1)).EndInit(); - this.pnlButtonsHighlight.ResumeLayout(false); - this.spltcDateFiltering.Panel1.ResumeLayout(false); - this.spltcDateFiltering.Panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltcDateFiltering)).EndInit(); - this.spltcDateFiltering.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.deOlderThanFilter.Properties.CalendarTimeProperties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.deOlderThanFilter.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceOlderThanFilter.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.deNewerThanFilter.Properties.CalendarTimeProperties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.deNewerThanFilter.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceNewerThanFilter.Properties)).EndInit(); - this.spltcProcessesModule.Panel1.ResumeLayout(false); - this.spltcProcessesModule.Panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltcProcessesModule)).EndInit(); - this.spltcProcessesModule.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.txtbModule.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceModulesProcess.Properties)).EndInit(); - this.spltcSources.Panel1.ResumeLayout(false); - this.spltcSources.Panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltcSources)).EndInit(); - this.spltcSources.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.txtbSource.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceSources.Properties)).EndInit(); - this.spltTextExclude.Panel1.ResumeLayout(false); - this.spltTextExclude.Panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltTextExclude)).EndInit(); - this.spltTextExclude.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.txtbExclude.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceExcludeText.Properties)).EndInit(); - this.spltText.Panel1.ResumeLayout(false); - this.spltText.Panel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.spltText)).EndInit(); - this.spltText.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.txtbInclude.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ceIncludeText.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.chkLstLogLevel)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.tcBottom)).EndInit(); - this.tcBottom.ResumeLayout(false); - this.xtpMessageInfo.ResumeLayout(false); - this.xtpMessageInfo.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.rtxtContent.Properties)).EndInit(); - this.xtpBookmarks.ResumeLayout(false); - this.xtpBookmarks.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.gridControlBookmarkedMessages)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewBookmarkedMessages)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).EndInit(); - this.xtraTabControl1.ResumeLayout(false); - this.xtpMain.ResumeLayout(false); - this.xtpMain.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).EndInit(); - this.splitContainerMain.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pnlFilters)).EndInit(); - this.pnlFilters.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.xtcFiltersLeft)).EndInit(); - this.xtcFiltersLeft.ResumeLayout(false); - this.xtpFilters.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pnlLeftFilters)).EndInit(); - this.pnlLeftFilters.ResumeLayout(false); - this.pnlModulesAndDates.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.xtcFilters)).EndInit(); - this.xtcFilters.ResumeLayout(false); - this.xtpFiltersIncludes.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.clbInclude)).EndInit(); - this.xtpFiltersExclude.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.clbExclude)).EndInit(); - this.xtpSearchFilterPanel.ResumeLayout(false); - this.xtpSearchFilterPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.rgSearchMode.Properties)).EndInit(); - this.pnlBottom.ResumeLayout(false); - this.pnlBottom.PerformLayout(); - this.xtCounts.ResumeLayout(false); - this.spltGroupByChars.Panel1.ResumeLayout(false); - this.spltGroupByChars.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.spltGroupByChars)).EndInit(); - this.spltGroupByChars.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.gCtrlGrouping)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewGrouping)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridControlMessageGrouping)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.gridViewGrouping2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit(); - this.panelControl1.ResumeLayout(false); - this.panelControl1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.nudGroupBychars)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.txtbGroupByChars.Properties)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.MainSplitContainer)).EndInit(); - this.MainSplitContainer.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.LogGridPopupMenu)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - private DevExpress.XtraGrid.GridControl gridControl; - private GridView logGrid; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnDate; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnDataSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnText; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnLevel; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnClass; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnCategory; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnUser; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnModule; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnObject; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnProcessID; - private System.Windows.Forms.ImageList imageList; - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.Timer tmrNewData; - private DevExpress.XtraGrid.GridControl gridControlBookmarkedMessages; - private GridView gridViewBookmarkedMessages; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkDataSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkDate; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkText; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkSource; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkLevel; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkClass; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkCategory; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkUser; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkModule; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkAudit; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkObject; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkProcessID; - private System.Windows.Forms.ImageList imageListBottom; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.CheckBox chkbHighlight; - private System.Windows.Forms.Panel pnlButtonsHighlight; - private DevExpress.XtraTab.XtraTabControl xtraTabControl1; - private DevExpress.XtraTab.XtraTabPage xtpMain; - private System.Windows.Forms.Panel pnlBottom; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnTimeDiff; - private DevExpress.XtraTab.XtraTabPage xtCounts; - private System.Windows.Forms.SplitContainer spltGroupByChars; - private DevExpress.XtraGrid.GridControl gridControlMessageGrouping; - private GridView gridViewGrouping2; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn13; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn14; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn15; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn16; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn17; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn18; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn19; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn20; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn21; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn22; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn23; - private DevExpress.XtraGrid.Columns.GridColumn gridColumn24; - private DevExpress.XtraEditors.LabelControl lblTotalMessages; - private DevExpress.XtraTab.XtraTabControl tcBottom; - private DevExpress.XtraTab.XtraTabPage xtpMessageInfo; - private DevExpress.XtraTab.XtraTabPage xtpBookmarks; - private DevExpress.XtraBars.StandaloneBarDockControl bdcTopFiltering; - private DevExpress.XtraBars.BarManager barManager1; - private DevExpress.XtraBars.Bar barTopFiltering; - private DevExpress.XtraBars.Bar BbarMainMenu; - private DevExpress.XtraBars.BarDockControl barDockControlTop; - private DevExpress.XtraBars.BarDockControl barDockControlBottom; - private DevExpress.XtraBars.BarDockControl barDockControlLeft; - private DevExpress.XtraBars.BarDockControl barDockControlRight; - private DevExpress.XtraBars.BarToggleSwitchItem btswitchMessageDetails; - private DevExpress.XtraBars.BarButtonItem bBtnSaveLog; - private DevExpress.XtraBars.BarButtonItem bBtnImport; - private DevExpress.XtraBars.BarButtonItem bBtnClearLog; - internal DevExpress.XtraBars.BarToggleSwitchItem btswitchRefreshLog; - private DevExpress.XtraEditors.SimpleButton sBtnMostCommon; - private DevExpress.XtraEditors.CheckedListBoxControl chkLstLogLevel; - private DevExpress.Utils.Behaviors.BehaviorManager behaviorManager1; - private DevExpress.XtraEditors.SimpleButton sBtnLength; - private DevExpress.XtraEditors.SimpleButton sBtnGroup; - private DevExpress.XtraBars.StandaloneBarDockControl bdcMessageBottom; - private DevExpress.XtraBars.BarButtonItem bBtnExpand; - private DevExpress.XtraBars.BarButtonItem barButtonItem3; - private DevExpress.XtraBars.Bar barMessage; - private DevExpress.XtraBars.BarButtonItem bBtnButtomExpand; - private DevExpress.XtraBars.BarButtonItem bBtnCopyButtom; - private DevExpress.XtraBars.BarToggleSwitchItem btSwitchExpandButtomMessage; - private DevExpress.XtraBars.StandaloneBarDockControl bdcBookmarks; - private DevExpress.XtraBars.Bar barBookmark; - private DevExpress.XtraBars.BarButtonItem bBtnopyBookmarked; - private DevExpress.XtraBars.BarButtonItem barButtonItem4; - private DevExpress.XtraBars.BarButtonItem bBtnGoToMessage; - private DevExpress.XtraBars.BarButtonItem bBtnRemoveBoomark; - private DevExpress.XtraGrid.GridControl gCtrlGrouping; - private GridView gridViewGrouping; - private DevExpress.XtraEditors.SimpleButton sBtnCancel; - private DevExpress.XtraBars.BarButtonItem bBtnCopyAllBookmarks; - private DevExpress.XtraEditors.SplitContainerControl splitContainerMain; - private DevExpress.XtraEditors.SimpleButton sbtnPageFirst; - private DevExpress.XtraEditors.LabelControl lblPageNumber; - private DevExpress.XtraEditors.SimpleButton sBtnPageNext; - private DevExpress.XtraEditors.SimpleButton sBtnLastPage; - private DevExpress.XtraEditors.SimpleButton sbtnPagePrevious; - private DevExpress.XtraBars.BarSubItem bSMExports; - private DevExpress.XtraBars.BarButtonItem bBtnExportExcel; - private DevExpress.XtraBars.BarButtonItem bBtnExportCSV; - private DevExpress.XtraBars.BarButtonItem bBtnExportHtml; - internal DevExpress.XtraBars.BarToggleSwitchItem btsAutoScrollToBottom; - private DevExpress.XtraBars.BarButtonItem bBtnUndockView; - private DevExpress.XtraBars.BarButtonItem bBtnSaveEntireLog; - private DevExpress.XtraBars.BarButtonItem bBtnDataVisualizer; - private DevExpress.XtraBars.BarButtonItem bbiScreenshot; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnThread; - private DevExpress.XtraBars.BarButtonItem bbtnSaveViewAgnostic; - private DevExpress.XtraBars.BarSubItem barSubItemSaveLog; - private DevExpress.XtraBars.BarButtonItem barButtonItemSaveEntireInAnalogy; - private DevExpress.XtraEditors.TextEdit txtbInclude; - private DevExpress.XtraEditors.TextEdit txtbExclude; - private DevExpress.XtraEditors.TextEdit txtbHighlight; - private DevExpress.XtraEditors.MemoEdit rtxtContent; - private DevExpress.XtraEditors.TextEdit txtbGroupByChars; - private DevExpress.XtraBars.BarSubItem barSubItem1; - private DevExpress.XtraBars.BarButtonItem bBtnUndockViewPerProcess; - private System.Windows.Forms.SplitContainer spltText; - private DevExpress.XtraEditors.SimpleButton sbtnTextInclude; - private System.Windows.Forms.SplitContainer spltTextExclude; - private DevExpress.XtraEditors.SimpleButton sbtnTextExclude; - private System.Windows.Forms.SplitContainer spltcSources; - private DevExpress.XtraEditors.TextEdit txtbSource; - private DevExpress.XtraEditors.SimpleButton sbtnIncludeSources; - private System.Windows.Forms.SplitContainer spltcProcessesModule; - private DevExpress.XtraEditors.TextEdit txtbModule; - private DevExpress.XtraEditors.SimpleButton sbtnIncludeModules; - private DevExpress.XtraEditors.SimpleButton sbtnUndockPerProcess; - private System.Windows.Forms.SplitContainer spltcDateFiltering; - private DevExpress.XtraEditors.DateEdit deNewerThanFilter; - private DevExpress.XtraEditors.DateEdit deOlderThanFilter; - private DevExpress.XtraEditors.SimpleButton sbtnMoreHighlight; - private DevExpress.XtraEditors.SimpleButton sbtnPreDefinedFilters; - private System.Windows.Forms.ContextMenuStrip contextMenuStripFilters; - private DevExpress.XtraEditors.LabelControl lblTotalMessagesAlert; - private DevExpress.XtraEditors.PanelControl panelControl1; - private DevExpress.XtraEditors.SplitContainerControl MainSplitContainer; - private DevExpress.XtraBars.Bar barGroup; - private DevExpress.XtraBars.StandaloneBarDockControl standaloneBarDockControlLeft; - private DevExpress.XtraBars.BarButtonItem bBtnShare; - private DevExpress.XtraBars.BarButtonItem bBtnFullGrid; - private DevExpress.XtraBars.BarButtonItem bbtnReload; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnMachineName; - private DevExpress.XtraGrid.Columns.GridColumn gridColumnBookmarkMachineName; - private DevExpress.XtraBars.BarButtonItem bBtnSaveCurrentSelectionCustomFormat; - private DevExpress.XtraBars.BarButtonItem bBtnSaveCurrentSelectionAnalogyFormat; - private DevExpress.XtraBars.BarButtonItem bBtnUndockSelection; - private DevExpress.XtraEditors.CheckEdit ceExcludeText; - private DevExpress.XtraEditors.CheckEdit ceIncludeText; - private DevExpress.XtraEditors.CheckEdit ceSources; - private DevExpress.XtraEditors.CheckEdit ceModulesProcess; - private DevExpress.XtraEditors.CheckEdit ceOlderThanFilter; - private DevExpress.XtraEditors.CheckEdit ceNewerThanFilter; - private System.Windows.Forms.RadioButton rbGroupByText; - private System.Windows.Forms.RadioButton rbGroupByTextLength; - private System.Windows.Forms.NumericUpDown nudGroupBychars; - private DevExpress.XtraEditors.PanelControl pnlLeftFilters; - private DevExpress.XtraEditors.CheckedListBoxControl clbInclude; - private DevExpress.XtraEditors.CheckedListBoxControl clbExclude; - private System.Windows.Forms.Panel pnlModulesAndDates; - private DevExpress.XtraEditors.PanelControl pnlFilters; - private DevExpress.XtraTab.XtraTabControl xtcFilters; - private DevExpress.XtraTab.XtraTabPage xtpFiltersIncludes; - private DevExpress.XtraTab.XtraTabPage xtpFiltersExclude; - private DevExpress.XtraTab.XtraTabControl xtcFiltersLeft; - private DevExpress.XtraTab.XtraTabPage xtpSearchFilterPanel; - private DevExpress.XtraTab.XtraTabPage xtpFilters; - private DevExpress.XtraEditors.SimpleButton sbtnToggleSearchFilter; - private DevExpress.XtraEditors.LabelControl labelControl1; - private DevExpress.XtraEditors.RadioGroup rgSearchMode; - private DevExpress.XtraBars.PopupMenu LogGridPopupMenu; - private DevExpress.XtraBars.BarButtonItem bbiDiffTime; - private DevExpress.XtraBars.BarButtonItem bbiDatetiemFilterFrom; - private DevExpress.XtraBars.BarButtonItem bbiDatetiemFilterTo; - private DevExpress.XtraBars.BarButtonItem bbiBookmarkNonPersist; - private DevExpress.XtraBars.BarButtonItem bbiBookmarkPersist; - private DevExpress.XtraBars.BarButtonItem bbiCopyMessage; - private DevExpress.XtraBars.BarButtonItem bbiCopyAllMessages; - private DevExpress.XtraBars.BarButtonItem bbiAddNoteToMessage; - private DevExpress.XtraBars.BarButtonItem bbiIncludeMessage; - private DevExpress.XtraBars.BarButtonItem bbiIncludeColumnHeaderFilter; - private DevExpress.XtraBars.BarButtonItem bbiExcludeMessage; - private DevExpress.XtraBars.BarButtonItem bbiExcludeSource; - private DevExpress.XtraBars.BarButtonItem bbiExcludeModule; - private DevExpress.XtraBars.BarButtonItem bbiSaveLayout; - private DevExpress.XtraBars.BarButtonItem bbiIncreaseFontSize; - private DevExpress.XtraBars.BarButtonItem bbiDecreaseFontSize; - private DevExpress.XtraBars.BarButtonItem bbiIncludeSource; - private DevExpress.XtraBars.BarButtonItem bbiIncludeModule; - private DevExpress.XtraBars.BarButtonItem bbiSaveBookmarks; - private DevExpress.XtraBars.BarButtonItem bbiJsonViewer; - private DevExpress.Utils.ToolTipController defaultToolTipController; - private DevExpress.XtraBars.Alerter.AlertControl alertControl1; - } -} diff --git a/Analogy/UserControls/UCLogsNonFloatable.cs b/Analogy/UserControls/UCLogsNonFloatable.cs deleted file mode 100644 index 5f2dbff82..000000000 --- a/Analogy/UserControls/UCLogsNonFloatable.cs +++ /dev/null @@ -1,3108 +0,0 @@ -using Analogy.DataProviders; -using Analogy.DataTypes; -using Analogy.Forms; -using Analogy.Interfaces; -using Analogy.Interfaces.DataTypes; -using Analogy.Managers; -using Analogy.Properties; -using Analogy.Tools; -using DevExpress.Data; -using DevExpress.Data.Filtering; -using DevExpress.Utils; -using DevExpress.XtraBars; -using DevExpress.XtraBars.Alerter; -using DevExpress.XtraEditors; -using DevExpress.XtraEditors.Controls; -using DevExpress.XtraGrid.Columns; -using DevExpress.XtraGrid.Views.Base; -using DevExpress.XtraGrid.Views.Grid; -using DevExpress.XtraGrid.Views.Grid.ViewInfo; -using DevExpress.XtraPrinting; -using DevExpress.XtraTab; -using System; -using System.Collections.Generic; -using System.Data; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Imaging; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace Analogy -{ - - public partial class UCLogsNonFloatable : XtraUserControl, ILogMessageCreatedHandler, ILogWindow - { - #region properties - public bool ForceNoFileCaching { get; set; } = false; - public bool DoNotAddToRecentHistory { get; set; } = false; - private PagingManager PagingManager { get; set; } - private FileProcessor FileProcessor { get; set; } - public ManualResetEvent columnAdderSync = new ManualResetEvent(false); - public List<(string field, string caption)> CurrentColumnsFields { get; set; } - public CancellationTokenSource CancellationTokenSource { get; set; } = new CancellationTokenSource(); - public event EventHandler OnHistoryCleared; - public event EventHandler<(string, AnalogyLogMessage)> OnFocusedRowChanged; - private Dictionary> groupingByChars; - private string OldTextInclude = string.Empty; - private string OldTextExclude = string.Empty; - public int fileLoadingCount; - public List IncludeFilterCriteriaUIOptions { get; set; } - public List ExcludeFilterCriteriaUIOptions { get; set; } - private bool FullModeEnabled { get; set; } - private bool LoadingInProgress => fileLoadingCount > 0; - private UserSettingsManager Settings => UserSettingsManager.UserSettings; - private IExtensionsManager ExtensionManager { get; set; } = ExtensionsManager.Instance; - private IEnumerable InPlaceRegisteredExtensions { get; set; } - private IEnumerable UserControlRegisteredExtensions { get; set; } - private List HighlightRows { get; set; } = new List(); - private List _excludeMostCommon = new List(); - public const string DataGridDateColumnName = "Date"; - private bool _realtimeUpdate = true; - private bool _simpleMode; - private ReaderWriterLockSlim lockExternalWindowsObject = - new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); - - private ReaderWriterLockSlim lockSlim; - private DataTable _messageData; - private DataTable _bookmarkedMessages; - private IProgress ProgressReporter { get; set; } - private readonly List _externalWindows = new List(); - - private List ExternalWindows - { - get - { - lockExternalWindowsObject.EnterReadLock(); - var items = _externalWindows.ToList(); - lockExternalWindowsObject.ExitReadLock(); - return items; - } - } - - private int ExternalWindowsCount; - - public List Messages - { - get - { - var filterDatatable = GetFilteredDataTable(); - return filterDatatable.Rows.OfType().Select(r => (AnalogyLogMessage)r["Object"]).ToList(); - } - } - - private List BookmarkedMessages - { - get - { - return _bookmarkedMessages.Rows.OfType().Select(r => (AnalogyLogMessage)r["Object"]).ToList(); - } - } - private bool ApplyGoToSelectedMessageAfterFirstClick { get; set; } - private AnalogyLogMessage SelectedMassage { get; set; } - private FilterCriteriaObject _filterCriteria = new FilterCriteriaObject(); - private AutoCompleteStringCollection autoCompleteInclude = new AutoCompleteStringCollection(); - private AutoCompleteStringCollection autoCompleteExclude = new AutoCompleteStringCollection(); - - private List LoadedFiles { get; set; } - private bool NewDataExist { get; set; } - private DateTime reloadDateTime = DateTime.MaxValue; - private bool hasAnyInPlaceExtensions; - private bool hasAnyUserControlExtensions; - private DateTime diffStartTime = DateTime.MinValue; - private bool BookmarkView; - private int pageNumber = 1; - private CancellationTokenSource filterTokenSource; - private CancellationToken filterToken; - - private int TotalPages => PagingManager.TotalPages; - public IAnalogyDataProvider DataProvider { get; set; } - public IAnalogyOfflineDataProvider? FileDataProvider { get; set; } - private IAnalogyOfflineDataProvider AnalogyOfflineDataProvider { get; } = new AnalogyOfflineDataProvider(); - private Dictionary counts; - public GridView LogGrid - { - get => logGrid; - set => logGrid = value; - } - - private bool _realTimeMode; - public bool RealTimeMode - { - get => _realtimeUpdate; - set - { - _realtimeUpdate = value; - btsAutoScrollToBottom.Checked = _realtimeUpdate; - } - } - private LogLevelSelectionType logLevelSelectionType = UserSettingsManager.UserSettings.LogLevelSelection; - #endregion - - public UCLogsNonFloatable() - { - - InitializeComponent(); - _simpleMode = Settings.SimpleMode; - counts = new Dictionary(); - foreach (string value in Utils.LogLevels) - { - counts.Add(value, 0); - } - - filterTokenSource = new CancellationTokenSource(); - filterToken = filterTokenSource.Token; - FileProcessor = new FileProcessor(this); - if (DesignMode) - { - return; - } - - PagingManager = new PagingManager(this); - lockSlim = PagingManager.lockSlim; - _messageData = PagingManager.CurrentPage(); - var excludedColumns = new List() - { - gridColumnDate, - gridColumnTimeDiff, - gridColumnText, - gridColumnSource, - gridColumnLevel, - gridColumnModule, - gridColumnObject, - }; - CurrentColumnsFields = - logGrid.Columns.Except(excludedColumns).Select(c => (c.FieldName, c.Caption)).ToList(); - - deNewerThanFilter.DateTime = DateTime.Now; - deOlderThanFilter.DateTime = DateTime.Now; - IncludeFilterCriteriaUIOptions = CurrentColumnsFields.Select(c => new FilterCriteriaUIOption(c.caption, c.field, false)).ToList(); - ExcludeFilterCriteriaUIOptions = CurrentColumnsFields.Select(c => new FilterCriteriaUIOption(c.caption, c.field, false)).ToList(); - clbInclude.DisplayMember = nameof(FilterCriteriaUIOption.DisplayMember); - clbInclude.ValueMember = nameof(FilterCriteriaUIOption.ValueMember); - clbInclude.CheckMember = nameof(FilterCriteriaUIOption.CheckMember); - clbInclude.DataSource = IncludeFilterCriteriaUIOptions; - clbExclude.DisplayMember = nameof(FilterCriteriaUIOption.DisplayMember); - clbExclude.ValueMember = nameof(FilterCriteriaUIOption.ValueMember); - clbExclude.CheckMember = nameof(FilterCriteriaUIOption.CheckMember); - clbExclude.DataSource = ExcludeFilterCriteriaUIOptions; - _filterCriteria.IncludeFilterCriteriaUIOptions = IncludeFilterCriteriaUIOptions; - _filterCriteria.ExcludeFilterCriteriaUIOptions = ExcludeFilterCriteriaUIOptions; - - - } - - private async void UCLogs_Load(object sender, EventArgs e) - { - if (DesignMode) - { - return; - } - xtraTabControl1.TabPages.Remove(xtCounts); - xtcFiltersLeft.SelectedTabPage = xtpFilters; - - LoadUISettings(); - LoadReplacementHeaders(); - BookmarkModeUI(); - await LoadExtensions(); - SetupEventsHandlers(); - ProgressReporter = new Progress((value) => - { - progressBar1.Maximum = value.Total; - if (value.Processed < progressBar1.Maximum && value.Total > 1) - { - progressBar1.Value = value.Processed; - } - - if (value.Processed == value.Total) - { - progressBar1.Visible = false; - } - }); - - gridControl.DataSource = _messageData.DefaultView; - _bookmarkedMessages = Utils.DataTableConstructor(); - gridControlBookmarkedMessages.DataSource = _bookmarkedMessages; - - if (Settings.SaveSearchFilters) - { - string? includeText = string.IsNullOrEmpty(Settings.IncludeText) || Settings.IncludeText == txtbInclude.Properties.NullText ? null : Settings.IncludeText; - txtbInclude.Text = includeText; - string? excludeText = string.IsNullOrEmpty(Settings.ExcludeText) || Settings.ExcludeText == txtbExclude.Properties.NullText ? null : Settings.ExcludeText; - txtbExclude.Text = excludeText; - string? source = string.IsNullOrEmpty(Settings.SourceText) || Settings.SourceText == txtbSource.Properties.NullText ? null : Settings.SourceText; - txtbSource.Text = source; - string? module = string.IsNullOrEmpty(Settings.ModuleText) || Settings.ModuleText == txtbModule.Properties.NullText ? null : Settings.ModuleText; - txtbModule.Text = module; - - if (!string.IsNullOrEmpty(includeText) || !string.IsNullOrEmpty(excludeText) || - !string.IsNullOrEmpty(source) || !string.IsNullOrEmpty(module)) - { - AlertButton btn1 = new AlertButton(Resources.Delete_16x16); - btn1.Hint = "Clear Filtering"; - btn1.Name = "buttonClearFiltering"; - alertControl1.Buttons.Add(btn1); - alertControl1.ButtonClick += (s, arg) => - { - if (arg.ButtonName == btn1.Name) - { - txtbInclude.Text = txtbExclude.Text = txtbSource.Text = txtbModule.Text = null; - ceIncludeText.Checked = ceExcludeText.Checked = - ceModulesProcess.Checked = ceSources.Checked = false; - } - }; - AlertInfo info = new AlertInfo("Filtering", "old search filters are used. You can clear those with the x button"); - alertControl1.Show(this.ParentForm, info); - } - } - - gridControl.Focus(); - } - private void rgSearchMode_SelectedIndexChanged(object s, EventArgs e) - { - Settings.BuiltInSearchPanelMode = rgSearchMode.SelectedIndex == 0 ? BuiltInSearchPanelMode.Search : BuiltInSearchPanelMode.Filter; - logGrid.OptionsFind.Behavior = Settings.BuiltInSearchPanelMode == BuiltInSearchPanelMode.Search - ? FindPanelBehavior.Search - : FindPanelBehavior.Filter; - } - private void SetupEventsHandlers() - { - #region buttons - bbiIncludeColumnHeaderFilter.ItemClick += (s, e) => - { - if (bbiIncludeColumnHeaderFilter.Tag is ViewColumnFilterInfo filter) - { - logGrid.ActiveFilter.Add(filter); - } - }; - bbiIncludeMessage.ItemClick += tsmiInclude_Click; - bbiIncludeSource.ItemClick += (s, e) => - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (!string.IsNullOrEmpty(message?.Source)) - { - txtbSource.Text = txtbSource.Text == txtbSource.Properties.NullText ? message.Source : txtbSource.Text + "," + message.Source; - } - }; - bbiIncludeModule.ItemClick += (s, e) => - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (!string.IsNullOrEmpty(message?.Module)) - { - txtbModule.Text = txtbModule.Text == txtbModule.Properties.NullText ? message.Module : txtbModule.Text + "," + message.Module; - } - }; - bbiJsonViewer.ItemClick += (s, e) => - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - JsonViewerForm j = new JsonViewerForm(message); - j.Show(this); - }; - bbiDiffTime.ItemClick += tsmiTimeDiff_Click; - bbiIncreaseFontSize.ItemClick += tsmiIncreaseFont_Click; - bbiDecreaseFontSize.ItemClick += tsmiDecreaseFont_Click; - bbiSaveLayout.ItemClick += tsmiSaveLayout_Click; - bbiExcludeModule.ItemClick += tsmiExcludeModule_Click; - bbiExcludeSource.ItemClick += tsmiExcludeSource_Click; - bbiExcludeMessage.ItemClick += tsmiExclude_Click; - bbiAddNoteToMessage.ItemClick += tsmiAddCommentToMessage_Click; - bbiCopyAllMessages.ItemClick += tsmiCopyMessages_Click; - bbiCopyMessage.ItemClick += tsmiCopy_Click; - bbiBookmarkPersist.ItemClick += tsmiBookmarkPersist_Click; - bbiBookmarkNonPersist.ItemClick += tsmiBookmark_Click; - bbiDatetiemFilterTo.ItemClick += tsmiDateFilterOlder_Click; - bbiDatetiemFilterFrom.ItemClick += tsmiDateFilterNewer_Click; - sbtnToggleSearchFilter.Click += (_, __) => - { - Settings.IsBuiltInSearchPanelVisible = !Settings.IsBuiltInSearchPanelVisible; - logGrid.OptionsFind.AlwaysVisible = Settings.IsBuiltInSearchPanelVisible; - }; - bBtnFullGrid.ItemClick += (s, e) => - { - FullModeEnabled = !FullModeEnabled; - pnlFilters.Visible = !FullModeEnabled; - }; - bBtnShare.ItemClick += (s, e) => - { - AnalogyOTAForm share = new AnalogyOTAForm(GetFilteredDataTable()); - share.Show(this); - }; - bbtnReload.ItemClick += async (s, e) => - { - reloadDateTime = FileProcessor.lastNewestMessage; - await LoadFilesAsync(LoadedFiles, true, true); - }; - bbiSaveBookmarks.ItemClick += (_, __) => SaveMessagesToLog(FileDataProvider, BookmarkedMessages); - - #endregion - #region textboxes - txtbInclude.Enter += (s, e) => txtbInclude.SelectAll(); - txtbInclude.KeyDown += (s, e) => - { - if (e.KeyCode == Keys.Enter) - { - var added = Settings.AddNewSearchesEntryToLists(txtbInclude.Text, true); - if (added) - { - autoCompleteInclude.Add(txtbInclude.Text); - } - - } - }; - txtbInclude.EditValueChanged += EditValueChanged; - txtbExclude.EditValueChanged += EditValueChanged; - txtbSource.EditValueChanged += EditValueChanged; - txtbModule.EditValueChanged += EditValueChanged; - txtbInclude.TextChanged += async (s, e) => - { - if (OldTextInclude.Equals(txtbInclude.Text) || - txtbInclude.Text.Equals(txtbInclude.Properties.NullText)) - { - return; - } - - OldTextInclude = txtbInclude.Text; - // txtbHighlight.Text = txtbInclude.Text; - if (string.IsNullOrEmpty(txtbInclude.Text)) - { - ceIncludeText.Checked = false; - txtbInclude.EditValue = null; - return; - } - - chkbHighlight.Checked = false; - ceIncludeText.Checked = true; - await FilterHasChanged(); - }; - txtbExclude.Enter += (s, e) => txtbExclude.SelectAll(); - txtbExclude.KeyDown += (s, e) => - { - if (e.KeyCode == Keys.Enter) - { - var added = Settings.AddNewSearchesEntryToLists(txtbExclude.Text, false); - if (added) - { - autoCompleteExclude.Add(txtbExclude.Text); - } - } - }; - txtbExclude.TextChanged += async (s, e) => - { - if (OldTextExclude.Equals(txtbExclude.Text) || - txtbExclude.Text.Equals(txtbExclude.Properties.NullText)) - { - return; - } - - Settings.ExcludeText = txtbExclude.Text; - OldTextExclude = txtbExclude.Text; - if (string.IsNullOrEmpty(txtbExclude.Text)) - { - ceExcludeText.Checked = false; - txtbExclude.EditValue = null; - return; - } - - ceExcludeText.Checked = true; - await FilterHasChanged(); - }; - txtbSource.TextChanged += async (s, e) => - { - if (string.IsNullOrEmpty(txtbSource.Text) || - txtbSource.Text.Equals(txtbSource.Properties.NullText)) - { - ceSources.Checked = false; - txtbSource.EditValue = null; - } - else - { - if (!ceSources.Checked) - { - ceSources.Checked = true; - } - } - - await FilterHasChanged(); - Settings.SourceText = txtbSource.Text; - }; - txtbModule.TextChanged += async (s, e) => - { - if (string.IsNullOrEmpty(txtbModule.Text) || - txtbModule.Text.Equals(txtbModule.Properties.NullText)) - { - ceModulesProcess.Checked = false; - txtbModule.EditValue = null; - } - else - { - if (!ceModulesProcess.Checked) - { - ceModulesProcess.Checked = true; - } - } - - await FilterHasChanged(); - Settings.ModuleText = txtbModule.Text; - }; - #endregion - LogGrid.RowCountChanged += (s, arg) => - { - if (Settings.AutoScrollToLastMessage && !IsDisposed) - { - BeginInvoke(new MethodInvoker(() => - { - if (Settings.DefaultDescendOrder) - { - LogGrid.MoveFirst(); - LogGrid.MakeRowVisible(LogGrid.FocusedRowHandle); - } - else - { - LogGrid.MoveLast(); - LogGrid.MakeRowVisible(LogGrid.FocusedRowHandle); - } - })); - - } - }; - gridControl.KeyUp += (s, e) => - { - Keys excludeModifier = e.KeyCode & ~Keys.Control & ~Keys.Shift & ~Keys.Alt; - switch (excludeModifier) - { - case Keys.Oemplus: - case Keys.Add: - btswitchMessageDetails.Checked = true; - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - break; - case Keys.OemMinus: - case Keys.Subtract: - btswitchMessageDetails.Checked = false; - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - break; - } - }; - gridControl.MainView.Layout += MainView_Layout; - logGrid.RowStyle += LogGridView_RowStyle; - logGrid.MouseDown += LogGrid_MouseDown; - logGrid.MouseUp += LogGrid_MouseUp; - LogGridPopupMenu.BeforePopup += (_, __) => UpdatePopupTexts(); - logGrid.CustomSummaryCalculate += LogGrid_CustomSummaryCalculate; - gridViewBookmarkedMessages.RowStyle += LogGridView_RowStyle; - gridViewGrouping2.RowStyle += LogGridView_RowStyle; - rgSearchMode.SelectedIndexChanged += rgSearchMode_SelectedIndexChanged; - clbInclude.ItemCheck += async (_, __) => await FilterHasChanged(); - clbExclude.ItemCheck += async (_, __) => await FilterHasChanged(); - deNewerThanFilter.EditValueChanged += async (s, e) => - { - ceNewerThanFilter.Checked = true; - await FilterHasChanged(); - }; - deNewerThanFilter.Properties.EditValueChanged += async (s, e) => - { - ceNewerThanFilter.Checked = true; - await FilterHasChanged(); - }; - - deOlderThanFilter.EditValueChanged += async (s, e) => - { - ceOlderThanFilter.Checked = true; - await FilterHasChanged(); - }; - - deOlderThanFilter.Properties.EditValueChanged += async (s, e) => - { - ceOlderThanFilter.Checked = true; - await FilterHasChanged(); - }; - - ceOlderThanFilter.CheckedChanged += async (s, e) => await FilterHasChanged(); - ceNewerThanFilter.CheckedChanged += async (s, e) => await FilterHasChanged(); - ceModulesProcess.Click += async (s, e) => await FilterHasChanged(); - ceSources.Click += async (s, e) => await FilterHasChanged(); - ceIncludeText.CheckedChanged += async (s, e) => - { - if (!ceIncludeText.Checked && !ceExcludeText.Checked) - { - // LogGrid.ClearColumnsFilter(); - gridColumnText.FilterInfo = null; - } - - await FilterHasChanged(); - }; - ceExcludeText.CheckedChanged += async (s, e) => - { - if (!ceIncludeText.Checked && !ceExcludeText.Checked) - { - //LogGrid.ClearColumnsFilter(); - gridColumnText.FilterInfo = null; - } - - await FilterHasChanged(); - }; - logGrid.EndSorting += (s, e) => - { - var sortOrder = gridColumnDate.SortOrder; - Settings.DefaultDescendOrder = sortOrder == ColumnSortOrder.Descending; - }; - PagingManager.OnPageChanged += (s, arg) => - { - if (IsDisposed) - { - return; - } - - BeginInvoke(new MethodInvoker(() => - lblPageNumber.Text = $"Page {pageNumber} / {arg.AnalogyPage.PageNumber}")); - - }; - } - - - private void EditValueChanged(object sender, EventArgs e) - { - - if (sender is BaseEdit edit && e is ChangingEventArgs change && change.NewValue == string.Empty) - { - edit.EditValue = null; - } - } - - - private void MainView_Layout(object sender, EventArgs e) - { - try - { - if (!string.IsNullOrEmpty(Settings.LogGridFileName)) - { - gridControl.MainView.SaveLayoutToXml(Settings.LogGridFileName); - } - } - catch (Exception ex) - { - AnalogyLogManager.Instance.LogError(ex.Message, nameof(MainView_Layout)); - } - } - - private void LogGrid_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) - { - if (e.SummaryProcess == CustomSummaryProcess.Start) - { - foreach (var key in Utils.LogLevels) - { - counts[key] = 0; - } - } - else if (e.SummaryProcess == CustomSummaryProcess.Calculate) - { - counts[(string)e.FieldValue] = counts[(string)e.FieldValue] + 1; - } - - else if (e.SummaryProcess == CustomSummaryProcess.Finalize) - { - lblTotalMessages.Text = - $"Total messages:{counts.Values.Sum()}. Errors:{counts["Error"]}. Warnings:{counts["Warning"]}. Critical:{counts["Critical"]}."; - } - //todo: add alerts - //if (Settings.PreDefinedQueries.Alerts.Any()) - //{ - // var messages = rows.Select(r => (AnalogyLogMessage)r["Object"]).ToList(); - // alertCount = messages.Count(m => - // Settings.PreDefinedQueries.Alerts.Any(a => FilterCriteriaObject.MatchAlert(m, a))); - - //} - } - - private void LogGrid_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Right) - { - GridView view = sender as GridView; - GridHitInfo hitInfo = view.CalcHitInfo(e.Location); - if (hitInfo.InRow && hitInfo.RowHandle >= 0 && !(hitInfo.Column == view.FocusedColumn && hitInfo.RowHandle == view.FocusedRowHandle)) - { - UpdatePopupTexts(); - var value = view.GetRowCellValue(hitInfo.RowHandle, hitInfo.Column.FieldName); - if (value != null) - { - ViewColumnFilterInfo viewFilterInfo = new ViewColumnFilterInfo(view.Columns[hitInfo.Column.FieldName], - new ColumnFilterInfo($"[{hitInfo.Column.FieldName}] = '{value}'", "")); - string val = new string(value.ToString().Take(100).ToArray()); - bbiIncludeColumnHeaderFilter.Caption = $"Set '{val}' as column header filter for column '{hitInfo.Column.Caption}'"; - bbiIncludeColumnHeaderFilter.Tag = viewFilterInfo; - bbiIncludeColumnHeaderFilter.Visibility = BarItemVisibility.Always; - } - else - { - bbiIncludeColumnHeaderFilter.Tag = null; - bbiIncludeColumnHeaderFilter.Visibility = BarItemVisibility.Never; - } - } - } - } - - private void UpdatePopupTexts() - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message != null) - { - var module = new string(message.Module.Take(100).ToArray()); - var source = new string(message.Source.Take(100).ToArray()); - bbiIncludeModule.Caption = $"Include Process/Module: Append '{module}' to filter"; - bbiIncludeSource.Caption = $"Include Source: Append '{source}' to filter"; - bbiExcludeModule.Caption = $"Exclude Process/Module: Append '{module}' to filter"; - bbiExcludeSource.Caption = $"Exclude Source: Append '{source}' to filter"; - bbiDatetiemFilterFrom.Caption = $"Show all messages after {message.Date}"; - bbiDatetiemFilterTo.Caption = $"Show all messages Before {message.Date}"; - bbiDatetiemFilterFrom.Visibility = BarItemVisibility.Always; - bbiDatetiemFilterTo.Visibility = BarItemVisibility.Always; - } - else - { - bbiDatetiemFilterFrom.Visibility = BarItemVisibility.Never; - bbiDatetiemFilterTo.Visibility = BarItemVisibility.Never; - } - } - - private void LogGrid_MouseUp(object sender, MouseEventArgs e) - { - GridHitInfo hitInfo = logGrid.CalcHitInfo(e.Location); - if (e.Button == MouseButtons.Right && !hitInfo.InColumnPanel) - { - LogGridPopupMenu.ShowPopup(Cursor.Position); - } - } - private void LoadReplacementHeaders() - { - if (DataProvider == null) - { - return; - } - - try - { - if (DataProvider.GetReplacementHeaders() == null || !DataProvider.GetReplacementHeaders().Any()) - { - return; - } - - foreach ((string fieldName, string replacementHeader) in DataProvider.GetReplacementHeaders()) - { - var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); - if (column != null) - { - column.Caption = replacementHeader; - } - } - - foreach (string fieldName in DataProvider.HideColumns()) - { - var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); - if (column != null) - { - column.Visible = false; - } - } - } - catch (Exception) - { - //ignore replacement - } - } - - public void SetFileDataSource(IAnalogyDataProvider dataProvider, IAnalogyOfflineDataProvider? fileDataProvider) - { - DataProvider = dataProvider; - FileDataProvider = fileDataProvider; - SetSaveButtonsVisibility(FileDataProvider != null); - if (dataProvider is IAnalogyRealTimeDataProvider) - { - RealTimeMode = true; - } - } - - - public void SetSaveButtonsVisibility(bool on) - { - if (on) - { - //disable specific saving - bBtnSaveLog.Visibility = BarItemVisibility.Always; - bBtnSaveEntireLog.Visibility = BarItemVisibility.Always; - bBtnSaveCurrentSelectionCustomFormat.Visibility = BarItemVisibility.Always; - } - else - { - bBtnSaveLog.Visibility = BarItemVisibility.Never; - bBtnSaveEntireLog.Visibility = BarItemVisibility.Never; - bBtnSaveCurrentSelectionCustomFormat.Visibility = BarItemVisibility.Never; - } - } - - public void ProcessCmdKeyFromParent(Keys keyData) - { - KeyEventArgs e = new KeyEventArgs(keyData); - if (e.Control && e.KeyCode == Keys.D) - { - btswitchMessageDetails.Checked = !btswitchMessageDetails.Checked; - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - return; - } - if (e.Control && e.KeyCode == Keys.R) - { - btswitchRefreshLog.Checked = !btswitchRefreshLog.Checked; - return; - } - if (e.Control && e.KeyCode == Keys.F) - { - rgSearchMode.SelectedIndexChanged -= rgSearchMode_SelectedIndexChanged; - ToggleSearch(); - rgSearchMode.SelectedIndex = 0; - rgSearchMode.SelectedIndexChanged += rgSearchMode_SelectedIndexChanged; - } - if (e.Alt && e.KeyCode == Keys.F) - { - rgSearchMode.SelectedIndexChanged -= rgSearchMode_SelectedIndexChanged; - ToggleFilter(); - rgSearchMode.SelectedIndex = 1; - rgSearchMode.SelectedIndexChanged += rgSearchMode_SelectedIndexChanged; - } - - - if (e.Alt && e.KeyCode == Keys.E || e.Alt && e.KeyCode == Keys.W) - { - if (e.KeyCode == Keys.W) - { - chkLstLogLevel.Items[AnalogyLogLevel.Warning.ToString()].CheckState = chkLstLogLevel.Items[AnalogyLogLevel.Warning.ToString()].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - } - else - { - switch (logLevelSelectionType) - { - case LogLevelSelectionType.Single: - chkLstLogLevel.Items["Error + Critical"].CheckState = chkLstLogLevel.Items["Error + Critical"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - break; - case LogLevelSelectionType.Multiple: - chkLstLogLevel.Items["Error"].CheckState = chkLstLogLevel.Items["Error"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - chkLstLogLevel.Items["Critical"].CheckState = chkLstLogLevel.Items["Critical"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - } - - - } - - protected override bool ProcessCmdKey(ref Message msg, Keys keyData) - { - KeyEventArgs e = new KeyEventArgs(keyData); - if (e.Control && e.KeyCode == Keys.D) - { - btswitchMessageDetails.Checked = !btswitchMessageDetails.Checked; - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - return true; - } - if (e.Control && e.KeyCode == Keys.R) - { - btswitchRefreshLog.Checked = !btswitchRefreshLog.Checked; - return true; - } - - if (e.Control && e.KeyCode == Keys.F) - { - rgSearchMode.SelectedIndexChanged -= rgSearchMode_SelectedIndexChanged; - ToggleSearch(); - rgSearchMode.SelectedIndex = 0; - rgSearchMode.SelectedIndexChanged += rgSearchMode_SelectedIndexChanged; - return true; - } - if (e.Alt && e.KeyCode == Keys.F) - { - rgSearchMode.SelectedIndexChanged -= rgSearchMode_SelectedIndexChanged; - ToggleFilter(); - rgSearchMode.SelectedIndex = 1; - rgSearchMode.SelectedIndexChanged += rgSearchMode_SelectedIndexChanged; - return true; - } - - if (e.Alt && e.KeyCode == Keys.E || e.Alt && e.KeyCode == Keys.W) - { - if (e.KeyCode == Keys.W) - { - chkLstLogLevel.Items[AnalogyLogLevel.Warning.ToString()].CheckState = chkLstLogLevel.Items[AnalogyLogLevel.Warning.ToString()].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - } - else - { - switch (logLevelSelectionType) - { - case LogLevelSelectionType.Single: - chkLstLogLevel.Items["Error + Critical"].CheckState = chkLstLogLevel.Items["Error + Critical"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - break; - case LogLevelSelectionType.Multiple: - chkLstLogLevel.Items["Error"].CheckState = chkLstLogLevel.Items["Error"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - chkLstLogLevel.Items["Critical"].CheckState = chkLstLogLevel.Items["Critical"].CheckState == CheckState.Checked - ? CheckState.Unchecked - : CheckState.Checked; - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - return true; - } - - return base.ProcessCmdKey(ref msg, keyData); - - } - - private void ToggleSearch() - { - if (Settings.BuiltInSearchPanelMode == BuiltInSearchPanelMode.Search) - { - Settings.IsBuiltInSearchPanelVisible = !Settings.IsBuiltInSearchPanelVisible; - } - else - { - Settings.BuiltInSearchPanelMode = BuiltInSearchPanelMode.Search; - Settings.IsBuiltInSearchPanelVisible = true; - logGrid.OptionsFind.Behavior = FindPanelBehavior.Search; - } - logGrid.OptionsFind.AlwaysVisible = Settings.IsBuiltInSearchPanelVisible; - } - private void ToggleFilter() - { - if (Settings.BuiltInSearchPanelMode == BuiltInSearchPanelMode.Filter) - { - Settings.IsBuiltInSearchPanelVisible = !Settings.IsBuiltInSearchPanelVisible; - } - else - { - Settings.BuiltInSearchPanelMode = BuiltInSearchPanelMode.Filter; - Settings.IsBuiltInSearchPanelVisible = true; - logGrid.OptionsFind.Behavior = FindPanelBehavior.Filter; - } - logGrid.OptionsFind.AlwaysVisible = Settings.IsBuiltInSearchPanelVisible; - } - private void LoadUISettings() - { - Utils.SetLogLevel(chkLstLogLevel); - tmrNewData.Interval = (int)(Settings.RealTimeRefreshInterval * 1000); - xtcFilters.Visible = !_simpleMode; - bBtnShare.Visibility = - FactoriesManager.Instance.Factories.SelectMany(f => f.ShareableFactories) - .SelectMany(fc => fc.Shareables).Any() - ? BarItemVisibility.Always - : BarItemVisibility.Never; - - logGrid.Columns["Level"].SummaryItem.SummaryType = SummaryItemType.Custom; - logGrid.Columns["Level"].SummaryItem.FieldName = "Level"; - logGrid.OptionsSelection.MultiSelect = true; - logGrid.OptionsSelection.MultiSelectMode = GridMultiSelectMode.RowSelect; - //logGrid.OptionsView.ShowFooter = true; - //Set up a summary on the "yourfieldname" column - //logGrid.Columns[0].SummaryItem.SummaryType = SummaryItemType.Custom; - ////logGrid.Columns[0].SummaryItem.FieldName = "id"; - - //logGrid.Columns[0].SummaryItem.DisplayFormat = "Rows: {0:n0}"; - logGrid.OptionsFind.AlwaysVisible = Settings.IsBuiltInSearchPanelVisible; - rgSearchMode.SelectedIndex = Settings.BuiltInSearchPanelMode == BuiltInSearchPanelMode.Search ? 0 : 1; - logGrid.OptionsFind.Behavior = Settings.BuiltInSearchPanelMode == BuiltInSearchPanelMode.Search - ? FindPanelBehavior.Search - : FindPanelBehavior.Filter; - gridColumnDate.SortOrder = - Settings.DefaultDescendOrder ? ColumnSortOrder.Descending : ColumnSortOrder.Ascending; - txtbInclude.MaskBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; - txtbInclude.MaskBox.AutoCompleteSource = AutoCompleteSource.CustomSource; - if (Settings.RememberLastSearches) - { - autoCompleteInclude.AddRange(Settings.LastSearchesInclude.ToArray()); - autoCompleteExclude.AddRange(Settings.LastSearchesExclude.ToArray()); - } - - txtbInclude.MaskBox.AutoCompleteCustomSource = autoCompleteInclude; - - txtbExclude.MaskBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend; - txtbExclude.MaskBox.AutoCompleteSource = AutoCompleteSource.CustomSource; - txtbExclude.MaskBox.AutoCompleteCustomSource = autoCompleteExclude; - - gridControl.ForceInitialize(); - if (File.Exists(Settings.LogGridFileName)) - { - gridControl.MainView.RestoreLayoutFromXml(Settings.LogGridFileName); - gridControlBookmarkedMessages.MainView.RestoreLayoutFromXml(Settings.LogGridFileName); - } - btswitchRefreshLog.Checked = true; - LogGrid.BestFitColumns(); - btswitchMessageDetails.Checked = Settings.ShowMessageDetails; - splitContainerMain.Collapsed = !Settings.ShowMessageDetails; - if (Settings.StartupErrorLogLevel) - { - chkLstLogLevel.Items[1].CheckState = CheckState.Checked; - } - - LogGrid.Appearance.Row.Font = new Font(LogGrid.Appearance.Row.Font.Name, Settings.FontSettings.GridFontSize); - btsAutoScrollToBottom.Checked = Settings.AutoScrollToLastMessage; - - logGrid.Columns["Date"].DisplayFormat.FormatType = FormatType.DateTime; - logGrid.Columns["Date"].DisplayFormat.FormatString = Settings.DateTimePattern; - - gridViewBookmarkedMessages.Columns["Date"].DisplayFormat.FormatType = FormatType.DateTime; - gridViewBookmarkedMessages.Columns["Date"].DisplayFormat.FormatString = Settings.DateTimePattern; - - gridViewGrouping2.Columns["Date"].DisplayFormat.FormatType = FormatType.DateTime; - gridViewGrouping2.Columns["Date"].DisplayFormat.FormatString = Settings.DateTimePattern; - - - } - - private void BookmarkModeUI() - { - if (BookmarkView) - { - bBtnRemoveBoomark.Visibility = BarItemVisibility.Always; - bBtnImport.Visibility = BarItemVisibility.Never; - } - } - - public async Task LoadExtensions() - { - var extensions = ExtensionManager.RegisteredExtensions.Where(e => e.TargetComponentId == DataProvider.Id) - .ToList(); - hasAnyInPlaceExtensions = extensions.Any(e => e is IAnalogyExtensionInPlace); - hasAnyUserControlExtensions = extensions.Any(e => e is IAnalogyExtensionUserControl); - InPlaceRegisteredExtensions = extensions.Where(e => e is IAnalogyExtensionInPlace).Cast(); - UserControlRegisteredExtensions = extensions.Where(e => e is IAnalogyExtensionUserControl).Cast(); - foreach (IAnalogyExtensionInPlace extension in InPlaceRegisteredExtensions) - { - var columns = extension.GetColumnsInfo(); - foreach (AnalogyColumnInfo column in columns) - { - var gridColumn = new GridColumn(); - gridColumn.Caption = column.ColumnCaption; - gridColumn.FieldName = column.ColumnName; - gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; - gridColumn.VisibleIndex = ExtensionManager.GetIndexForExtension(extension); - LogGrid.Columns.Add(gridColumn); - gridColumn.Visible = true; - } - - } - foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) - { - XtraTabPage page = new XtraTabPage(); - page.Text = extension.Title; - page.Controls.Add(extension.UserControl); - await extension.InitUserControl; - xtraTabControl1.TabPages.Add(page); - } - } - - private void UCLogs_DragEnter(object sender, DragEventArgs e) => - e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None; - - private async void UCLogs_DragDrop(object sender, DragEventArgs e) - { - string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); - await LoadFilesAsync(files.ToList(), false); - - } - - #region UI events - - - private void tsmiCopy_Click(object sender, EventArgs e) - { - (AnalogyLogMessage m, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (m != null) - { - Clipboard.SetText(m.Text); - } - } - - private void tsmiEmail_Click(object sender, EventArgs e) - { - - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message == null) - { - return; - } - - try - { - Process.Start($"mailto:?Subject=Analogy message&Body={message.Text}"); - } - catch (Exception ex) - { - XtraMessageBox.Show(ex.Message, @"Error opening mail client", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - - Clipboard.SetText(message.Text); - - } - - private async Task FilterHasChanged() - { - async Task RefreshData(CancellationToken token) - { - await Task.Delay(500); - if (token.IsCancellationRequested) - { - return; - } - - FilterResults(); - - } - - filterTokenSource.Cancel(); - filterTokenSource = new CancellationTokenSource(); - filterToken = filterTokenSource.Token; - await RefreshData(filterToken); - } - - private async void tsmiExclude_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message == null) - { - return; - } - - var ef = new AnalogyExcludeMessage(message); - ef.Text = "Exclude"; - if (ef.ShowDialog(this) == DialogResult.OK) - { - string exclude = ef.MessageText; - - txtbExclude.Text = txtbExclude.Text == txtbExclude.Properties.NullText ? exclude : txtbExclude.Text + "|" + exclude; - ceExcludeText.Checked = true; - await FilterHasChanged(); - } - } - - private async void tsmiInclude_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message == null) - { - return; - } - - var ef = new AnalogyExcludeMessage(message); - ef.Text = "Include"; - if (ef.ShowDialog(this) == DialogResult.OK) - { - string include = ef.MessageText; - - txtbInclude.Text = txtbInclude.Text == txtbInclude.Properties.NullText ? include : txtbInclude.Text + "|" + include; - ceIncludeText.Checked = true; - await FilterHasChanged(); - } - } - - - /// - /// Called when column filter button is clicked - /// - /// - /// - private void GridViewShowFilterPopupListBox(object sender, FilterPopupListBoxEventArgs e) - { - if (e.Column.FieldName != DataGridDateColumnName) - { - return; - } - - e.ComboBox.Items.Clear(); - - int index = 0; - - #region Create and add custom filter criteria to select the records which refer to the current date. - - // ALL - ColumnFilterInfo fInfo = new ColumnFilterInfo(); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterNone, fInfo)); - - // Today - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.Today), - GetFilterDisplayText(DateRangeFilter.Today)); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterToday, fInfo)); - - // Last 2 days - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.Last2Days), - GetFilterDisplayText(DateRangeFilter.Last2Days)); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterLast2Days, fInfo)); - // Last 3 days - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.Last3Days), - GetFilterDisplayText(DateRangeFilter.Last3Days)); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterLast3Days, fInfo)); - // Last week - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.LastWeek), - GetFilterDisplayText(DateRangeFilter.LastWeek)); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterLastWeek, fInfo)); - // Last 2 weeks - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.Last2Weeks), - GetFilterDisplayText(DateRangeFilter.Last2Weeks)); - e.ComboBox.Items.Insert(index++, new FilterItem(Utils.DateFilterLast2Weeks, fInfo)); - // Last month. - fInfo = new ColumnFilterInfo(GetFilterString(DataGridDateColumnName, DateRangeFilter.LastMonth), - GetFilterDisplayText(DateRangeFilter.LastMonth)); - e.ComboBox.Items.Insert(index, new FilterItem(Utils.DateFilterLastMonth, fInfo)); - - #endregion Create and add custom filter criteria to select the records which refer to the current date. - } - - #endregion - - #region Messages logic - - - - internal DataTable GetFilteredDataTable() - { - - // Create a data view by applying the grid view row filter - try - { - lockSlim.EnterReadLock(); - string filter = _messageData.DefaultView.RowFilter; - if (LogGrid.ActiveFilterEnabled && !string.IsNullOrEmpty(LogGrid.ActiveFilterString)) - { - CriteriaOperator op = LogGrid.ActiveFilterCriteria; //filterControl1.FilterCriteria - string filterString = CriteriaToWhereClauseHelper.GetDataSetWhere(op); - filter = string.IsNullOrEmpty(filter) ? filterString : $"{filter} and {filterString}"; - } - - return new DataView(_messageData, filter, null, DataViewRowState.CurrentRows).ToTable(); - } - finally - { - lockSlim.ExitReadLock(); - } - } - - public List GetMessages() => PagingManager.GetAllMessages(); - - private string GetFilterDisplayText(DateRangeFilter filterType) - { - string displayText = string.Empty; - switch (filterType) - { - case DateRangeFilter.None: - displayText = Utils.DateFilterNone; - break; - case DateRangeFilter.Today: - displayText = Utils.DateFilterToday; - break; - case DateRangeFilter.Last2Days: - displayText = Utils.DateFilterLast2Days; - break; - case DateRangeFilter.Last3Days: - displayText = Utils.DateFilterLast3Days; - break; - case DateRangeFilter.LastWeek: - displayText = Utils.DateFilterLastWeek; - break; - case DateRangeFilter.Last2Weeks: - displayText = Utils.DateFilterLast2Weeks; - break; - case DateRangeFilter.LastMonth: - displayText = Utils.DateFilterLastMonth; - break; - } - - return displayText; - } - - /// - /// Get the filter string for Quick filter - /// - /// - /// - /// - private string GetFilterString(string columnName, DateRangeFilter filterType) - { - DateTime startDate = DateTime.Today; - DateTime endDate = DateTime.Today; - - switch (filterType) - { - // The filter expression for the TODAY item. - case DateRangeFilter.Today: - startDate = DateTime.Today; - endDate = startDate.AddDays(1); - break; - - // The filter expression for the last 2 days item. - case DateRangeFilter.Last2Days: - endDate = DateTime.Today.AddDays(1); - startDate = DateTime.Today.AddDays(-1); - break; - - // The filter expression for the last 3 days item. - case DateRangeFilter.Last3Days: - endDate = DateTime.Today.AddDays(1); - startDate = DateTime.Today.AddDays(-2); - break; - - // The filter expression for the last week item. - case DateRangeFilter.LastWeek: - endDate = DateTime.Today.AddDays(1); - startDate = DateTime.Today.AddDays(-7); - break; - - // The filter expression for the last 2 weeks item. - case DateRangeFilter.Last2Weeks: - endDate = DateTime.Today.AddDays(1); - startDate = DateTime.Today.AddDays(-14); - break; - - // The filter expression for the last month item. - case DateRangeFilter.LastMonth: - endDate = DateTime.Today.AddDays(1); - startDate = DateTime.Today.AddMonths(-1); - break; - } - - string startDateStr = "#" + startDate.ToString("g", CultureInfo.CreateSpecificCulture("en-US")) + "#"; - string endDateStr = "#" + endDate.ToString("g", CultureInfo.CreateSpecificCulture("en-US")) + "#"; - var filter = "([" + columnName + "] >= " + startDateStr + " AND [" + columnName + "] < " + endDateStr + ")"; - return filter; - } - - - #endregion - - - public void AppendMessage(AnalogyLogMessage message, string dataSource) - { - if (message.Level == AnalogyLogLevel.None) - { - return; //ignore those messages - } - - if (Settings.IdleMode && Utils.IdleTime().TotalMinutes > Settings.IdleTimeMinutes) - { - PagingManager.IncrementTotalMissedMessages(); - return; - } - - if (ExternalWindowsCount > 0) - { - foreach (XtraFormLogGrid grid in ExternalWindows) - { - grid.AppendMessage(message, dataSource); - } - } - - - DataRow dtr = PagingManager.AppendMessage(message, dataSource); - lockSlim.EnterWriteLock(); - if (diffStartTime > DateTime.MinValue) - { - dtr["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString(); - } - - lockSlim.ExitWriteLock(); - if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && - Settings.CheckAdditionalInformation) - { - AddExtraColumnsToLogGrid(logGrid, message); - } - - lockSlim.EnterWriteLock(); - if (hasAnyInPlaceExtensions) - { - foreach (IAnalogyExtensionInPlace extension in InPlaceRegisteredExtensions) - { - var columns = extension.GetColumnsInfo(); - foreach (AnalogyColumnInfo column in columns) - { - dtr[column.ColumnName] = extension.GetValueForCellColumn(message, column.ColumnName); - } - } - } - - if (hasAnyUserControlExtensions) - { - foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions) - { - if (IsHandleCreated) - { - BeginInvoke(new MethodInvoker(() => extension.NewMessage(message))); - } - } - } - - lockSlim.ExitWriteLock(); - if (PagingManager.IsCurrentPageInView(_messageData)) - { - NewDataExist = true; - } - } - - private void AddExtraColumnsToLogGrid(GridView gridView, AnalogyLogMessage message) - { - if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && - Settings.CheckAdditionalInformation) - { - foreach (KeyValuePair info in message.AdditionalInformation) - { - if (!CurrentColumnsFields.Exists(c => c.field == info.Key)) - { - if (InvokeRequired) - { - BeginInvoke(new MethodInvoker(() => - { - if (!gridView.Columns.Select(g => g.FieldName).Contains(info.Key)) - { - gridView.Columns.Add(new GridColumn() - { Caption = info.Key, FieldName = info.Key, Name = info.Key, Visible = true }); - CurrentColumnsFields.Add((info.Key, info.Key)); - IncludeFilterCriteriaUIOptions.Add(new FilterCriteriaUIOption(info.Key, info.Key, false)); - ExcludeFilterCriteriaUIOptions.Add(new FilterCriteriaUIOption(info.Key, info.Key, false)); - } - columnAdderSync.Set(); - })); - columnAdderSync.WaitOne(); - columnAdderSync.Reset(); - } - else - { - if (!gridView.Columns.Select(g => g.FieldName).Contains(info.Key)) - { - gridView.Columns.Add(new GridColumn() { Caption = info.Key, FieldName = info.Key, Name = info.Key, Visible = true }); - CurrentColumnsFields.Add((info.Key, info.Key)); - IncludeFilterCriteriaUIOptions.Add(new FilterCriteriaUIOption(info.Key, info.Key, false)); - ExcludeFilterCriteriaUIOptions.Add(new FilterCriteriaUIOption(info.Key, info.Key, false)); - } - } - - } - } - } - } - - public void AppendMessages(List messages, string dataSource) - { - - if (Settings.IdleMode && Utils.IdleTime().TotalMinutes > Settings.IdleTimeMinutes) - { - PagingManager.IncrementTotalMissedMessages(); - return; - } - - //lockSlim.EnterWriteLock(); - if (ExternalWindowsCount > 0) - { - foreach (XtraFormLogGrid grid in ExternalWindows) - { - grid.AppendMessages(messages, dataSource); - } - } - - foreach (var (dtr, message) in PagingManager.AppendMessages(messages, dataSource)) - { - if (diffStartTime > DateTime.MinValue) - { - dtr["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString(); - } - - if (hasAnyInPlaceExtensions) - { - foreach (IAnalogyExtensionInPlace extension in InPlaceRegisteredExtensions) - { - var columns = extension.GetColumnsInfo(); - foreach (AnalogyColumnInfo column in columns) - { - dtr[column.ColumnName] = extension.GetValueForCellColumn(message, column.ColumnName); - } - } - } - - if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && - Settings.CheckAdditionalInformation) - { - AddExtraColumnsToLogGrid(logGrid, message); - } - - dtr.EndEdit(); - } - - //lockSlim.ExitWriteLock(); - if (PagingManager.IsCurrentPageInView(_messageData)) - { - NewDataExist = true; - } - - if (hasAnyUserControlExtensions) - { - foreach (var extension in UserControlRegisteredExtensions) - { - BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages))); - } - } - - } - - private void AcceptChanges(bool forceRefresh) - { - if (!IsHandleCreated) - { - return; - } - - if (_realtimeUpdate || forceRefresh) - - { - BeginInvoke(new MethodInvoker(() => - { - lockSlim.EnterWriteLock(); - try - { - // LogGrid.BeginDataUpdate(); - _messageData.AcceptChanges(); - // LogGrid.EndDataUpdate(); - } - finally - { - lockSlim.ExitWriteLock(); - } - - })); - } - } - - private void UpdatePage(DataTable page) - { - - _messageData = page; - lockSlim.EnterWriteLock(); - try - { - gridControl.DataSource = _messageData.DefaultView; - //NewDataExist = true; - //FilterHasChanged = true; - lblPageNumber.Text = $"Page {pageNumber} / {TotalPages}"; - NewDataExist = true; - FilterResults(); - } - finally - { - lockSlim.ExitWriteLock(); - } - } - - public void FilterResults(string module) - { - if (IsDisposed) - { - return; - } - - txtbModule.Text = module; - FilterResults(); - } - - - private void FilterResults() - { - if (txtbInclude.Text == txtbInclude.Properties.NullText) - { - txtbInclude.Text = string.Empty; - } - - if (txtbExclude.Text == txtbExclude.Properties.NullText) - { - txtbExclude.Text = string.Empty; - } - - if (txtbSource.Text == txtbSource.Properties.NullText) - { - txtbSource.Text = string.Empty; - } - - if (txtbModule.Text == txtbModule.Properties.NullText) - { - txtbModule.Text = string.Empty; - } - - string include = txtbInclude.Text.Trim(); - string exclude = txtbExclude.Text.Trim(); - if (!autoCompleteInclude.Contains(include)) - { - autoCompleteInclude.Add(include); - } - - if (!autoCompleteExclude.Contains(exclude)) - { - autoCompleteExclude.Add(exclude); - } - - Settings.AddNewSearchesEntryToLists(include, true); - Settings.AddNewSearchesEntryToLists(exclude, false); - _filterCriteria.NewerThan = ceNewerThanFilter.Checked ? deNewerThanFilter.DateTime : DateTime.MinValue; - _filterCriteria.OlderThan = ceOlderThanFilter.Checked ? deOlderThanFilter.DateTime : DateTime.MaxValue; - _filterCriteria.TextInclude = ceIncludeText.Checked ? txtbInclude.Text.Trim() : string.Empty; - _filterCriteria.TextExclude = ceExcludeText.Checked - ? txtbExclude.Text.Trim() + "|" + string.Join("|", _excludeMostCommon) - : string.Empty; - - Settings.IncludeText = Settings.SaveSearchFilters ? txtbInclude.Text : string.Empty; - Settings.ExcludeText = Settings.SaveSearchFilters ? txtbExclude.Text : string.Empty; - - _filterCriteria.Levels = null; - switch (logLevelSelectionType) - { - case LogLevelSelectionType.Single: - if (chkLstLogLevel.Items[0].CheckState == CheckState.Checked) - { - _filterCriteria.Levels = new[] - {AnalogyLogLevel.Trace, AnalogyLogLevel.Unknown}; - } - - if (chkLstLogLevel.Items[1].CheckState == CheckState.Checked) - { - _filterCriteria.Levels = new[] - { - AnalogyLogLevel.Error, AnalogyLogLevel.Critical, AnalogyLogLevel.Unknown - }; - } - else if (chkLstLogLevel.Items[2].CheckState == CheckState.Checked) - { - _filterCriteria.Levels = new[] - {AnalogyLogLevel.Warning, AnalogyLogLevel.Unknown}; - } - else if (chkLstLogLevel.Items[3].CheckState == CheckState.Checked) - { - _filterCriteria.Levels = new[] - {AnalogyLogLevel.Debug, AnalogyLogLevel.Unknown}; - } - else if (chkLstLogLevel.Items[4].CheckState == CheckState.Checked) - { - _filterCriteria.Levels = new[] - {AnalogyLogLevel.Verbose, AnalogyLogLevel.Unknown}; - } - - break; - case LogLevelSelectionType.Multiple: - _filterCriteria.Levels = chkLstLogLevel.CheckedItems.Cast() - .Select(level => (AnalogyLogLevel)Enum.Parse(typeof(AnalogyLogLevel), (string)level.Value)) - .ToArray(); - break; - default: - throw new ArgumentOutOfRangeException(); - } - - - if (ceSources.Checked && !string.IsNullOrEmpty(txtbSource.Text)) - { - var items = txtbSource.Text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) - .Select(v => v.Trim()).ToList(); - var includeItems = items.Where(i => !i.StartsWith("-")); - var excludeItems = items.Where(i => i.StartsWith("-") && i.Length > 1) - .Select(i => i.Substring(1, i.Length - 1)); - - _filterCriteria.Sources = includeItems.Select(val => val.Trim()).ToArray(); - _filterCriteria.ExcludedSources = excludeItems.Select(val => val.Trim()).ToArray(); - } - else - { - _filterCriteria.Sources = null; - _filterCriteria.ExcludedSources = null; - } - - Settings.SourceText = Settings.SaveSearchFilters ? txtbSource.Text : string.Empty; - - if (ceModulesProcess.Checked && !string.IsNullOrEmpty(txtbModule.Text)) - { - - var items = txtbModule.Text.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) - .Select(v => v.Trim()).ToList(); - var includeItems = items.Where(i => !i.StartsWith("-")); - var excludeItems = items.Where(i => i.StartsWith("-") && i.Length > 1) - .Select(i => i.Substring(1, i.Length - 1)); - - _filterCriteria.Modules = includeItems.Select(val => val.Trim()).ToArray(); - _filterCriteria.ExcludedModules = excludeItems.Select(val => val.Trim()).ToArray(); - } - else - { - _filterCriteria.Modules = null; - _filterCriteria.ExcludedModules = null; - } - - Settings.ModuleText = Settings.SaveSearchFilters ? txtbModule.Text : string.Empty; - string filter = _filterCriteria.GetSqlExpression(false); - lockSlim.EnterWriteLock(); - if (LogGrid.ActiveFilterEnabled && !string.IsNullOrEmpty(LogGrid.ActiveFilterString)) - { - CriteriaOperator op = LogGrid.ActiveFilterCriteria; - string filterString = CriteriaToWhereClauseHelper.GetDataSetWhere(op); - filter = $"{filter} and {filterString}"; - } - - try - { - _messageData.DefaultView.RowFilter = filter; - - if (ApplyGoToSelectedMessageAfterFirstClick && Settings.TrackActiveMessage) - { - var location = LocateByValue(0, gridColumnObject, SelectedMassage); - if (location >= 0) - { - LogGrid.MakeRowVisible(location); - } - } - - } - finally - { - lockSlim.ExitWriteLock(); - } - - - - } - - public virtual int LocateByValue(int startRowHandle, GridColumn column, AnalogyLogMessage val) - { - if (!LogGrid.DataController.IsReady || val == null) - { - return int.MinValue; - } - - startRowHandle = Math.Max(0, startRowHandle); - if (LogGrid.IsServerMode) - { - if (startRowHandle != 0) - { - throw new ArgumentException("Argument must be '0' in server mode.", nameof(startRowHandle)); - } - } - - try - { - if (LogGrid.IsServerMode) - { - return LogGrid.DataController.FindRowByValue(column.FieldName, val, null); - } - - for (int rowHandle = startRowHandle; - rowHandle < LogGrid.DataController.VisibleListSourceRowCount; - ++rowHandle) - { - object rowCellValue = LogGrid.GetRowCellValue(rowHandle, column.Caption); - if (Equals(val, rowCellValue)) - { - return rowHandle; - } - } - } - catch - { - //do nothing - } - - return int.MinValue; - } - - public async Task LoadFilesAsync(List fileNames, bool clearLogBeforeLoading, - bool isReloadSoForceNoCaching = false) - { - LoadedFiles = fileNames; - bbtnReload.Visibility = BarItemVisibility.Always; - CancellationTokenSource = new CancellationTokenSource(); - CancellationToken token = CancellationTokenSource.Token; - if (clearLogBeforeLoading) - { - ClearLogs(false); - } - - sBtnCancel.Visible = true; - progressBar1.Value = 0; - progressBar1.Maximum = fileNames.Count; - progressBar1.Style = fileNames.Count > 1 ? ProgressBarStyle.Continuous : ProgressBarStyle.Marquee; - fileLoadingCount = fileNames.Count; - progressBar1.Visible = true; - int processed = 0; - foreach (string filename in fileNames) - { - if (!File.Exists(filename)) - { - AnalogyLogMessage m = new AnalogyLogMessage($"File {filename} does not exist", - AnalogyLogLevel.Critical, AnalogyLogClass.General, "Analogy", "None"); - AppendMessage(m, "Analogy"); - continue; - } - - Text = @"File: " + filename; - await FileProcessor.Process(FileDataProvider, filename, token, isReloadSoForceNoCaching); - processed++; - ProgressReporter.Report(new AnalogyProgressReport("Processed", processed, fileNames.Count, filename)); - if (token.IsCancellationRequested) - { - progressBar1.Visible = false; - break; - } - } - - sBtnCancel.Visible = false; - } - - private void ClearLogs(bool raiseEvent) - { - - lockSlim.EnterWriteLock(); - - if (raiseEvent) - { - OnHistoryCleared?.Invoke(this, new AnalogyClearedHistoryEventArgs(PagingManager.GetAllMessages())); - } - - PagingManager.ClearLogs(); - pageNumber = 1; - UpdatePage(PagingManager.FirstPage()); - AcceptChanges(true); - rtxtContent.Text = string.Empty; - if (BookmarkView) - { - BookmarkPersistManager.Instance.ClearBookmarks(); - } - - lockSlim.ExitWriteLock(); - - } - - - private void LoadTextBoxes(AnalogyLogMessage m) - { - if (InvokeRequired) - { - BeginInvoke(new MethodInvoker(() => rtxtContent.Text = m.Text)); - } - else - { - rtxtContent.Text = m.Text; - } - - } - - #region Log grid Event Handlers - - - private void logGrid_Click(object sender, EventArgs e) - { - if (!(e is DXMouseEventArgs args)) - { - return; - } - - GridHitInfo hi = LogGrid.CalcHitInfo(new Point(args.X, args.Y)); - - if (hi.RowHandle < 0) - { - return; - } - - int[] selRows = LogGrid.GetSelectedRows(); - - if (selRows == null || selRows.Length != 1) - { - return; - } - - int rownum = selRows.First(); - SelectedMassage = (AnalogyLogMessage)LogGrid.GetRowCellValue(rownum, "Object"); - //todo - //if (Settings.TrackActiveMessage) - //{ - // ApplyGoToSelectedMessageAfterFirstClick = true; - //} - //else - //{ - // logGrid.FocusInvalidRow(); - //} - LoadTextBoxes(SelectedMassage); - if (hasAnyInPlaceExtensions) - { - var rowHandle = hi.RowHandle; - var column = hi.Column; - if (column == null) - { - return; - } - - foreach (var extension in InPlaceRegisteredExtensions) - { - var columns = extension.GetColumnsInfo(); - foreach (AnalogyColumnInfo exColumn in columns) - { - if (column.FieldName.Equals(exColumn.ColumnName) && - column.Caption.Equals(exColumn.ColumnCaption)) - { - var cellValue = LogGrid.GetRowCellValue(rowHandle, exColumn.ColumnName); - AnalogyCellClickedEventArgs argsForEx = - new AnalogyCellClickedEventArgs(exColumn.ColumnName, cellValue, SelectedMassage); - extension.CellClicked(sender, argsForEx); - } - - } - } - - - } - - } - private void LogGrid_DoubleClick(object sender, EventArgs e) - { - if (!(e is DXMouseEventArgs args)) - { - return; - } - GridHitInfo hi = LogGrid.CalcHitInfo(new Point(args.X, args.Y)); - - if (hi.RowHandle < 0) - { - return; - } - string dataSource = (string)LogGrid.GetRowCellValue(hi.RowHandle, "DataProvider") ?? string.Empty; - AnalogyLogMessage? message = LogGrid.GetRowCellValue(hi.RowHandle, "Object") as AnalogyLogMessage; - if (message == null) - { - return; - } - - FormMessageDetails details = new FormMessageDetails(message, Messages, dataSource); - details.Show(this); - //CreateBookmark(); - - } - private void gridControl_Click(object sender, EventArgs e) - { - if (btsAutoScrollToBottom.Checked) - { - btsAutoScrollToBottom.Checked = false; - } - } - private void LogGridView_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - - - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message == null) - { - return; - } - - LoadTextBoxes(message); - - } - - private void LogGrid_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (char)13) - { - (AnalogyLogMessage? message, string dataSource) = GetMessageFromSelectedFocusedRowInGrid(); - if (message == null) - { - return; - } - - FormMessageDetails details = new FormMessageDetails(message, Messages, dataSource); - details.Show(this); - } - } - - private void LogGridView_RowStyle(object sender, RowStyleEventArgs e) - { - if (!Settings.ColorSettings.EnableMessagesColors || !(sender is GridView view) || e.RowHandle < 0) - { - return; - } - - IAnalogyLogMessage message = (AnalogyLogMessage)view.GetRowCellValue(e.RowHandle, view.Columns["Object"]); - if (message == null) - { - return; - } - - if (!Settings.ColorSettings.OverrideLogLevelColor && Settings.ColorSettings.EnableNewMessagesColor && - message.Date > reloadDateTime) - { - e.Appearance.BackColor = Settings.ColorSettings.NewMessagesColor.BackgroundColor; - e.Appearance.ForeColor = Settings.ColorSettings.NewMessagesColor.TextColor; - } - - var (backgroundColorLevel, textColorLevel) = Settings.ColorSettings.GetColorForLogLevel(message.Level); - e.Appearance.BackColor = backgroundColorLevel; - e.Appearance.ForeColor = textColorLevel; - - if (Settings.ColorSettings.OverrideLogLevelColor && Settings.ColorSettings.EnableNewMessagesColor && - message.Date > reloadDateTime) - { - var (backgroundColor, textColor) = Settings.ColorSettings.NewMessagesColor; - e.Appearance.BackColor = backgroundColor; - e.Appearance.ForeColor = textColor; - } - string text = view.GetRowCellDisplayText(e.RowHandle, view.Columns["Text"]); - foreach (PreDefineHighlight preDefineHighlight in Settings.PreDefinedQueries.Highlights) - { - if (FilterCriteriaObject.Match(text, preDefineHighlight.Text, - preDefineHighlight.PreDefinedQueryType)) - { - e.Appearance.BackColor = preDefineHighlight.Color; - } - } - - if (DataProvider.UseCustomColors) - { - IAnalogyLogMessage m = - (AnalogyLogMessage)view.GetRowCellValue(e.RowHandle, view.Columns["Object"]); - if (m == null) - { - return; - } - - var colors = DataProvider.GetColorForMessage(m); - if (colors.backgroundColor != Color.Empty) - { - e.Appearance.BackColor = colors.backgroundColor; - } - - if (colors.foregroundColor != Color.Empty) - { - e.Appearance.ForeColor = colors.foregroundColor; - } - } - - if (chkbHighlight.Checked && - FilterCriteriaObject.Match(text, txtbHighlight.Text, PreDefinedQueryType.Contains)) - { - var (backgroundColorHighlight, textColorHighlight) = Settings.ColorSettings.GetHighlightColor(); - e.Appearance.BackColor = backgroundColorHighlight; - e.Appearance.ForeColor = textColorHighlight; - } - } - - private void LogGrid_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e) - { - if (!(e.RowHandle >= 0) || !e.Info.IsRowIndicator || !(sender is GridView view)) - { - return; - } - - AnalogyLogMessage msg = (AnalogyLogMessage)view.GetRowCellValue(e.RowHandle, "Object"); - if (msg == null) - { - return; - } - - Image img = imageList.Images[7]; - switch (msg.Level) - { - case AnalogyLogLevel.Critical: - case AnalogyLogLevel.Error: - img = imageList.Images[0]; - break; - case AnalogyLogLevel.Warning: - img = imageList.Images[1]; - break; - case AnalogyLogLevel.Trace: - case AnalogyLogLevel.Information: - img = imageList.Images[7]; - break; - case AnalogyLogLevel.Verbose: - img = imageList.Images[2]; - break; - case AnalogyLogLevel.Debug: - img = imageList.Images[6]; - break; - case AnalogyLogLevel.None: - break; - case AnalogyLogLevel.Analogy: - img = imageList.Images[8]; - break; - case AnalogyLogLevel.Unknown: - img = imageList.Images[9]; - break; - default: - throw new ArgumentOutOfRangeException(); - } - - Rectangle r = e.Bounds; - int x = r.X + (r.Width - imageList.ImageSize.Width) / 2; - int y = r.Y + (r.Height - imageList.ImageSize.Height) / 2; - e.Cache.DrawImage(img, x, y); - e.Handled = true; - } - - - /// - /// Set custom column display text - /// - /// - /// - private void LogGridViewCustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) - { - if (e.GroupRowHandle == BaseListSourceDataController.FilterRow && - e.Column.FieldName == DataGridDateColumnName) - { - e.DisplayText = e.Column.FilterInfo.DisplayText; - } - } - - #endregion - - - - private void tmrNewData_Tick(object sender, EventArgs e) - { - if (NewDataExist) - { - NewDataExist = false; - AcceptChanges(false); - } - - } - - private void gridControlBookmarkedMessages_DoubleClick(object sender, EventArgs e) - { - if (!(e is DXMouseEventArgs args)) - { - return; - } - - GoToMessage(); - - } - - - private void tsmiBookmark_Click(object sender, EventArgs e) - { - CreateBookmark(false); - } - - private void CreateBookmark(bool persists) - { - - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - int[] selRows = LogGrid.GetSelectedRows(); - if (message == null) - { - return; - } - - lockSlim.EnterWriteLock(); - string dataSource = (string)LogGrid.GetRowCellValue(selRows.First(), "DataProvider") ?? string.Empty; - AddExtraColumnsIfNeededToTable(_bookmarkedMessages, gridViewBookmarkedMessages, message); - DataRow dtr = Utils.CreateRow(_bookmarkedMessages, message, dataSource, - Settings.CheckAdditionalInformation); - if (diffStartTime > DateTime.MinValue) - { - dtr["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString(); - } - - _bookmarkedMessages.Rows.Add(dtr); - _bookmarkedMessages.AcceptChanges(); - btswitchMessageDetails.Checked = true; - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - splitContainerMain.Collapsed = false; - tcBottom.SelectedTabPage = xtpBookmarks; - if (persists) - { - BookmarkPersistManager.Instance.AddBookmarkedMessage(message, dataSource); - } - - lockSlim.ExitWriteLock(); - } - - private void AddExtraColumnsIfNeededToTable(DataTable table, GridView view, AnalogyLogMessage message) - { - if (message.AdditionalInformation != null && message.AdditionalInformation.Any() && - Settings.CheckAdditionalInformation) - { - foreach (KeyValuePair info in message.AdditionalInformation) - { - if (!table.Columns.Contains(info.Key)) - { - - if (!InvokeRequired) - { - if (!view.Columns.Select(g => g.FieldName).Contains(info.Key)) - { - view.Columns.Add(new GridColumn() { Caption = info.Key, FieldName = info.Key, Name = info.Key, Visible = true }); - table.Columns.Add(info.Key); - } - - } - else - { - BeginInvoke(new MethodInvoker(() => - { - if (!view.Columns.Select(g => g.FieldName).Contains(info.Key)) - { - view.Columns.Add(new GridColumn() - { Caption = info.Key, FieldName = info.Key, Name = info.Key, Visible = true }); - table.Columns.Add(info.Key); - } - columnAdderSync.Set(); - })); - columnAdderSync.WaitOne(); - columnAdderSync.Reset(); - - } - } - } - } - - - } - - private void GoToMessage() - { - int[] selRows = gridViewBookmarkedMessages.GetSelectedRows(); - if (selRows == null || selRows.Length != 1) - { - return; - } - - int rownum = selRows.First(); - var currentRow = (DataRowView)gridViewBookmarkedMessages.GetRow(rownum); - try - { - var LogMessage = currentRow["Object"] as AnalogyLogMessage; - var location = LocateByValue(0, gridColumnObject, LogMessage); - if (location >= 0) - { - LogGrid.FocusedRowHandle = location; - } - else - { - XtraMessageBox.Show("Cannot go to message", "Message not found", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - } - catch (Exception) - { - - XtraMessageBox.Show("Cannot go to message", "Message not found", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - } - - - - private async void chkbHighlight_CheckedChanged(object sender, EventArgs e) - { - await FilterHasChanged(); - } - - private async void txtbHighlight_KeyUp(object sender, KeyEventArgs e) - { - chkbHighlight.Checked = !string.IsNullOrEmpty(txtbHighlight.Text); - HighlightRows.Clear(); - await FilterHasChanged(); - } - - private void tsmiExcludeSource_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (!string.IsNullOrEmpty(message?.Source)) - { - txtbSource.Text = txtbSource.Text == txtbSource.Properties.NullText ? "-" + message.Source : txtbSource.Text + ", -" + message.Source; - } - } - - private void tsmiExcludeModule_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (!string.IsNullOrEmpty(message?.Module)) - { - txtbModule.Text = txtbModule.Text == txtbModule.Properties.NullText ? "-" + message.Module : txtbModule.Text + ",-" + message.Module; - } - } - - - private void tsmiTimeDiff_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message != null) - { - diffStartTime = message.Date; - UpdateTimes(); - } - - void UpdateTimes() - { - gridColumnTimeDiff.Visible = true; - gridColumnTimeDiff.VisibleIndex = 2; - - lockSlim.EnterWriteLock(); - _messageData.BeginLoadData(); - foreach (DataRow row in _messageData.Rows) - { - AnalogyLogMessage message = (AnalogyLogMessage)row["Object"]; - //row["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString("d\\.hh\\:mm\\:ss\\.fff"); - row["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString(); - } - - _messageData.EndLoadData(); - AcceptChanges(true); - gridControl.RefreshDataSource(); - lockSlim.ExitWriteLock(); - } - } - - - private void btswitchExpand_CheckedChanged(object sender, ItemClickEventArgs e) - { - Settings.ShowMessageDetails = btswitchMessageDetails.Checked; - splitContainerMain.Collapsed = !btswitchMessageDetails.Checked; - } - - private void btswitchRefreshLog_CheckedChanged(object sender, ItemClickEventArgs e) - { - _realtimeUpdate = btswitchRefreshLog.Checked; - AcceptChanges(false); - //btswitchRefreshLog.Caption = _realtimeUpdate ? "Refresh log:" : "Paused:"; - } - - private void bBtnSaveLog_ItemClick(object sender, ItemClickEventArgs e) - { - var messages = Messages; - SaveMessagesToLog(FileDataProvider, messages); - } - - private async void SaveMessagesToLog(IAnalogyOfflineDataProvider fileHandler, List messages) - { - - if (fileHandler != null && fileHandler.CanSaveToLogFile) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - saveFileDialog.Filter = fileHandler.FileSaveDialogFilters; - - if (saveFileDialog.ShowDialog(this) == DialogResult.OK) - { - try - { - await fileHandler.SaveAsync(messages, saveFileDialog.FileName); - } - catch (Exception e) - { - XtraMessageBox.Show(e.Message, @"Error Saving file", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - - } - } - else - { - if (XtraMessageBox.Show( - "Current Data Source does not support Save Operation" + Environment.NewLine + - "Do you want to Save in Analogy Json Format?", @"Save not Supported", MessageBoxButtons.YesNo, - MessageBoxIcon.Error) == DialogResult.Yes) - { - SaveMessagesToLog(AnalogyOfflineDataProvider, messages); - } - else - { - XtraMessageBox.Show("Operation Aborted", @"Save file", MessageBoxButtons.OK, - MessageBoxIcon.Information); - } - } - - } - - private async void bBtnImport_ItemClick(object sender, ItemClickEventArgs e) - { - - OpenFileDialog openFileDialog1 = new OpenFileDialog(); - openFileDialog1.Filter = - "Plain XML log file (*.xml)|*.xml|JSON file (*.json)|*.json|NLOG file (*.nlog)|*.nlog|Zipped XML log file (*.zip)|*.zip|ETW log file (*.etl)|*.etl"; - openFileDialog1.Title = @"Import file to current view"; - openFileDialog1.Multiselect = false; - if (openFileDialog1.ShowDialog() == DialogResult.OK) - { - try - { - await LoadFilesAsync(new List { openFileDialog1.FileName }, false); - } - catch (Exception exception) - { - XtraMessageBox.Show(exception.Message, @"Error Opening file", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - - } - } - - private void bBtnClearLog_ItemClick(object sender, ItemClickEventArgs e) - { - ClearLogs(true); - } - - private async void sBtnMostCommon_Click(object sender, EventArgs e) - { - List items; - - lockSlim.EnterReadLock(); - items = Messages.Select(r => r.Text).ToList(); - lockSlim.ExitReadLock(); - - AnalogyExclude ef = new AnalogyExclude(items, _excludeMostCommon); - if (ef.ShowDialog(this) == DialogResult.OK) - { - _excludeMostCommon = AnalogyExclude.GlobalExclusion; - ceExcludeText.Checked = true; - await FilterHasChanged(); - } - } - - private async void chkLstLogLevel_SelectedIndexChanged(object sender, EventArgs e) - { - await FilterHasChanged(); - } - - - private async void chkLstLogLevel_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e) - { - await FilterHasChanged(); - } - - private void sBtnLength_Click(object sender, EventArgs e) - { - ApplyGrouping(); - } - - private void sBtnGroup_Click(object sender, EventArgs e) - { - ApplyGrouping(); - - } - - private void ApplyGrouping() - { - if (rbGroupByTextLength.Checked) - { - gCtrlGrouping.DataSource = null; - List> grouped = Messages - .GroupBy(s => s.Text.Substring(0, Math.Min(s.Text.Length, (int)nudGroupBychars.Value))) - .OrderByDescending(i => i.Count()).ToList(); - groupingByChars = grouped.ToDictionary(g => g.Key, g => g.ToList()); - gCtrlGrouping.DataSource = groupingByChars.Keys; - } - else // group by text - { - gCtrlGrouping.DataSource = null; - List> grouped = Messages.Where(m => m.Text.Contains(txtbGroupByChars.Text, StringComparison.CurrentCultureIgnoreCase)) - .GroupBy(s => s.Text) - .OrderByDescending(i => i.Count()).ToList(); - groupingByChars = grouped.ToDictionary(g => g.Key, g => g.ToList()); - gCtrlGrouping.DataSource = groupingByChars.Keys; - } - } - - - private void bBtnCopyButtom_ItemClick(object sender, ItemClickEventArgs e) - { - Clipboard.SetText(rtxtContent.Text); - } - - private void bBtnButtomExpand_ItemClick(object sender, ItemClickEventArgs e) - { - } - - private void barToggleSwitchItem1_CheckedChanged(object sender, ItemClickEventArgs e) - { - - splitContainerMain.Collapsed = !btSwitchExpandButtomMessage.Checked; - - } - - private void bBtnGoToMessage_ItemClick(object sender, ItemClickEventArgs e) - { - GoToMessage(); - } - - private void barButtonItem4_ItemClick(object sender, ItemClickEventArgs e) - { - _bookmarkedMessages.Clear(); - } - - private void bBtnopyBookmarked_ItemClick(object sender, ItemClickEventArgs e) - { - int[] selRows = gridViewBookmarkedMessages.GetSelectedRows(); - - if (selRows != null && selRows.Length == 1) - { - var message = (AnalogyLogMessage)gridViewBookmarkedMessages.GetRowCellValue(selRows.First(), "Object"); - Clipboard.SetText(message.Text); - } - } - - private void tsmiSaveLayout_Click(object sender, EventArgs e) - { - SaveGridLayout(); - } - - private void SaveGridLayout() - { - try - { - gridControl.MainView.SaveLayoutToXml(Settings.LogGridFileName); - } - catch (Exception e) - { - AnalogyLogger.Instance.LogException($"Error saving setting: {e.Message}", e, "Analogy"); - XtraMessageBox.Show(e.Message, $"Error Saving layout file: {e.Message}", MessageBoxButtons.OK, MessageBoxIcon.Error); - - } - } - private void tsmiBookmarkPersist_Click(object sender, EventArgs e) - { - CreateBookmark(true); - } - - private void tsmiRemoveBookmark_Click(object sender, EventArgs e) - { - RemoveBookmark(); - } - - private void bBtnRemoveBoomark_ItemClick(object sender, ItemClickEventArgs e) - { - RemoveBookmark(); - } - - private void RemoveBookmark() - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (message != null) - { - BookmarkPersistManager.Instance.RemoveBookmark(message); - } - } - - public void SetBookmarkMode() - { - FactoryContainer analogy = FactoriesManager.Instance.GetBuiltInFactoryContainer(AnalogyBuiltInFactory.AnalogyGuid); - var provider = analogy.DataProvidersFactories[0].DataProviders.First(); - SetFileDataSource(provider, null); - BookmarkView = true; - BookmarkModeUI(); - } - - public void RemoveMessage(AnalogyLogMessage msgMessage) - { - var row = _messageData.AsEnumerable().SingleOrDefault(r => r["Object"] == msgMessage); - if (row != null) - { - _messageData.Rows.Remove(row); - } - } - - private (AnalogyLogMessage? message, string dataProvider) GetMessageFromSelectedFocusedRowInGrid() - { - var row = LogGrid.GetFocusedRow(); - if (row == null) - { - return (null, string.Empty); - } - - string dataSource = (string)LogGrid.GetFocusedRowCellValue("DataProvider"); - AnalogyLogMessage message = (AnalogyLogMessage)LogGrid.GetFocusedRowCellValue("Object"); - if (message.Module == null) - { - message.Module = string.Empty; - } - - if (message.Source == null) - { - message.Source = string.Empty; - } - - if (message.Text == null) - { - message.Text = string.Empty; - } - - return (message, dataSource); - - } - private List GetMessagesFromSelectedRowInGrid(out string dataProvider) - { - dataProvider = string.Empty; - var selectedRowHandles = logGrid.GetSelectedRows(); - List messages = new List(); - for (int i = 0; i < selectedRowHandles.Length; i++) - { - - if (selectedRowHandles[i] >= 0) - { - dataProvider = (string)LogGrid.GetRowCellValue(selectedRowHandles[i], "DataProvider"); - AnalogyLogMessage message = (AnalogyLogMessage)LogGrid.GetRowCellValue(selectedRowHandles[i], "Object"); - messages.Add(message); - } - } - - return messages; - - } - private void gridViewGrouping_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) - { - if (e.FocusedRowHandle < 0) - { - return; - } - - var grouped = Utils.DataTableConstructor(); - string key = - (string)gridViewGrouping.GetRowCellValue(e.FocusedRowHandle, gridViewGrouping.Columns.First()); - var messages = groupingByChars[key]; - foreach (var message in messages) - { - AddExtraColumnsIfNeededToTable(grouped, gridViewGrouping2, message); - DataRow dtr = Utils.CreateRow(grouped, message, "", Settings.CheckAdditionalInformation); - if (diffStartTime > DateTime.MinValue) - { - dtr["TimeDiff"] = message.Date.Subtract(diffStartTime).ToString(); - } - - grouped.Rows.Add(dtr); - - } - - grouped.AcceptChanges(); - gridControlMessageGrouping.DataSource = grouped; - } - - private void sBtnCancel_Click(object sender, EventArgs e) - { - CancellationTokenSource.Cancel(false); - Interlocked.Exchange(ref fileLoadingCount, 0); - - CancellationTokenSource = new CancellationTokenSource(); - sBtnCancel.Visible = false; - } - - private void tsmiCopyMessages_Click(object sender, EventArgs e) - { - var messages = Messages; - string all = string.Join(Environment.NewLine, messages.Select(m => $"{m.Date.ToString()}: {m.Text}")); - Clipboard.SetText(all); - } - - private void bBtnCopyAllBookmarks_ItemClick(object sender, ItemClickEventArgs e) - { - var messages = BookmarkedMessages; - if (!messages.Any()) - { - return; - } - - string all = string.Join(Environment.NewLine, messages.Select(m => $"{m.Date.ToString()}: {m.Text}")); - Clipboard.SetText(all); - } - - private void btsAutoScrollToBottom_CheckedChanged(object sender, ItemClickEventArgs e) - { - Settings.AutoScrollToLastMessage = btsAutoScrollToBottom.Checked; - } - - private void sbtnPageFirst_Click(object sender, EventArgs e) - { - pageNumber = 1; - UpdatePage(PagingManager.FirstPage()); - } - - private void sbtnPagePrevious_Click(object sender, EventArgs e) - { - if (pageNumber == 1) - { - return; - } - - pageNumber--; - UpdatePage(PagingManager.PrevPage().Data); - } - - private void sBtnPageNext_Click(object sender, EventArgs e) - { - if (pageNumber == TotalPages) - { - return; - } - - pageNumber++; - UpdatePage(PagingManager.NextPage().Data); - } - - private void sBtnLastPage_Click(object sender, EventArgs e) - { - pageNumber = TotalPages; - UpdatePage(PagingManager.LastPage()); - } - - private void bBtnExportExcel_ItemClick(object sender, ItemClickEventArgs e) - { - - - var count = LogGrid.RowCount; - - SaveFileDialog saveFileDialog = new SaveFileDialog(); - saveFileDialog.Filter = "Excel file XLSX (*.xlsx)|*.xlsx|Excel file XLS (*.XLS)|*.xls"; - - if (saveFileDialog.ShowDialog(this) == DialogResult.OK) - { - if (saveFileDialog.FilterIndex == 1) - { - if (count > 1048576) - { - XtraMessageBox.Show($"XLSX files are limited to 1,048,576 rows (and 16,384 columns). You have {count} rows", "Export Aborted"); - } - else - { - LogGrid.ExportToXlsx(saveFileDialog.FileName); - OpenFolder(saveFileDialog.FileName); - } - } - if (saveFileDialog.FilterIndex == 2) - { - if (count > 65536) - { - XtraMessageBox.Show($"XLS files are limited to 65,536 rows (and 256 columns). You have {count} rows", "Export Aborted"); - } - else - { - LogGrid.ExportToXls(saveFileDialog.FileName); - OpenFolder(saveFileDialog.FileName); - } - } - } - } - - private void bBtnExportCSV_ItemClick(object sender, ItemClickEventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - saveFileDialog.Filter = "Comma Separated File (*.csv)|*.csv"; - - if (saveFileDialog.ShowDialog(this) == DialogResult.OK) - { - LogGrid.ExportToCsv(saveFileDialog.FileName); - OpenFolder(saveFileDialog.FileName); - } - } - - private void bBtnExportHtml_ItemClick(object sender, ItemClickEventArgs e) - { - SaveFileDialog saveFileDialog = new SaveFileDialog(); - saveFileDialog.Filter = "HTML File (*.html)|*.html"; - - if (saveFileDialog.ShowDialog(this) == DialogResult.OK) - { - HtmlExportOptions op = new HtmlExportOptions(); - op.ExportMode = HtmlExportMode.SingleFile; - LogGrid.ExportToHtml(saveFileDialog.FileName, op); - OpenFolder(saveFileDialog.FileName); - } - } - private void OpenFolder(string filename) - { - try - { - Process.Start("explorer.exe", "/select, \"" + filename + "\""); - } - catch (Exception exception) - { - MessageBox.Show(exception.Message, @"Error Opening file location", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - } - private void bBtnUndockView_ItemClick(object sender, ItemClickEventArgs e) - { - var msg = Messages; - if (!msg.Any()) - { - return; - } - - var source = GetFilteredDataTable().Rows[0]?["DataProvider"]?.ToString(); - if (source == null) - { - return; - } - - XtraFormLogGrid grid = new XtraFormLogGrid(msg, source, DataProvider, FileDataProvider); - lockExternalWindowsObject.EnterWriteLock(); - _externalWindows.Add(grid); - Interlocked.Increment(ref ExternalWindowsCount); - lockExternalWindowsObject.ExitWriteLock(); - grid.FormClosing += (s, arg) => - { - lockExternalWindowsObject.EnterWriteLock(); - Interlocked.Decrement(ref ExternalWindowsCount); - _externalWindows.Remove(grid); - lockExternalWindowsObject.ExitWriteLock(); - }; - grid.Show(this); - } - - private void bBtnSaveEntireLog_ItemClick(object sender, ItemClickEventArgs e) - { - var messages = PagingManager.GetAllMessages(); - SaveMessagesToLog(FileDataProvider, messages); - } - - private void logGrid_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e) - { - int row = e.FocusedRowHandle; - - if (row < 0) - { - return; - } - - - SelectedMassage = (AnalogyLogMessage)LogGrid.GetRowCellValue(e.FocusedRowHandle, "Object"); - LoadTextBoxes(SelectedMassage); - string dataProvider = (string)LogGrid.GetRowCellValue(e.FocusedRowHandle, "DataProvider"); - if (!LoadingInProgress) - { - OnFocusedRowChanged?.Invoke(this, (dataProvider, SelectedMassage)); - } - } - - private void tsmiIncreaseFont_Click(object sender, EventArgs e) - { - var fontSize = Settings.FontSettings.GridFontSize = LogGrid.Appearance.Row.Font.Size + 2; - LogGrid.Appearance.Row.Font = new Font(LogGrid.Appearance.Row.Font.Name, fontSize); - gridViewBookmarkedMessages.Appearance.Row.Font = new Font(LogGrid.Appearance.Row.Font.Name, fontSize); - SaveGridLayout(); - } - - private void tsmiDecreaseFont_Click(object sender, EventArgs e) - { - if (LogGrid.Appearance.Row.Font.Size < 5) - { - return; - } - - { - var fontSize = Settings.FontSettings.GridFontSize = LogGrid.Appearance.Row.Font.Size - 2; - LogGrid.Appearance.Row.Font = new Font(LogGrid.Appearance.Row.Font.Name, fontSize); - gridViewBookmarkedMessages.Appearance.Row.Font = new Font(LogGrid.Appearance.Row.Font.Name, fontSize); - SaveGridLayout(); - } - } - - private void tsmiClearLog_Click(object sender, EventArgs e) - { - ClearLogs(true); - } - - private void tsmiREmoveAllPreviousMessages_Click(object sender, EventArgs e) - { - (AnalogyLogMessage current, _) = GetMessageFromSelectedFocusedRowInGrid(); - if (current == null) - { - return; - } - - lockSlim.EnterWriteLock(); - while (_messageData.Rows.Count > 0) - { - if (!Equals(_messageData.Rows[0]["Object"], current)) - { - _messageData.Rows.RemoveAt(0); - } - else - { - break; - } - } - lockSlim.ExitWriteLock(); - //RefreshUIMessagesCount(); - - } - - private void bBtnDataVisualizer_ItemClick(object sender, ItemClickEventArgs e) - { - DataVisualizerForm sv = new DataVisualizerForm(() => Messages); - sv.Show(this); - } - - private void bbiScreenshot_ItemClick(object sender, ItemClickEventArgs e) - { - Bitmap image = takeComponentScreenShot(gridControl); - Clipboard.SetImage(image); - MessageBox.Show("Screenshot of messages was copied to clipboard.", "Image was taken", MessageBoxButtons.OK, MessageBoxIcon.Information); - - } - private static Bitmap takeComponentScreenShot(Control control) - { - // find absolute position of the control in the screen. - Control ctrl = control; - Rectangle rect = new Rectangle(Point.Empty, ctrl.Size); - do - { - rect.Offset(ctrl.Location); - ctrl = ctrl.Parent; - } - while (ctrl != null); - - Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); - Graphics g = Graphics.FromImage(bmp); - - g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy); - - return bmp; - } - - private void BbtnSaveViewAgnostic_ItemClick(object sender, ItemClickEventArgs e) - { - var messages = Messages; - SaveMessagesToLog(AnalogyOfflineDataProvider, messages); - } - - private void BarButtonItemSaveEntireInAnalogy_ItemClick(object sender, ItemClickEventArgs e) - { - var messages = PagingManager.GetAllMessages(); - SaveMessagesToLog(AnalogyOfflineDataProvider, messages); - } - - private void bBtnUndockViewPerProcess_ItemClick(object sender, ItemClickEventArgs e) - { - UndockViewPerProcess(); - } - - private void UndockViewPerProcess() - { - var msg = Messages; - if (!msg.Any()) - { - return; - } - - var source = GetFilteredDataTable().Rows[0]?["DataProvider"]?.ToString(); - if (source == null) - { - return; - } - - var processes = msg.Select(m => m.Module).Distinct().ToList(); - foreach (string process in processes) - { - XtraFormLogGrid grid = new XtraFormLogGrid(msg, source, DataProvider, FileDataProvider, process); - lockExternalWindowsObject.EnterWriteLock(); - _externalWindows.Add(grid); - Interlocked.Increment(ref ExternalWindowsCount); - lockExternalWindowsObject.ExitWriteLock(); - grid.FormClosing += (s, arg) => - { - lockExternalWindowsObject.EnterWriteLock(); - Interlocked.Decrement(ref ExternalWindowsCount); - _externalWindows.Remove(grid); - lockExternalWindowsObject.ExitWriteLock(); - }; - grid.Show(this); - } - } - - private void sbtnTextInclude_Click(object sender, EventArgs e) - { - txtbInclude.Text = ""; - } - - private void sbtnTextExclude_Click(object sender, EventArgs e) - { - txtbExclude.Text = ""; - } - - private void sbtnIncludeSources_Click(object sender, EventArgs e) - { - txtbSource.Text = ""; - } - - - private void sbtnIncludeModules_Click(object sender, EventArgs e) - { - txtbModule.Text = ""; - } - - - private void sbtnUndockPerProcess_Click(object sender, EventArgs e) - { - UndockViewPerProcess(); - } - - - private void tsmiDateFilterNewer_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - deNewerThanFilter.DateTime = message.Date; - ceNewerThanFilter.Checked = true; - } - - private void tsmiDateFilterOlder_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - deOlderThanFilter.DateTime = message.Date; - ceOlderThanFilter.Checked = true; - } - - private void tsmiBookmarkDateFilterNewer_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - deNewerThanFilter.DateTime = message.Date; - ceNewerThanFilter.Checked = true; - } - - private void tsmiBookmarkDateFilterOlder_Click(object sender, EventArgs e) - { - (AnalogyLogMessage message, _) = GetMessageFromSelectedFocusedRowInGrid(); - deOlderThanFilter.DateTime = message.Date; - ceOlderThanFilter.Checked = true; - } - - private void sbtnMoreHighlight_Click(object sender, EventArgs e) - { - var user = new ApplicationSettingsForm("Color Highlighting"); - user.ShowDialog(this); - } - - private void sbtnPreDefinedFilters_Click(object sender, EventArgs e) - { - if (!Settings.PreDefinedQueries.Filters.Any()) - { - return; - } - - contextMenuStripFilters.Items.Clear(); - foreach (PreDefineFilter filter in Settings.PreDefinedQueries.Filters) - { - - ToolStripMenuItem item = new ToolStripMenuItem(filter.ToString()); - item.Click += (s, arg) => - { - txtbInclude.Text = filter.IncludeText; - txtbExclude.Text = filter.ExcludeText; - txtbSource.Text = filter.Sources; - txtbModule.Text = filter.Modules; - }; - contextMenuStripFilters.Items.Add(item); - } - - contextMenuStripFilters.Show(sbtnPreDefinedFilters.PointToScreen(sbtnPreDefinedFilters.Location)); - } - - public void EnableFileReload(string fileName) - { - LoadedFiles = new List() { fileName }; - bbtnReload.Visibility = BarItemVisibility.Always; - } - - public void SetReloadColorDate(DateTime value) => reloadDateTime = value; - - private void bBtnSaveCurrentSelectionCustomFormat_ItemClick(object sender, ItemClickEventArgs e) - { - - SaveMessagesToLog(FileDataProvider, GetMessagesFromSelectedRowInGrid(out _)); - } - - private void bBtnSaveCurrentSelectionAnalogyFormat_ItemClick(object sender, ItemClickEventArgs e) - { - SaveMessagesToLog(AnalogyOfflineDataProvider, GetMessagesFromSelectedRowInGrid(out _)); - - } - - private void bBtnUndockSelection_ItemClick(object sender, ItemClickEventArgs e) - { - var msg = GetMessagesFromSelectedRowInGrid(out var source); - if (!msg.Any() || source == null) - { - return; - } - - XtraFormLogGrid grid = new XtraFormLogGrid(msg, source, DataProvider, FileDataProvider); - lockExternalWindowsObject.EnterWriteLock(); - _externalWindows.Add(grid); - Interlocked.Increment(ref ExternalWindowsCount); - lockExternalWindowsObject.ExitWriteLock(); - grid.FormClosing += (s, arg) => - { - lockExternalWindowsObject.EnterWriteLock(); - Interlocked.Decrement(ref ExternalWindowsCount); - _externalWindows.Remove(grid); - lockExternalWindowsObject.ExitWriteLock(); - }; - grid.Show(this); - } - - private void nudGroupBychars_ValueChanged(object sender, EventArgs e) - { - rbGroupByTextLength.Checked = true; - } - - private void txtbGroupByChars_Click(object sender, EventArgs e) - { - rbGroupByText.Checked = true; - } - - private void tsmiAddCommentToMessage_Click(object sender, EventArgs e) - { - var msg = GetMessageFromSelectedFocusedRowInGrid(); - if (msg.message != null) - { - var addNoteForm = new AnalogyAddCommentsToMessage(msg.message); - addNoteForm.Show(this); - } - - } - - private void txtbInclude_KeyPress(object sender, KeyPressEventArgs e) - { - if (IsDisposed) - { - return; - } - - xtcFilters.SelectedTabPage = xtpFiltersIncludes; - } - - private void txtbExclude_EditValueChanged(object sender, EventArgs e) - { - if (IsDisposed) - { - return; - } - - xtcFilters.SelectedTabPage = xtpFiltersExclude; - } - } -} - - - diff --git a/Analogy/UserControls/UCLogsNonFloatable.resx b/Analogy/UserControls/UCLogsNonFloatable.resx deleted file mode 100644 index 440016ef5..000000000 --- a/Analogy/UserControls/UCLogsNonFloatable.resx +++ /dev/null @@ -1,3529 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADq - EQAAAk1TRnQBSQFMAgEBCwEAAUwBDwFMAQ8BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAAXACgQGQA5YGuQG/ - At8TAAE+Cz8BPhAAAWsDcAEGA4EDlgW5BQAG/wgADT8QAANIAmsCcAIGA4EBkAKWAbkFAAH/AfECiwHx - Af8GAAIOAT8JPgM/EAABIQENBkgCawRwAoEFAAH/A7QBiwH/BQAOPgI/EAAFIQENBkgCawJwBQAB/wG0 - AQkBuwGLAf8FAAI+AY0BkwGNAbYCkwFoApMBaAI+Aj8SAAchAg0FSAUAAf8B8wK7AfMB/wUAAj4BjgFo - AUQBkwE+AQcBkwE+AZMBaAI+Aj8WAAghAQ0BSAUABv8FAAI+AY4BaAE+AQcBbgG2AW4BjQGTAWgCPgI/ - GgAGIQYAAf8BBwGLAbwC/wQABj4BaAI+AmcDPgI/HwABIQYAAf8BtQEJAc8B8wL/BAACDg0/GwABDAFh - AQ4BDAQABP8B8AG1AdwBrQG1Av8FAA0/EAABYQEMAmEBPgEMAQUCYQIFAT4BYgFhAYMBDgMAAf8B8AG0 - AQcB/wG0AQkB3AG0AbUB/wUADT8QAAEMAYQBYQGDAgUBDAEFAWIBBQFiAQUBDAIFAWEDAAH/AbQBCQGu - AfIBvAG0ARkB3AGLAf8FAA0/EQABhAEOAgwBDgE+AQwBBQIMAQ4BPgEMAQ4BDAMAAf8BuwEJAbUBuwG8 - AbQBGQEJAbUB/wUACj8CPgEMGAABDgoAAf8B9AG7AQkBtQG0ARkBuwG0AfQB/wUACT8CPgEMJQAB/wH0 - AfADuwG8AfQB/wYACT8BPgEMJwAH/wcAAT4IPwEMFwAJ/xYAAZcDTwEICQAO/wMAA/8BRQLpAUUC6QG8 - Av8DAA7/AwACTwGZAU8BeAJPAjIGAAH/AbUKzwG1Af8DAAH/AfEBRQdGAUUC/wIAAfMMSwF0Af8BAAJP - ApkBTwJ4AU8BMQIyAgABbAIAAf8BzwT/BvQBzwH/AgAB/wH0CkYBRQL/AQABdAGaBXQBegV0AXkB/wEA - AU8DmQR4AU8DMgEAAWwCAAH/AbQB/wHzAfQE8wH0AfMB9AHPAf8CAAH/AUUCRgFMAUYBTAZGAbwB/wEA - Af8BdAF6A3kB6wERAZoDeQF6AW8BAARPAZkCeANPAzIBbAMAAf8BtAH/BPQE8wH0Ac8B/wEAAf8B8wNG - AZMB8wGTAUYC/wNGAUUB/wIAAbwBGgN6AZkB6gR6AXQB/wIAAU8DmQR4AU8DMgQAAf8BtAH/CfQBtAH/ - AQAB/wGOA0wBbgHxAfMB/wHzAfAERgH/AwABTAEaApoBGgHsBJoB9AMAAk8CmQFPAngBTwFQAzICAAFs - AQAB/wG0Af8I9AH/AbQB/wEAAf8BRgRMAW4C9AHzAUYETAH/AwAB/wGZApoBwwEUApoBGgF0BQACTwGZ - AU8BeAJPBDICbAIAAf8BtAH/CPQB/wG0Af8BAAH/AW8CTAJvAf8D9AFvAXQBbwFMAW8B/wQAARoB9gGa - AQcBZgEaAZoBdAH/BgAFTwUyBAAB/wG1BP8F9AH/AbQB/wEAAf8BvAF0ApMB8wH0AfIBbgHyAfQBRQF0 - Am8B/wUAAVIBGgHtAWYCGgH0CAABUwFPAlMFMgQAAf8BtQb/A/QB/wG0Af8CAAH/AZoClAFGAQcBRgGT - Am4DdAFvAf8FAAH/AZkBGwEHARoBdAgAAW0DUwFtAmwCMgFLAWwDAAH/AbUK/wG1Af8CAAH/AZMBmgiU - ApMC/wYAARoCwwF0Af8HAAFtAgAC8AFtAmwCBwIAAWwCAAH/AbUK/wG1Af8DAAH/AXQBGgOaBJQBGgHz - Af8HAAH/AVIBwwH0CAABbQMAAfABbQJsAQcDAAFsAgAB/wG1Cv8BtQH/BAAB/wGTAxoBmgEaARsBkwH0 - Af8JAAH/ARoJAAFtBAABbQJsBAABbAIAAf8BtQr/AbUB/wUAAv8BGgGTAXQBkwH0Av8ZAAFtAwABvAYA - Af8BtQr/AbUB/wcABP8nAAH/AbwKtQEHAf8RABD/CwAB7CQAAf8O9AH/BwAB7AEAAf8BAAHsGAAB/wG8 - AW8CRQFvAbwB/wQAAZMOSwGTBQAB7AIAAv8BAAHsBQABKg1SBAAB/wFvBkYBbwH/AwABTAGZA5oCGgIb - ARoCmgF6AZoBeQFMBgABBwP/AQAC7AQAATAMWQFYAwAB/wFvCEYBbwH/AgABmQF0AZoDegGaAhQBmgN6 - AZoBTAGZBAABBwX/AgAC7AMAAVEBUgxZAwAB8AJGAW8BkwJGAZMBbwJGAfACAAH/AnQBmgJ6AZoC7AGa - AnoBmgJ0Af8CAAHsAQcH/wEHAQAC7AIAAVIBTAhZA3oBWQEOAgABkwJGAZMB/wEHAbYB/wGTAkYBkwMA - AfQBTAEaCJoBmQFMAfQCAAHsC/8BAAHsAgABUgFLBVkCegJZAuUBoAEiAgABaQFMAkYB9wL/Ae8CRgFM - AW8DAAH/ARoBdAEbAZoBGgLtARoBmgEaAXQBGgH/AgAB7AT/BPwD/wEAAuwBAAFSAUsEWQF6AVkBegLl - A6ABIwIAAW8BTAFvAUwBkwL/AZMBTAFvAUwBbwQAAf8BkwF0AcMBGgLrAhoBdAGTAf8CAAHsBv8C/AX/ - AQAB7AEAAlICWQF6AVkBegHlBqABKgIAAZMBdAFvAZMB/wGTAfcB/wGTAUwBbwGTBQAB9gFSAZkBGwLq - AcMBmQF0AfYDAAHsBv8C/AX/AQAB7AEAAlIBWQF6AuUIoAEqAgAB8gGTAZQBdAHtAm8BjQFvAXQBFgHy - BQAB/wEbAXQBwwLrAcMBdAEbAf8DAAHsBf8D/AX/AQAB7AEAAVIBWQFMBlIFdAEjAgAB/wGTApQBbwKU - AW8BdAGUAZMB/wYAAf8CmQLDApkB/wQAAewN/wMAAVIMWQEOBAAB/wKTBJoCkwH/CAAB/wF0AZoBmQF0 - Af8GAAHsBf8C/AT/BAABUgRZASkHIgYAAf8B8gSTAfIB/wkAAf8B9AJSAfQHAAHsAQcE/wIHBP8FAAQi - IAAB/wIbAf8IAALsAQcG/wLsNwAH7BUAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEBAAEBBQABgAEB - FgAD/wMAAv8B4AUAAfgBHwHgBQAB+AEfBgAB+AEfBgAB+AEfBgAB+AEfBgAB+AEfBgAB/AEPBgAB/AEH - BgAB4AEDAeAFAAHgAQMB4AUAAeABAwHgBQAB4AEDAeAFAAHgAQMB4AUAAfABBwHgAQMEAAH4AQ8B4AEH - AgAB8AEHAv8B4AH/AYABAQHAAQMBgAEBAcABHwGAAQEBwAEBAYABAAGAAQ0BgAEBAYABAAGAAQABgAEF - AYABAQGAAQABgAEBAQABAwGAAQECAAHAAQEBgAEHAYABAQIAAeABAwGAAQYBgAEBAgAB4AEHAcABAQGA - AQECAAHwAQcB4AEHAYABAQIAAfgBDwHwAQcBgAEBAYABAAH4AR8B4AEDAYABAQGAAQAB/AEfAdgBDQGA - AQEBwAEBAfwBPwHcAR0BgAEBAeABAwH+AX8B3gE9AYABAQHwAQcC/wH9Ad8BgAEBAfwBPwT/AYABAQL/ - AgAB/wGPBP8CAAH+AQ8C/wHwAQ8CAAH4AQ8BgAEBAeABBwIAAfABBwGAAQEBwAEDAgAB4AEDAYABAQHA - AQMCAAHAAQEBgAEAAcABAwGAAQEBgAEBAYABAAHAAQMBgAEBAYABAAGAAQABwAEDAcABAwIAAYABAAHA - AQMB4AEHAgABgAEAAcABAwHgAQcCAAGAAQABwAEDAfABDwEAAQEBgAEBAeABBwH4AR8BgAEDAYABAwHw - AQ8B+AE/AYABAwHDA/8B/AE/AcABBwb/AfABHwL/Cw== - - - - 830, 17 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAUmVtb3ZlUGl2b3RGaWVsZDtEZWxldGU7UmVtb3ZlO3aMxpEAAAIdSURBVDhPhZJbSFRRGIUPRVMK - FZQGaghqDYWQNTVETTShSDAVQU1FMUGCTIRoF7KHsgt0Y6CLpRUm9iLUSzISBNGDJEfp8lBBJDSFUVIT - UhRS0Ntqf5s9Mk+24YPFv9ba55z5x3NnuiHwfuuGQUC7We5M6SNmjWyO+uNdVwRoZs77n+8FXsfW+9nO - lP6+HLCgmRmvEKbweROvYLBuTffnVJsm0rc00depP36/xq5d0NP6yDCgmeGRIWs6d+hyAa9SlF4Xbs+0 - NupH10n97E3p98A9jV46ZUEzwyNDlo7rejMMcwwld1evuP62OaHxq6363n1Gv9IdFjQzPDJkXYeuN83A - t8w1lPWEajpeJXfq67kmZS+2WNDM8Mi4LB269iD4nqLelaFnL5K7NHa8UZ+O7LWgmeGRcdnJMod1FPbU - LB963pRQNtWijwd368P+7RY0MzwyZF3HHrvnG9XL/KGGuL6dTmr0QFyZfVv0eGPUgmaGR4YsHdf1ApeD - 1f6THZv05dAeZRIxjcTr9LA2ohMVwZuAZoZHhiwdulxQcLZyyYNH9VG921arN7GI+teGdax8MT9YBaCZ - 4ZEhe75y6TBde4Gh+OjCRbf7wiHdXxXS4bIqVlVqmO8oZYZHpq08yI+5wGAv4DXs/6C5pKod0AZWxXcC - Ot/n8twq7TpmGmYbeNo8p3N7BnTOBx5IZ3IThPhXMQR0/p7zfd7I+Z73DxkXTSgd4+4eAAAAAElFTkSu - QmCC - - - - - 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 - QmCC - - - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLkRhdGEudjE5LjEsIFZlcnNpb249MTkuMS4x - Mi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAAAB1E - ZXZFeHByZXNzLlV0aWxzLlN2Zy5TdmdJbWFnZQEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABcAgAAAu+7 - vzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQo8c3ZnIHg9IjBweCIgeT0iMHB4 - IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3Jn - LzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sOnNw - YWNlPSJwcmVzZXJ2ZSIgaWQ9IlJlZnJlc2hfQWxsX1Bpdm90X1RhYmxlIiBzdHlsZT0iZW5hYmxlLWJh - Y2tncm91bmQ6bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuR3JlZW57 - ZmlsbDojMDM5QzIzO30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTMwLDJ2MTJoLTAuMmgtNEgxOGw1LTVj - LTEuOC0xLjgtNC4zLTMtNy0zYy00LjgsMC04LjksMy40LTkuOCw4aC00QzMuMSw3LjIsOC45LDIsMTYs - MiAgYzMuOSwwLDcuNCwxLjYsOS45LDQuMUwzMCwyeiBNMTYsMjZjLTIuOCwwLTUuMi0xLjEtNy0zbDUt - NUg2LjJoLTRIMnYxMmw0LjEtNC4xYzIuNSwyLjUsNiw0LjEsOS45LDQuMWM3LjEsMCwxMi45LTUuMiwx - My44LTEyaC00ICBDMjQuOSwyMi42LDIwLjgsMjYsMTYsMjZ6IiBjbGFzcz0iR3JlZW4iIC8+DQo8L3N2 - Zz4L - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABJ0RVh0VGl0 - bGUAU2F2ZSBUbztTYXZl1KuZcgAAAvRJREFUOE99k2tIU2EYx72szXv6QStRM7t8kYqiDK9pU2dT59R5 - bbOZ2thEE53OOWV4SQVNE29RGSGIopVFRppERakRRRcNLYgIvKSbqeWN+eHf+x4UBl0e+HEO5+X3f59z - nvOakDIlmBHMjWD9B7puCsCEQsssNa/uSWpePUQpasRICiBMVkKQmIuI+BzwRdkIi8kET6iAQKJGRLLy - KXFYxgEsaW4dmjsGiZgP/dIadIurmP2xgpn5FUzrlzGpWwY3PANJ6VrwE3KpxTYO2JaSU4OGmw8RSXac - W1jF6Bc93n2eg5cPj2FkbAaBPCkSzpWAF5tNLY5xAFucVY3a6/eZVumObz7N4tX4d/j4hyOAK8TQ6DT8 - QiSIl2rAjcqkloVxACdJUYnq1l4EC2SYnPuFlx9nMEx2peIW3kFJEJFvEBgho5alcYBFgqwcZY09COKn - kVZT4R+aAr9gMXy5ZxhRe7EJV290o+vWINrae6llw5ibZSlK06KkrhOKolbI1S2QqZshllcgLC4H0WIV - Om8/guZaJDKb9kHRuBeySx6PiWeeXO7CBFgJpcVQVbVDlKohXf1ZBoMBssseWFgfwfz6EBJLXWgX7Hit - KxNgLRAXIq+sDUJxASPoFuko17C8asDiTzJS3QLSavbg61IXPuhqEadhArYTODTAhp+Qh+ySKwgnY6RF - RzlLWCCytModkkpCxW6M6Vrx/JsKUSpnCAqcEZW/i/mKtrzYC5AXNiE0SgHN3Qmo7oxD2TOOvrdTULZk - oOFBOF5P1RNZi54xMfom5CjtCMTRaLsOGmDpw5U88w2RkimkQ1DSD37RAIKVfVC1DqOh6wXOVnqT4AMo - HnCDpt8NinZnHIu1e2+3g+VEA+hBsiLQd7I3wmETR7cjFt6RhU7z+ffckdW9EyeS7PXOnpyDZI3F/Az/ - glaw3JFe2IeFNsIYjevGyfMOG+5eVjHkGedQpJ3JX8UtaJ3KYLqkR976eKyDan+AtYre02eep21NfgMU - 4P3eerXCuwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABJ0RVh0VGl0 - bGUAU2F2ZSBUbztTYXZl1KuZcgAACZJJREFUWEfFl3dUVGcah9FssiYmMbprEk+y2ZM9W1SiUWKjKU2K - IMIAysDQHJChDNIGhiYMvUsTUMACEgsolrjGemLUqNFVo3QVrEgZOkOT5Lfvd0csLNGc3T/2nvOce+fe - M/P83vf7vnvvqAD4v/LiNuEpE1/F0y+Ne+0VjP42t40XgF38HfEW8fsxTHoFb4/DO2Ng59jvvkFwIcYG - 4OQ+MVtj/BNLRvwTSuBHGFqKsXipPawEUqTk7EFy9m4kZn6N+I2liEkrgSxlByITtyE8rhChMVsglW2G - JDIPkohN9J0gmNr4wMxGTHvxL8Y8j1JysBCsG+MGeMsvoXhk/8mrqDh9DYe++4mT65nYQOAWhcbOETR2 - PEFDxzAa2odxRz6E222DuN06gPqWftQ/VqDucR9q7nfjxu028ChARv4+pOeVITV3L1ZYe/9CDtYN1oX/ - CMBSTVofux3lJ64ifccxJBX+E4u17aFrbA071w0kJjkTtw+RfBC3WokWkjf3Y94iQ8wn1BYZEYa4WtuC - Vbb+cPaMhYNIhqDIXJhYeTHTu8SvBxDLilD27RXIciqQWPANFmnzoWNkhdXOoS9VzeT1JK/jqlZAbbER - 1Jfxoa7Dh9lqX1yqboaptRiOHjEQuEchgIbEyNKDmd4jfjXA216RW7Dr6CVEZZUjccshLNTiY5kRD1YO - Qbj9TK6smolrmxSoftALtSXG0NQVQFvfASY8b1ysaoaRhQcFiIadWyT8wrJgSJ/J8eoAHuH52Hn4B0Rk - 7kV87kEs0LLFUkMeVvEDnldN8lqS1zT1ofJeF67Vy6GmvgLLDJ2oW84wNBfhQmUz9M3c4CiKBp+GTxyc - geXm7sz0PsFW2rgB3nEP2YQdFecQmrYLsTn7sUBjDZYaWNJMXk/iAdSSvIaqrrzfg2u35Lhc04JLVK2a - uin0jF2gb+oKvRVCnLvRhGX0WeAeDdu1EfCWpMHAbB0zTSHGDcDaMlkYlImi8jMISS5FdHY5vtJcDS39 - VTC29ETVwz5cb+jE5bpWbowvUpWMC5VNFMAMOiRcZuxMHXPmAmgtd+DGf7VLOET+KdAzdXt9AJeAdGze - cwpBicWIztqDr9QpgJ45DFauo0qV1bLxvUhS1mYmP39TCZOeu/4IZ2l/lvYaevY0/lGwcQ6Dm28SdEyE - zPQBwQUYu7EA7zquT0bu18cRELsNURt308z1xnx1G2gZOD6v0MgJ2oaO0KYKtQwcoKkvgIa+HdT1CF2C - VsISHVvo0lDwhZGwcpRC6J1Ak9mFBZhKvMmEYzcugMA7Edk7jsJXVoiQpBKEpZQiLHknHRcjJGE7gokg - ChcYUwT/6EL4RRXCI3AjnGi5MRxpzFnboxIKkZa9E0kbdyAupQjpOaWQRqSzAB8T7Nb+7JkwurEA79m6 - xyKt8DDEGzZDHJEP7/A8eDFCN0FEE9RDmgP34GysC8qCW2AmXAM2cmNs4xQGa8cQDiuHECSkb0fUdhPI - yucituJLxB+aixjah5Z8cYY87GY0UVKkquKXr6rinTWL+ZUBVgujkJx/AF5hufAkKROKOGkW1klIKsmE - W0AGhCQW+qdB4BlH0lBqs1LMc5DC0j4YcclF2LBrDoZ/bn/OiByysjmjw/DG0EizyiDhlfk8wPs8p3DE - Z5dBRFUqpSSUZJCUCdMh9EuDi18qXHxT4OSTTJWTnB5UlgTPnsmlsLALgixxC8J2fgHFkzo0dG1CQ3ce - Wvu/ReRuLsAfCTYRJwyONKl4ZsykQ+WJKeaCEETT5HMLzODa60yT0tEnEY40Nxy84rmK7T3iYCeKwRq6 - w1k5UdU0ySwEwVhlH4RVdoFYaRuAyLg8SHeoone4Gre6MoiNaFYc4kKRh80D9hhnk5F5WfHKAGZ8CSJS - SrCWqzIVApIODD9B/6ASBdE3MIzegSfo7R9Cd98gehSD6OjqRYu8A4+b5XjQ1IL6O/cg2aqK7sEbqJIn - oqo9EQ96yyDdrsoC/IX4kJjGnAR7QnIBPjCx8UNI/DY4ialycRL47jGcuEcxjG7FELpI2NU7iE6io2cQ - 8q5+tHX0ImyzBYSJf4cobSZoUsEndzb8Ns9Gx+AVXGuJ5GjoKkZAATs/C+s3zYZ35iyI0mfCJe5v158F - MLT0QWB0gbLdHvFY4xrJVc3k3X0UgIk5BtDePYA2LkAPrlZfQUi+EeR9legbvgvFcCP6aS/vP48LjwJx - kaiR56JVcQa9Q7fQM1SP5p5/wSddc2CJxXSN0QBT9cw94UcPJDtajny3GFg5h3Mt7yJ5Zy9DWXl7z/MA - ze29aGppR9nxAqSV2eD7xmCcuLMOpxpEON1I3PVQQsfs3PE7bjhx2wthW7Wg7zxDQl42DFyAaTor1sFb - moU1QhnYkrSg2c3GuovJXxDLu6lyVj0L0KFAU2sXGh88RkzRWuw574N9lWtQXmmFgzV8HKkX4EidgI5t - uXNlN62Rc9QMJp6fHCPndILdmLgZOU3bSAgR3dmsXTZQ9REw5weip3+Ya3s7G3MKIO962vrOfrQSLSxA - Wy8etXSisrae2qqDwz/5oOhHfRRcWobCH3VReEmH9jp0zgDFF3iw8P9z86czJ7P1N5ngVgEXQNPAGa7r - U2hphcHSIQwrbHyRcboRkYfrEHGwFmEHaxBSUYOgfdWQlFfDf281fHdXwaf0JsSlN5B6uBLhW0sgydFF - 2Q07ZJ/VQPa5UdRRfNkcTrJZP88znGZLPtZ65uVuy9wkXKLrMOLsmUBrWkprWgpDnhg555sRd/IhYo4/ - hOzYA2w4eh/hR+4j5Jt7CD50F5IDd+Ff0QjfsjsI3n8LGUdrIc6QILWch7wfdJF6eh5STs9H7rml8MtT - w2Kr6fnkGm39BE0+uy0oX0gmz1PnpSzU5o8soHfBBdq2WEKvWcKsi7CO/Q6WslNYGXECpqHHYBx8FAaB - R6Drdxja4gPQ8KrAYlEZFrruhaX0IERxFVgTpIeCU6uRdEINSSfnI7p8CTRtP7r55qSJnzPXU+eExdYf - 0U7ZBtYOdoHdq1lCBrthjIV9YyysDMYM4hPir5+pvmfuED5Xkfe9MZKPLYKB658Un86erE/XRl9KJtS1 - lagsWMU0ygAMNiHYRRaG/Yn4b2CtZU+8jxetnOG7Pl0DPMnn+IfWFH86x54D7PrEqtZtKlWthSrzzNip - 59tokP8F1lpWCPs79qG+02d75yyfuo+OWafYM4Br/bwVf1D58ikvvZ/9Vl6zjQZhQtZyxjM58fI2nuB1 - /IbtxW4wxperqKj8G9Ybwd0srDjDAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAfdEVYdFRpdGxlAE1vZGVsO0V4cG9ydDtFeHBvcnRN - b2RlbDsjYTTZAAACXklEQVQ4T42TXUxSYRjH0Qy0VRd9rZsuuq/bPkTLT1Q2GCr5AScQydghDRwlYEJq - Vpjmamq2lo2haVSbbdXkos1usmyrrWlredFNhEo2V6KtDfn3vq/pgGjr2X4XzznP//e8786OAICAVBIh - mbAhipR/QN8l0RzL/hEka8xXxrT1nVCozqK24Sp4Sztq6i5Cy7dAfaIJ+TIDZGorCpWm51QSL0jRmDtw - 3T0KWZkZwYVlzH5bQmA+BP/XED4HF5Et1aNC70TRsXoaEMYLNnJ1LnTefozCklMs+ObjHF5/mMWr9zMY - nwrgiESDMh05SXEtDYjiBcJK4yW4+kaQJzfATzauBmfwYjLASM9VQ6ltRI6cp4HUeIGo3HABrd0P2FGz - CnTIJBsz8jiISfBwdiUOZlWghLPjqLSGBtL+Eij15+HoGoaxsQ+8/QYM9l5wfBtKj9tQzFkZCpUVGZLq - hIJURVUTrJc9UOrOkUerFYlEsLKygnA4jAHvU9y978OtOw9pYCth9ZOSOSpIk3M2WFr7oeAaWHhx+Rf8 - vkeYdhrXeddWipcd4hjWBJuk5RacdtyEtbmbbV34voRphxEYG2T8HGzHMLcXWLjH+DHZxvp1QUGpCbyt - B56hJ3B536KixbfOyWsWnHHvi+HLqDZGIDqUw42J86vQ7xmBxOTFRAgM72QQJbY9mIebMf6pmfXxAvof - pBI2E3ZQgfPZHKO6d4IFBqYyGY1D+1nfU7QbrtxdnUwQDRX9j4DMbSMIEwoOqPsQTZZ+Zwzpqu1dLEwr - gYBeJ41Ar7PGlihoLyKQOYHgN1qIG9oZbGBuAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAfdEVYdFRpdGxlAE1vZGVsO0V4cG9ydDtFeHBvcnRN - b2RlbDsjYTTZAAAInklEQVRYR8WXe1CTVxrG3e29ar1s67rd7W7bmXU6nf6xVVflErk2ICCXQIBACEHu - Qe4kQAyEGMAoyEVR620AERFbrbYi3nV3a5V12zqKInjbqkWEhIRwx3affc8HyZbR6PSP3T0zv8nk+3K+ - 53nf8573O5kC4P/KEy/+L3nS+MV/CeuwZYD96JfEc8Tzz+CFnwmbw57NjScZYOLPpWmrz6QV1iCtuAap - RbXg+ydj8dJwBIpzUFLViHUb90JXuQfF5fXQrq+DpqQWal01VEU7oNRuQ45mK+TqLZDnbaI5CngLk7Es - MIlxhp7PTHCZsGXg+ZWaHdh/4hvsP/kNPjt9iRN3XSaEOLYA/aP/4jCP/gjzyI/oG2b8ANPQDzAOPYJx - 4BF6B8agN4+iu3cIAjJQvuVTlG5qhKdAxpReJLgs2DLwQrJmJz459jVKq5uxZtsXWMwLh4tnEMJi8jnR - 24Yx3DKM4pZ+BDe6iYfD6Ogawp8W8fEhMX+RB8FHZ88A/EIzEJO6FvKCzfAM4Ay8RDzVwItJ6m1obL6I - gg2fYs3Wz7GIJ4KzRyCCpUqYKOJb+lHc7BkX7yDx9geDHPMXe8DOSQQ7ZxF8gtPwXZcZ3kHJiEhYjQxV - FS1lIlN6mbBpgN14KVH1MXY3nUde5T4UbT6IPzuK4OQhQGCEAr2U6nHx8aiZ8PXOQVy714/5Szzh4CIG - zy0CywQrcbuzDx4kGhGvQZqyEny/BKb0yoSObQPxuZtQd+gclOsbUFh1AAsdQ7GUL4CfKBN6WmMuahK/ - TuJtnQNo/c6Ebzv0mG/nBSd+JGVLCr5vAm7cN8HNJxZiMpCsKIf78jim9OqEjk0DL0crKlG9/y/IXVcP - DS3DQvsQLHUPgI8wFQ/NY7hO4m0UdetdM769ocfFtodoudpFBrzh6hkFN+8YuHpFo+2fvXCi7+FxBZBl - rafrsUxpKsG2uE0Dr0RllmH7vtNQ6HZBU7kXCxyC4ejmxxXR98YRXLptxMX2brRc68KF1nHOt3aSAR84 - k6CTp5QyJkXrHQMcP4pAWKwa8RklnCl6/rMNSFLXYUvDcWQWVkNd1oAFdmTA1ZdL4c37fVy0Fxgken5C - /NyVcVpvG9B6U4/Lt4gbPbB3DYcougCxaToyt4IpTSNsGmA3XhWv1KFq11GkUT9Qle6h6k3Ch3ZCOLpL - /hOhRyR4fAl4FKGjewQc3MSwdwuDnSvhQtBOWOIcCheKWhSdjxXJxTRHypSmT+jYNDA1NL4Q5TsPIzl/ - K7KpG+bqapHDKK5GFmVFrt2JjNU7kF6wHan0mxTVFkiTiiBJ0HIVHxGnQTg1rfCYAuodaoREqSBNLCKz - kUzptQkdmwamBVPKSrcdQtKqzZApNyExpwoJRHz2BsTJNyBWXonYzApEZ5YjOmM9xLIiBEmUCJTk0lbN - hSAihzogIxsB4dnwJ8RkzsFNYjHA2rFtA4JIFXSb9iMhe+OEKAnKK0iUCZYhOn09otJLEZVWgsiUdRBG - kjgJBjDRcPrkIOEwBfwYIgUVYgHVg5gpzSCeamC6rzgXhRWNiM2qQAyJSqkoJSk6SKg2IpKKuYjDKaVh - FFUIVXhgJEUtIVGK3J+i9g8fF/YVyeEbRoTKEbpCTTURxpRmEk818JoPTVSX1mMFF2UpxCQ6PPYIQyPj - DBIDw2PoH36E/qFRmAdH0ccYGIVpYARG8zAMjL5h+IRkUlvOglCqwmJq0/T8WQRn4EmD3ZixTJgOpa4G - kckUefJaiOK1nLB5cIwTYiKmfhIies0jnJDeNIwe4yC6iS5DPx7oB9CpN8MzMAVeQRlcbSzihTADrxOW - NyL3Wv7pYAZm8gNSoKBK59KdWIwQqmQWtTVKJswxHmWPaYiiHoKJMJgG0NPbN46hDzt3HUR1/eeoa2hC - 1ce7mYHfEawO2EuJ6U0ywRlw9ZUhg7ZXGG1HUawWgZQ+lnITiRv7GRORU5r1JG7oG4TB2I+7TftxUy1D - Rz6RJ0O7SobrqgQc3JyFv1fw0FLmiPMlDvhKZ48vi+2YGeuLyTKYgVnOXnFIUVYhJFoDtiX9qbrZWpuY - +ITweOQkTOJ6oxnXarfjbokCOLPbyu0N+Tgrc8C9k+mAca+VzqNSHEn/gBmwNiXLYAZm8zyiIaNtFxSV - T9HnUTVnwTw0xqXdQAb0ZKDHOB65vteM6qbLEGmPI1RzFMEFRyFUNyMw/wjK5TxIit9FROG7EDO07yBs - 9dv4h3oODsTNYwasO8Iy2MFxtoO7FLG0AwSSVbS1VsFLmIaK03eg/qIdeYeuY9WhNuQcuIojl77H6roW - lB3tQMsArFSeuAE/RQzqzkqhR42VnaeC4Z3+JmegQfwOM/DYjuCWYLGzGFFJOvhRQ/ELywFfkIyqc10o - Onkf2uP3oTl2D3lNd9B0qRP+ysOoaDGi/Hwvyr7qRcmXBoRomhGqfhuftHtiX4cH9rXz0dj+EXyUU+Ge - OIczUCN467EMsGrkGtECe+EZdghZSEexhbxQLKFTTvSGCwgqPIsAzSkszzsBr5wj2PbZ1/CSH4Dur3qs - +ZseRWd7oD2r5wwIVb/H3jZ3NLS5YU+bK+qvuXAGnFa8jsNxc1HiNqeCtCxvRutOYBXJ9igrjl8RbxBz - bPAmMY+f2gjN6W4UnOpG/smHUJ3o5gwIct7C7qvOhBPqWnmoJZiBJeGzUMR7YyPNnU1YT8iWwZywC8wV - qwf2A1uwo9VcZ1k9lMceIru5C4rmB5Af6YJzXA185b9F7RVH1FyxR/VlOw6XxOn4wHt6Fc1jgVkOp481 - IzbYxWfBDM54f3kJ3vNZi/e81mCeZyH+6KHFHxxStiwSzcLCEEI4E/MDZ3C87zmNRc46IROflPpJL4Zn - QYNNZO7ZGZ8VEovo1xOw5bEs3VziNxOf7DvrgGzOZHE2niRki4lhMcGq2NZyMTELP/1vOFl8ypQp/waY - pMEHZnQGDQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAEZ1bGxFeHRlbnQ7Tu+vCAAAAk9J - REFUOE+dkutLFGEUxl8iqOxif0oZVGtLC25GQRQSrkJE1poGZSVFQRdFESXLTC1nliKkLIiuiFR0M7Ww - /ok+VKzb3ua2O3c5nXPG1ZI+NfDjGYbneebMO0dIozMTiYdfQUYSD76wyqSIRIwSMzBM3A/0FurgyPSk - EGK5oAf/cw2OfAIsWCGG7n0Gz58Dy/UCHMT2QNVNqK45zVq0XcSDghXgeHPQf2eKClaKG3enwcUC0/HZ - VCK67ySzY28LGBgyLBcM0wUdcVwfriYmgoK+25PgYmMRTUSBjEgBjVV7jnPAKLqgITqrAzYW9Ay/p4JV - olf+gCP5HCCzbjrz6kJk9zEOagUH1BKGi5/pQ9fQWyooE9033/FIWaUIkV1NHFAZMi+SR7ZVH4FU1gDT - 9qGj/zUVrBadA2/AxsbwzkYkjqY4hNGoYIDI6zZURg9DKNoAoaoAOqPL114GBW19r3ikZEZDY0MQQnIY - ZDQHsprNbIkchB8pjc/qwpVxKlgjLvaO40gev2khhFBg8/YDkFFtyOB9WrUgraAqFv/Kc91jVLBWnO8Z - 44KsZjEcYCzYFK7nAPGLyFuQypv8W890Pg8Kzna94JEyZMRgKVBRGYOKUAw2hmoXgrOkOYv3obX9KRWs - E60dz3ikNJuCtxDf8Vs3bN0P334qMJvDMAaTqMmsyfvQ0vaYCsrFqfYn3GiYuG1M6X5+L9D8L05cehRM - UBsf+FjfLMOf1DVLqBLUNREyxI5Kf9MoQc2h61NYUIbgPtNhUNsi5UtYvwR6hmGx7DcxiPZxE/VvNwAA - AABJRU5ErkJggg== - - - - - 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 - 438ACHvF+rT7w7kAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABh0RVh0VGl0 - bGUASW5zZXJ0SW1hZ2U7SW1hZ2U7GYFN/gAAAqJJREFUOE+l0+tLU2EAx/FjRhetrD+gNwUNEi9lSCRU - IL3pjVLQi2yE07zMS4bzNi+5cGradN5SQgU1nYpsqFNTa9pEpxhtU9QooSLLoKymm5fdfj3Ps2URvgg6 - 8DnnOQ+c73PO4RyObB5uu3bguYPdbnTswVW3GTU1ihlQ1W2UEdWtRlS5VT42MBUtBsib9ZA36VFOPGiY - HmWRkvppOAEXsvtX0tpJkMAerqhuik3MrtiYmRUrdO9WsNhTBMfnTqzP1QPfVdh6/RD4qsBCuxgOcoGk - aoIG9nIFNToWmFjexPinTWg/rOGZZgiv2nNgmpRhqT8RU/nnsNQXC7NBCuOjBNgdTuTJx2hgH5dfOc6K - qkUzlETH3BcYygVk5WqyYgc06SGYlYeS41ngbQ7MUyLY7E7kyJ7TwH4ut0zLin1vBEz3/E2olFfxQnYF - y93JmGmIQCc/EPqaMHxU8KGTXILV5kRGyQgNeHHi0lFWVM5FQEUo56+jURuOkexQchelWGqNgn0hFe8b - r8Gii4FGFIItqwOiQg0NeHPpxRpSdKDtZRgU+nCmRHkR6sxgDAuD0B93CiZtMgYSAqGOCURnkh82tuy4 - UzBMAwe4VOlTVqwbu+B2HrnNp9EzGQdp1xmkJR7DIJ8HsegE4st8EX2fB8umHcmSQRo4yKXcG2LF8uFg - Rj4UjKLuIMTKeOBLjiOryQ/ilgBESnlIqfXHDTK3tm5DQt4ADRziku4+gWXDhiJ1AKRqf6a413/7nI5T - 608ispAHYYUvLguPwmS2Ij67jwZ8OGFuPytSqxbKypgYm+tILvhBfFsjVl1is9SugEDUNXIrUw0qmsro - 3RaV/ksPI0j7jX9boSUBL4J8TfRl0Odx8fnL4T8ccaNjb8KTI//QfwD3E3v7ffFIrTjwAAAAAElFTkSu - QmCC - - - - - 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 - B1PyXtHiYG5zAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0VGl0 - bGUAU3RhY2tlZDtMaW5lO0NoYXJ0O4S784kAAAK4SURBVDhPdZPbS1RRFMbP39KDFGZmFiRFgkT00gV6 - ECo0hUB0zMZGTE3NMhVx1EZNSisvo01Nc8lJp3G8jLc0MyWRQemhMiXLnJvO/fK19j5NBNXD72z2ZX37 - W2uvIzQrF4YJNHUz5jmKrijvcLdTpLGDMYeGx3Oof/SWI384OyxUtb5GBBChz+/xLyK/AMKcCCoUExAq - W6b4otcXgscXJEJw8zHIRzefi2vLOg2eHjsAq0aNMKmUN45DuN08yQVWB/owdjoZnwx6uL0USOwwPCJf - xix4khSPNW0Heo8mIEQCZQ0WCMwGs2M5lYJNQzfMKYlYftCKld4u9J84jPcNtZhOT8VE6hlMlV5He9wu - zCu7EAqFUSIfhVDWMM7tfHimQn9SLJbaWmG9p0Bf8kF81XdCdyQeHw0v4HQH4HD74dzxw7ETQIAEimpH - IJTKLdyOiw6wQ1GWepRQJcZgsVfJAxw80A/7No1EIBhGYc0QhOK6UQRDEfGGPw66PAGqQYALsyBbFJeI - PxBCQZX53wLbFFyvX8G+3EHIdStc5L8CzIaf7PBbaGOLYAGJUjPaZtYRn2OC8c0afjh9on2WhsvHn1l6 - ywRBRiq+QJjnxVxsOr0obZ/H8cJh7M02QdIyh7NFZpwrHkKuYga7MzSoUS1S3wSRd9MIIb/SxAXqtMuI - k5hwsngEsqZZbNg8PCXbtg+bDi8Mk5+xJ1OD+5Or2H9Zxx3klg9AkFa8gpfyOZRPlqfXkSAZhJ1sfrd7 - 8Y1BQowtSuFOzwJi0tSopP+GNVfOjZcQ8sqNvH2r1VbEZhlRrbLywyxow+blThhszurA9pgjVovsEhKQ - lA1Q1cW2jbYv7wWyz4g+K4fqZKeUxIL7kFVkgJBZoDdmyvTIkOlwiUi/pkV6vhZpUg3n4tXnv7mQF0WN - 81cYauNPOedPcHsNCl4AAAAASUVORK5CYII= - - - - - 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 - TkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - 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 - - - - 117 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAJQElEQVRYR8WWd1TUVxbH3ZItycYkpm39d/+Ku1FRikjvvQ0ww9AZGJgBBhh6 - GRh6R6RIQEWxIGKkKKLYgsEaY8EuKEWRCCrShKjnu/f9hiEhuMecPSdn3zkfHo+Zw/d77yv3LgHwf+Wn - 41fEr/9HfvMzUH+X6Swa7IO3iN8Tf/wJb7+Bd34m7Lvs/zMzC0ywxVth6Vsy5Hk7X0YX1COmcDfiiuvB - F6fD1iMGtoIYeIhSkV+2G7ml9cgu2YHMou1QFmxDal4tUrI3IzGjBnHKKsQoNiIqqQwWjsFw8pbD0UsO - B49I2PFlL614kh2kxUywgOcHW/whInfHbNPxK2g50Y3mzm60dV2Hpp4HjCw8YeMcDM8gJZ5NzWKMeDqp - 4snEDB6Pz2B0/DlGnql4NDaN755Mw8w+EFV1+1FZ24ryTc3YUNMEW7fwl6TFssGyMD/Y4u3w7Do0HbuM - 3E3tyN7cjpK6o3MGhLBxCoYwMJUTvNr/BN19j3Hl3mNcvjuKS70jWKllTlhipTZB8/2RCRjbiiCNKYE4 - qhCBEXlIpixZu4ayk/funOb8YIt3wtK3ofHIRWRVtxEHULytA2v0BDA0F8LaSQx+QAoX3cWeEXzb8wgX - 7jzCN7e/w/lbw1ilY40Vmk4k7gx72q67Q89gaOWHkLgiBEXlQRSRi/jMarWBpcRvmbB6MAN/kio3o+Hw - BaRXtSKjaj8Kt3Zg9To+DOYMuPkm48HoJM7dHMbZG8M4c/0hTl8bwqmrQ9DQtYPGWh4ZdoetezRuDTyB - noUPQmKKERhJBsJzEZteBSsXKTPwHrHYgERRg11t55BW0QJlZQsKtrRjtS4ZMPOAlWMgeN6J6BseR1f3 - A3zdfR+dlwfx1aVBnLg4QMJO0DH0wFpjL4oyCldpW3TNvBAsL6LocxAQloXo1ApYOEuYgfeJRQbeDUmu - Rt3+M1CUfYnUsn3I33yQInOHPhmwdBDB2TMed+4/xYlv+3H8Qj+OEh3n+9Bx7h60DHjQN/eFkbUIFrwI - XLj5EDrGHhDLC+AXng2f0GxEppTDnG4Gab3WwNKghErUNnUhqaQRyaV7kVPTSml1g56pABb2IrpKsbh2 - bwQdZ+/iENF+phcHT/ei7VQPtA3dYeEig7mzDGZO4ThNGdIy5NMBzIdfaCa8JZmQJW6AmaOYGfiAWGCA - LZYGxJZj095OJNIbkFjcgKyqFjpcrlhnwoe5XQDd42hcuj2MA109OPD1HbQyTt5GC9HceQunrgyi6/IA - Tl4aQOfFfmjqu3H77yXNhFdIOsLii2FCV5O0ls1pzg+2eM9PXoKN9ccRm7cT8fm7kFnZBEuXMKzQdsEK - LRfomfnAyCoABlb+0Lfwha65N3RNvbDWRAhtSre2oQCaFPUafXc6E67cNQyg/fckcaFYSQeyEEY2IrUB - 9urOD2bgfS9ZIcq2d0CevR3ynO1QlDZAWd6I9LK9UDI2NNLM1o1I27AHSvo8taQBEakbIYkpQkh0IcQM - 2vcgunYiWQ586fAJg9LApzckKDKfM09aHxKLDXhI87B+y0FEZNSqyKxF1BxyNmcxts7/Ls/cgghlDXwo - Qh9JOrxpZtF6BjOU8BCnQcDERQrw/RV0E3JgYOnHDHxELDLwgXtwFgqqWxGetglhCoJm9ruMzUqa1aTV - ENX0txoE0CsnnBNkaWbRenARkygJuwcQ/slw80uGb2gWvQ2+PzYwX5CYgWUugenIrmiCJLEKkuQvIEn5 - AlI2J1dBmkJ/I9gcmrJRtU6sIDElBEyMUsxEBSzaOWEmyvNLAs83CS4+CXQQldzbQFofEwsMsMUyJ98U - KNfvQVBsBYISyiGOL4cX3V8PikxAEQrYzKWVxIIU9I8T4OgZTdeTVbsoeoIjYc9nVS8CNm4ymiPB80nk - xJ284rnM6Bh7MgOfzGkuMPChnWciFIU7ESDfwCGSr+eimn3xEjOzKp4T07MvMDXzEhPTsxinysgq5DOq - jGOTM3hKVfExg6qihZOUhOPIZCwcBLHcOdA2EqoN/I5YaMCaH4O4nG3wlRURxfCjmaWPCU8+f0F8/4Mo - K8VUhpnQ6BhjGiPEo6dTXCkefjJJ5TiYe7zs+bHcG+JK2dA04DMDnxKLDHxkSW94NBUkoSSfUp8HT2k+ - nH3iuagnSLz52C18eeQm9hy+hk2NF1C56zxK686guPYU8qtPIrvyBNJLj5L4FIYfT8LYJpATtnWX05bI - 4SyMp+Lmxgz8mZg3wH4wAx+bOYcjnA6cICibOiEVDsJoTM+8wPj095RqBjUiE7PzaVZFrY6cCROjUxgi - AwaW/rChoGx4UbB2ofNB26CxzvW/GzCyl1L9LodrQAbcROk0UzvmHokpin6cxHe3X8PO/VdQVf8NSref - RQmLvEYd+TEoig8jsaCdEx+isr2OXk4mbE31wcJJRt1QNFbquDADfyEWGfhEz1qMwKj1cPZN43DxVcCK - F8alf4y1YCxy6ojYnrPIR7jIWfulivwhg4SHRibxgNCm0syEGeaO4bDmRWKFjtNrDbDFp7oWgfAPK6BT - mwwHhjAJ5nSSWfRjJP50fBajXNp/6Ps4ceIhRc2Jj05w4qwl09IXwMwhnAiDqX0Y9QIR+FyLM/BXgjWm - Cw1om/rRi5ZNBycedgIVJnZiVHT2I+dQDzLa7iCx+Qbi991AzN7riG68jsiG65DVX0PYzquQ7LiK4Lpu - BG3rRuDWbjpw7lT9QmFqFwoTWynMyci/1zgyA38jFhvQNPamlyydTmwsrN1iOAypwdh45hEKTgwh88gD - pB0aRMrBASQdGED8/n7EtvQhuqkPkfvuQdZ4F+GEtKEXkt091KDy6CZIYETiRjSbkpnlaxxea4C7hmsM - PF+5+adSCZbDyjkKloQedTllXcPIPaYSV7QPIrltEAlkIK6lH9HNfYgi8Yi9KvHQPb2cgZD6Xq5JZcJq - jG0l+Gy1/QvSWvAOsB9cR7Rc06FolR7/lQY1oiupFWNo0j56FnbBNesrOKYdhW1yB6wTDsEi9iBM5Adg - GNGKdaFN0JHsg6a4EatFe7DKfzc+99mF5RoO+EzDnmO5ilf//JdJPmmpWzLOABvsF+aItcvsmWSHhKXp - Tfz9DfzjR7A1u/9MfD796sEW6kyw7WBf+CVgQaojX2BAPdQf/NLMjSVL/gMGC1sK0EICNQAAAABJRU5E - rkJggg== - - - - - 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 - 3I/6/dAAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - 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 - 3I/6/dAAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAB10RVh0VGl0 - bGUARXhwb3J0O1hscztFeHBvcnRUb1hscztMoJn+AAACZklEQVQ4T2WTWWsTYRSGszdtg1r/Rk3Tmv4S - RWhUEAQFJVqLF7FNmqSpXdKqRazQDW/0pimBghKsuMRWaNJ7b70UsWaZJTOTmSSv5/tmGqY68CQzgfc5 - 3zln4qDLSbgIN+Gx8Nrw/QP7zQnAwWCXK7tZKi5vHYGxtFVGdrOMJWJx44goYWG9jIW1Q8yvlZBZLe4z - iV3gyW6U0aEnDn2YdDjtE9ommRffWMpvF3jn1g95SNVaUIiGaiIrBkdSWhAJvdVGamWfpfrsAh+zMoGs - moGTEA/KLQgNA3WiabQRf/KFpfpPCVIrX/lxJUWH1NCpmtENMWqyjiqhNdv4cPDjP0HPFFlZnwIFJ3JX - MDrfg9E5hg/hxz5cnGV4MTLjxXCaSHkQSroRSrjzTOCPLX7kgpps8HBTNxAmgarpCFO4oerd8PO9JOqi - hpqoIphw8SP0TszuoUUTrko6CXzQaJCsskIzGcn4eFvDaQ+vXJc0DE27MUTh4JQliKYKXHBcb/LKLz/P - 8PDqpzRV9kBsNLvHXnmfRFVQEIy7SeDkgr47ibcwWh38rmu2yl7ILEiVRVkze7YqPy1M47iq4MKkKei/ - PbkLg1b0q6rxgSm0DdazRIIQVRasnp9RsFJTeXj5XRyDj0xB4GZsFzoJflZURN9ctgZm9swqd3uOu6gq - w0lhBwZjDr6FwI2Hef6SiLRzgQZWp53z3Ys6KoKOP4JG89F4i/nCd1Z1wP4e+CN3XxevP9jB1fEdsO9r - 4zlE7ufoeRuRe3QfNRmLbuPSrVcHlDn1IrG/ci9xhjhLnLMYsHHegt0HCLcpgOMvLlVmbi0MtN8AAAAA - SUVORK5CYII= - - - - - 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 - RK5CYII= - - - - - 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 - AABJRU5ErkJggg== - - - - - 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 - 438ACHvF+rT7w7kAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAEZ1bGxFeHRlbnQ7Tu+vCAAAAk9J - REFUOE+dkutLFGEUxl8iqOxif0oZVGtLC25GQRQSrkJE1poGZSVFQRdFESXLTC1nliKkLIiuiFR0M7Ww - /ok+VKzb3ua2O3c5nXPG1ZI+NfDjGYbneebMO0dIozMTiYdfQUYSD76wyqSIRIwSMzBM3A/0FurgyPSk - EGK5oAf/cw2OfAIsWCGG7n0Gz58Dy/UCHMT2QNVNqK45zVq0XcSDghXgeHPQf2eKClaKG3enwcUC0/HZ - VCK67ySzY28LGBgyLBcM0wUdcVwfriYmgoK+25PgYmMRTUSBjEgBjVV7jnPAKLqgITqrAzYW9Ay/p4JV - olf+gCP5HCCzbjrz6kJk9zEOagUH1BKGi5/pQ9fQWyooE9033/FIWaUIkV1NHFAZMi+SR7ZVH4FU1gDT - 9qGj/zUVrBadA2/AxsbwzkYkjqY4hNGoYIDI6zZURg9DKNoAoaoAOqPL114GBW19r3ikZEZDY0MQQnIY - ZDQHsprNbIkchB8pjc/qwpVxKlgjLvaO40gev2khhFBg8/YDkFFtyOB9WrUgraAqFv/Kc91jVLBWnO8Z - 44KsZjEcYCzYFK7nAPGLyFuQypv8W890Pg8Kzna94JEyZMRgKVBRGYOKUAw2hmoXgrOkOYv3obX9KRWs - E60dz3ikNJuCtxDf8Vs3bN0P334qMJvDMAaTqMmsyfvQ0vaYCsrFqfYn3GiYuG1M6X5+L9D8L05cehRM - UBsf+FjfLMOf1DVLqBLUNREyxI5Kf9MoQc2h61NYUIbgPtNhUNsi5UtYvwR6hmGx7DcxiPZxE/VvNwAA - AABJRU5ErkJggg== - - - - - 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 - 438ACHvF+rT7w7kAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - 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 - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAARdEVYdFRpdGxlAEZ1bGxFeHRlbnQ7Tu+vCAAAAk9J - REFUOE+dkutLFGEUxl8iqOxif0oZVGtLC25GQRQSrkJE1poGZSVFQRdFESXLTC1nliKkLIiuiFR0M7Ww - /ok+VKzb3ua2O3c5nXPG1ZI+NfDjGYbneebMO0dIozMTiYdfQUYSD76wyqSIRIwSMzBM3A/0FurgyPSk - EGK5oAf/cw2OfAIsWCGG7n0Gz58Dy/UCHMT2QNVNqK45zVq0XcSDghXgeHPQf2eKClaKG3enwcUC0/HZ - VCK67ySzY28LGBgyLBcM0wUdcVwfriYmgoK+25PgYmMRTUSBjEgBjVV7jnPAKLqgITqrAzYW9Ay/p4JV - olf+gCP5HCCzbjrz6kJk9zEOagUH1BKGi5/pQ9fQWyooE9033/FIWaUIkV1NHFAZMi+SR7ZVH4FU1gDT - 9qGj/zUVrBadA2/AxsbwzkYkjqY4hNGoYIDI6zZURg9DKNoAoaoAOqPL114GBW19r3ikZEZDY0MQQnIY - ZDQHsprNbIkchB8pjc/qwpVxKlgjLvaO40gev2khhFBg8/YDkFFtyOB9WrUgraAqFv/Kc91jVLBWnO8Z - 44KsZjEcYCzYFK7nAPGLyFuQypv8W890Pg8Kzna94JEyZMRgKVBRGYOKUAw2hmoXgrOkOYv3obX9KRWs - E60dz3ikNJuCtxDf8Vs3bN0P334qMJvDMAaTqMmsyfvQ0vaYCsrFqfYn3GiYuG1M6X5+L9D8L05cehRM - UBsf+FjfLMOf1DVLqBLUNREyxI5Kf9MoQc2h61NYUIbgPtNhUNsi5UtYvwR6hmGx7DcxiPZxE/VvNwAA - AABJRU5ErkJggg== - - - - - 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 - 438ACHvF+rT7w7kAAAAASUVORK5CYII= - - - - - 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 - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACR0RVh0VGl0 - bGUARm9ybWF0TnVtYmVyVGltZTtGb3JtYXQ7Q2xvY2s7FupomQAAA35JREFUOE9NU39Q02UYfwnq/JH9 - Veeph7QBkpqpZJcWCcE2kBHywztFhaMmlyTZUtLBnYV2VKBp8kMv3WHDm9eZBRm6RQ5H5aw2Q+W2McGN - jRsE+1FyDsavPj3vN67re/e5z/u87/P5vM/z3Pdl4e4bAuiLIER2vX9gc3dVxRnbkQqL48PKCVuVynLn - UPnZ3yqUOXQexfPCd0lDMG3NZv+JW0oVi60fqL51fvYRArpLCP1qACUh9IsB/qsX0Xf0CG6rlJe1RduW - UP4j47d/ZD9tkXMtizAody+3VVUMD2rPIND+NSzlb0GfKUFr0npiKcxlCvhaNRhoakTX/j3Dmu35MVzX - mbuJsax48Zw7B9/p+uPiOQxoTuGKJAWmmmOwm27BNfiXwDdrj+GqJBmu+moyaYCpVNFGBo9xE9YmlxRT - v/B9p4VOlgq78QaGgiGEwlOYnvkbY8Q8thtN0KWnYujccV4FvkxNKiaDSKaTp33vVp+ERfkmzHUNGPSH - BOH/Px57/Q9xq74Rlt2F6Ks9hFbJK+1CFfr0FL/vGw3a5VJ4epy4LN2ES0lp0D7/MppWvgBl+g6MjYcx - /OcYPA4nrsll8DZWozVlwwgZzGFt0o0ItmigS0tGIPgQgdEwevr64fYMwOv1Ir9QJcSB0XH46VwvexVD - 9YfpkhcnyWAua0l+yT/0RR2uZUkx4nRjNDRJmJjlSeTuPAgHGfD1iMuDjtdkcFWX48L6RF7BXKbdsO4H - 6+EDMO8qQE+zRhjeWHhaGB5HTsF7uO9yC2vH+WaYX9+K38uKoU58ziC00LD22VJ9Xib6P1ahIycTvu67 - mJyaxsTUjMDZ2/aj3+2B32qFMU+O+5V70CLbiJrly0rIIIrFPz5/QdPaVVbzXgXs+3YJJTrUn+NBXy9m - aPoPentxj2Jjdgbse9/AzztzUbciQU/ieQT++7PIfaKlierVq0Y6d+Sht7wE5sJ8GDdnoCNLgs6cdJiL - 8nHvXQUMuRk4vWKZr3DRwgSuO/VMPGOBrzTcJKpg0cK4EwlxepoJbtIttreL4SQzW1kRTNuz0bxuDWpj - Re1bnnqSVP8+qro4MWP+C2rCWW4SSZhXGRNdUhMrun4iThSkBBwXi4KfiGOuq6KX8J7nz+ZF+DSn2adi - ehInY8WzENG+0NOjBN7fAsITs8xjvh9x9OmlTEBMNCGa/QP0BTe7WAX1rAAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACR0RVh0VGl0 - bGUARm9ybWF0TnVtYmVyVGltZTtGb3JtYXQ7Q2xvY2s7FupomQAACt9JREFUWEeVVwdUVVcWfWkm1iRm - IjpGE8eCxkJELFiWWBGlKaCIgqImFhSVENEYNRETk2UDFVEsUbEQKyoI/4sU+aIgIPKlF2kfPvCBT+/u - OecCxpWMa2buWnvdd9vZ+55z7n3vSVl7d0nZv/0kqX4/LqnOnviPoPJWO95uxztvAI+JuX+349NWEw/z - Zf2yk6ZRYQHNJSqppbLsb6DSQfxOyO4dvbJ9jtjnnT7mn3/GO77gjLeKjKHgtLcq77R3fM5pr1tpxw4t - C/jBTYfmv0sQYloqNFLzX9BUlCdl/ryDhqkIAWXFUouWSF8DFUEcf3Dv0NyTRy+rzvlAE3QLNYnxqH+R - gUZVHsg41bmoy05H9bNYlAb6o4BEZXt7/hG5Z9eXtP49ghDSXF4iCZSVSE204fTd26mbCisRA6TMs48u - dwlXe65c1iPb2+NI/pnjjdrHCjSVFKFJXYD6zGTUJESjOiYCVZFyggzV0WHU9wj1Gc/RWJCDikcPkH/y - WGOq536vndbzPyJ7HJ632H6zppg8Xiil7trGXJJQwqoYVMSuZTu29sv2OvSs+M4NNBbmozEvCzWxCqQc - Pgj5shW4MHEGTo0YDzIo6gsTp0Pm4IjkQ/ugDfEncWEkJhlq/yvI8NyXeMl53Rdkl8PyVhORM5J+2MJ8 - kpRCSpo1an4U5NdcNvTN9NyXpQmVoakwF7WJ0YLYd4IRTkyai8vb9+GWnwyBshjI43NEzW3u53HfcVOR - dGAvyu9eRXVsJErlAUg78FuWz0rH/mS/TYS6QFJudWVOSUre4SY1Fav48W1n41nd0vbvjSy9F4SG3AxU - PrwHmf1yeI+ZhuteFxGhzMeLIi2q6hrR0voS12+HiZrbWWqtGL/udQnHab7Mzh6lV89BG3YXavLk8192 - P1wwRp/DIUQkuG5mTklSbhNKOFHeS9zzo1eBny8aXqShMuIubpiY47TpEoQ+TkNSrgb1jc14+RJvBI+n - 5GnE/N/N7XHd2BTqiydQcc8fuWdPIWbH98eJpzPzxW3awLyisOvflW12npC2b29LXfpzVNHO5UvsccbC - AYrEPGQWatHQ1IJW2u1/A8978jwHCmUBzi5whMzWDkVnj6As+AaS9vzU4rdqxWTi69TOKwrv/v24bW53 - igIogeIUULrvwHGD6XjwJI3IK7Dr11NobmklvPyzbm2rOQTc1yL6XuJpYjpmWTjhQVwKFE8ycHLCbCRs - +xaFJw+SF04iapNzIPF1IfDJEOWdo5bmg+O/c2mpVcaiLMAPvuOnIvDsTaSrKpBVVIk6cm1Tc+ufIMK/ - tQnxiWkwtdkIedhj3A2NQlJOMe6ev41LhkbI89xD4fDBYyenFqfx4wYQL98Rwgudgpcvc0k9tF8kTOJO - N5wyMhMxz6KEy1ZXCrc2NLeh8Q2Ie5aKeVYbEBL+GLHxCVBmFoi1yZQTZ2db4anLWmS7uyLh+y3wW2C1 - hng/ILD3pQ/CHJcH5F0+j+ILxyFftAg3fjwodv6CDLCRmvom1JOIN+HJ0xTMsVwHeehjPIl7iqJiDXKK - q5CjrhLrb7l7Qm5jjZRNdFf8uBWBNos4DN0IIgxdQ+0d0tT+fyDf0124SxEYIchfFFeSoUpoqupQ29CM - OgaF43XExCdjtvlqyO5HCXJ1aRnNr0duSRVyWURJJR7JouA3aRqSnZYixW0DgqwXZRDvhwQ+klK3+4uX - VJXcvozs3a44q2eIxMRMsQNhhJBfWiXOOnuitqEN5/yCYb3se8yjmAeHRCEmlshLNGJeQVk18mgNg9en - pObinP5EPF9tiyTn5QiytK4i3p4dAnrcW2gLzU1fpG9dg5ND9ZGRW4rHKxwRsdgOMgsr3J5pgisTp8H3 - K0OcGqKPY58Px2IHNxRqKrHQcTsCg+Tk9jJU1jaiqKwWKk0NCjTVJLwaVku3Ck+eGT4eyhXWUH6zCAFm - liDeTwiciFKPu5ZWVZyhqRSj8/qTkZaag7ySagSHPYQs/CHkhHvhUQJhimhEPoqG+z4fmC9yha2DM8U+ - XISpqKIGReU1KCyrgYrAIhhZ2YXwNZiCZw4WeLrUAjeNTauJ9x+vBPjPNU/P8/FAykZHXJ02G4nh0eS+ - tsUqBhljwwx1RS3U2joUa2sxzcQeXj5nkJiajWLub0fHXBZSQEiKisONmXPwdPE8xNia4Q8j40zifeWB - 7pdnmAQn7/0JKZtX4L7dUoQfOoF8QU47eY2YSZi4pLIOpQTbFTuFR7gtIITVtQkpr0WhQA0ij5xCmN1i - xNsYI9KarndDIxnxfkwQOdDF23DqNsWaNZQD65Cw8RtcXbCUdk87EORtuyquaCNhYg2DMn2R4w8IfxiN - MnoWfe3jJSSShfK6QgqLv60j4r52QOz8GQg2mYtfRo7lN1F3gjiG7zsOHKp3bebc1ix3NyQ5OZC7TKAM - iRQ7YAGv75pjzYRl1fWwoVMQERWNcnoWfSykXUybN2qRTPlze46piH+M6VRcmmDUOqNXnxHEyy8lcROy - Gz46bTBFHu20Bgn25khwWY9rZguRn19M8a7F/CVuKCXiDnImrKipFxn+gARU1DSgnMFCCJaLvyOx9ShU - lcLfegmerv8a0aZTEGw0GUdHjrtPfB0JKATwddhl48Avjf0mz2p97uwojkqEvT2C17uiuLz6ldvLBXmD - INTSkZtvtwUKOhHaWmpTnxDS7o1SEh7iQgLtScDiuXg4yxDnR09sXfXZQFPiY/eLa5gLq2A1PT2GG/je - tZgvkiX1228gt7KGfAOJUJdDU00C2kmYrJIuHAtbVxIQI56FCAKPl5ZUIHTzVoTY2CB57RI8mjUOVw3G - 47dBepeJpxfhz9fxmRHjuWI1nQd07trPa5hB/H1LS8SYTUX6lrViBwG2y5B2L5wE1AuSyroGceOZLXSB - IjoGVXRDcpsvoozQSAQtXUnr7JBKt17UdAP4G4yBx0C9hL6dOg8knq7Md2LQaOaVpFNDDbhiNZyR3Wb2 - 1PnKa4i+Sm4yB9Emk5Cy3gFKVycEmlpAtmodnp2/hIJnSdCoS1BNpOEhoVApk5F4wQ8ha50RTB5UblqN - 5K8X4qGRPm6OHo3DA0YVTu7+yViy34MgPsm8B+hRRYWVaOX+/MgieLDHvI97jz/8L72MaxOmQDF9LOKt - jZHptgbKzauhcFiCYMv5uDPXjE7LXATMs4B8vpXoV9IRzvh2JWLNpyFysh4uDhuFA/2GZ83s8ekkssvf - gyLxym9dlI7254NA5Rgp0QbfkLRB17nZkQ/dB33QdfCevkMv+OiOab0zbgwUU/XFOU5eZYMMl5XI2rYW - OTudkUXCMugKf+64ALEUtshJI+H/1Qh4fzG8dVfvwVe+6NR5GNljchH3cv8LEuNwX/5voeJFSrSBVwlX - JIDfEa88wbHqZfZhr1k/9xly/9jnI+CrOxK3R4+EfOxIhBmOgmLSKIRN4PYI3NEbjvODvsSRz4Zhj87g - UJPunxrT+j4Efu8Lt7P9DgEevYdSFxVWUhHgJ1Xc6QAnqhDBicmqOW69Dbt8NNb5k/7b3XUGhf+qMyTt - QG/dMo/eutivo1vO7d29BkZs6Nl/17jOH06g+f8k8K7fJ4i/og7iDhzqNYS6qbASTwFdyUNHVzx76DBe - /aaxATbEO+F3eG9CPwL/7fC3Hdf808G75RcMn/FXxEz0Jvw/pcMj7Er2ChPwNx1fp1xzm/t5nOfx/P+h - SNK/AWQKHYRpTQ6JAAAAAElFTkSuQmCC - - - - - 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 - SNK/AWQKHYRpTQ6JAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAA90RVh0VGl0 - bGUAQm9va21hcms7hlxagwAAAoNJREFUOE9tkttLk3EYxz1sbW5q8wAKBYK76aK/IW8Er7rpJohKsiCs - IAwkCSkjUQtLSjKxaKUdjCU5QULIu7DpUvI05+sObB7W1rteD3t3cMq33/PbO3mFHviyd/z4fJ7nd8gC - kKVUtpKcTHRlJzQFJ0/rjeZTOvZfo0Sr/GZzVhFkPxrxIZOxykqMVlTAduw4rOXluDvoxIMhN+5bBdz7 - 5ELzRxdBWrUgh8BMEexu74C7tRUfSkuwEZaUlXTdee8kSMc+DwS5GUFqbx/DrPMKg+3V1eg3mSAEwojv - 7iOa3MN2PIWm/gWC9P8V7MQSsJaVQ2hpwURVFV4X5GPWvQ6Zw3uQ5BQa384TlKcWaDKCDXGLjV2K8Zoa - 2Mxm9BkMmFr0885SLIXIThINllmCDGqB9qHNywW+dZGP3XO2Dl1nLqJXr8ekM8BhkcGhrSRuvvpFkFEt - ONI+nBbQBJ/rGzAjrMGxtIp3l69jKSBCjO4izOANKYEbfTME5asFurYvHi6IslFDkozNaJKPGwhvIyjF - EdpOw2t/47j2YpqgArVA3zq0wgV02i/H19D3bRU9Y348G/Wg07aMNusigxPwi3Fcfe4gqFAtyKNHQhVN - pK+KTpsmoD0HN1nnSJzDvrCMK92TBB09JKAXRkVX1f3ViycjAjqG2AscnEPzwAyaLA54wzG4f8u49NRO - kEktMNDzpEp33uV7DkpJ3jkgxuD7E4MnJEMIyqjt+kFQkVpgpOdJFaHTJvhgbAYrnQl2re/g/OMJgorV - AsPtgQU0vpnHLcscv2e6qvreaXZgP9mep1DHxq7tsuMCg891fifo0BnkshhZCmlBiUlJkZJiJSUstK4B - kPUPFn6IWSZZbjQAAAAASUVORK5CYII= - - - - - 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 - RU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAA90RVh0VGl0 - bGUAQm9va21hcms7hlxagwAAAoNJREFUOE9tkttLk3EYxz1sbW5q8wAKBYK76aK/IW8Er7rpJohKsiCs - IAwkCSkjUQtLSjKxaKUdjCU5QULIu7DpUvI05+sObB7W1rteD3t3cMq33/PbO3mFHviyd/z4fJ7nd8gC - kKVUtpKcTHRlJzQFJ0/rjeZTOvZfo0Sr/GZzVhFkPxrxIZOxykqMVlTAduw4rOXluDvoxIMhN+5bBdz7 - 5ELzRxdBWrUgh8BMEexu74C7tRUfSkuwEZaUlXTdee8kSMc+DwS5GUFqbx/DrPMKg+3V1eg3mSAEwojv - 7iOa3MN2PIWm/gWC9P8V7MQSsJaVQ2hpwURVFV4X5GPWvQ6Zw3uQ5BQa384TlKcWaDKCDXGLjV2K8Zoa - 2Mxm9BkMmFr0885SLIXIThINllmCDGqB9qHNywW+dZGP3XO2Dl1nLqJXr8ekM8BhkcGhrSRuvvpFkFEt - ONI+nBbQBJ/rGzAjrMGxtIp3l69jKSBCjO4izOANKYEbfTME5asFurYvHi6IslFDkozNaJKPGwhvIyjF - EdpOw2t/47j2YpqgArVA3zq0wgV02i/H19D3bRU9Y348G/Wg07aMNusigxPwi3Fcfe4gqFAtyKNHQhVN - pK+KTpsmoD0HN1nnSJzDvrCMK92TBB09JKAXRkVX1f3ViycjAjqG2AscnEPzwAyaLA54wzG4f8u49NRO - kEktMNDzpEp33uV7DkpJ3jkgxuD7E4MnJEMIyqjt+kFQkVpgpOdJFaHTJvhgbAYrnQl2re/g/OMJgorV - AsPtgQU0vpnHLcscv2e6qvreaXZgP9mep1DHxq7tsuMCg891fifo0BnkshhZCmlBiUlJkZJiJSUstK4B - kPUPFn6IWSZZbjQAAAAASUVORK5CYII= - - - - - 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 - RU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACV0RVh0VGl0 - bGUAQ29weTtCYXJzO1JpYmJvbjtTdGFuZGFyZDtDbG9uZW0O31sAAAJjSURBVDhPhZL7S1NhGMet5ebc - UvsP+qf6JTOiQijKdJWYrDTTaXnBS3mJJEgjwlWWGNmEzamtwtWvUQTZZRe3nbP7zs4u357n3c5MEBp8 - OIO938/zfc+zKgB7MJvNuok5r+ve/Cfcnf9MeDExt4XxOS/GmEdbGCWGHrxz01n9foLqcQoUiyCKFQpM - oUSeGJ79CDprFCH6HCB0xCGDwWBadHyBoiiQoylBRC4hRTOIJVVkcwXcmfGwoFYT6GzTHtfAzHv0T38g - PLBNbaJvyoNeZnITt4j7T7zYkZNQ1AJskxssMGmC6r6pjf/W7hp1wxeKIpPNo3vMzQKzJtD3TLCgiGQ6 - J0ik84J4Mo9YKidqW4ec+BWQkVLysI44WXBYExhujKyJiYmUijgJOBQtI9O9uXbH7VX88EfEgM7B1b2C - jkGnEFSCSQomVEEkkRW123rf4vvvMOL0e/uAgwV1mqDmar9D3JUDEk2U6BmOqQjFsghFs6L2xe7X+La9 - Q3IVl20rLKjXBMbWnhXxoiLxrIBDOwIFQSJBtc9fX8LX7aAY0nrzDQsaNEHtha5l5PLF3ZCsIEAEJQV+ - gq/W3PkKP30hupIq2vzbwHTOukSCgggFpIyAg356+sIZMfVMxyLGZ9eoyTKa25+uk6DyPzCdvfYSKq2K - A/4IBSMUJP6E0wIpruKU5Tn0ev1Rrs5hQlcRnL7yQuyaV8hvOUbrlGkTEm1AoncSJkFTm50P13NGQxPU - NLY8dp20PEOTxS4ONl6y40TrQomWBRwnjjU/XOdh+wkOEkaijqgv01DmSBn+biJ0uwJU/QWlHMOEoK1R - 1QAAAABJRU5ErkJggg== - - - - - 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 - BwdQ9F/AOGC3chKJ6AAAAABJRU5ErkJggg== - - - - - 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 - ilptQ7AAAAAASUVORK5CYII= - - - - - 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 - ilptQ7AAAAAASUVORK5CYII= - - - - - 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 - UkcgAAAAAElFTkSuQmCC - - - - - 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 - UkcgAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAC10RVh0VGl0 - bGUAQ2xlYXIgRmlsdGVyO0ZpbHRlcjtSZW1vdmUgRmlsdGVyO0NsZWFyKfWMAgAAAzlJREFUOE+NkmtI - 01EYh09YfepCbFJWs9JmEa7bVrpUyCLSsgSjq2PShSwrolpIWslyc1mhdtvSTFvYnF0gtWWolSlqTpNW - uS7qTLFpXv5Lc9Np+ev8oyKpD73wwPnw/p5z3nMOoeVyLVI0yxDtd7IwNuBxYYx/3aPYABTHBOBhtF/d - g6PiJ/cO+cZpti/ks72UUQDIL0iebNkR42WJs/PlLfR31GKwpwFD9hbKBwz1muFoK0VHTToqkzc6b+1b - ImMlIwRFMf59g7Y6ND68isozu5AdxEHOmkm4G8pF7qYpMF3ZjY+lqXB2lcNw0MdGBWNHCPIPifOspQoM - dpfhW78VX+nuXx1NFAs9xRv0NhSgrSQZDTop7uwR5f8lyN4riqrVbEZ/cyoVNIEaYG86i47ydbDoQlAh - E6DmpBAV8cuREbFgPxWMHiHYtHQqx3BY3N757BScnwqppAV2SwraS9aiteAYPuSdQWtRCkx6Vc9msYfr - X5fIGtOk86VlyiAw1Qo4O8rQ+z4JzAs5PlVeQ3nkFuT7+tD5w8/T3jH62XMEFIvO0+viTQ8v9lXIKMpY - 9VbvnYXRAUNvb0aisyoO3aZLeBwRhvfp6fjyzgxDcIhNO4u/4f7qNUxPnQlmzWVcnzE7k9zbI/wtkYfw - g3XbPMAYo9FVlYIcoRC2Aj0GirNgf2VE8fYdw32mSgwU3QBj0CGN59lMnp1bT2oS/X9JJujCPdBnTgZT - o0ZZ0jFcFS22dWtVcORpMPDiKRy5anRlKHFl0UJGzpkiIKXKIGJU+pBqpS8rmZAt8YSj5Tba8qV4npWA - BDd3yf2glcM91+PRq1Xgc+Yp5K4KHL7gNjPsvNtMQh6dWEGq5EJilItYwcScCD7s1qewmTJRceE4spb5 - 29q1SWiLk+JjbDisLJp4ZAiXdJ+bPGMeKTji95MfY4yja+gl3qi9oUKq9yI0q5WwHg+H5UAo9KIFw41R - IWiVbURjggyJru71bOjPGk0ZT5nEonLlaUtCA2HesRppXnOZ01xeWCrfi3ktCURxsBgqzvT03x/iXyRy - eS40pFZxePVKrrtAyeURBZcnUHCm11PU8ZxpLv8M/j8g3wGtek8hsHHK3gAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAC10RVh0VGl0 - bGUAQ2xlYXIgRmlsdGVyO0ZpbHRlcjtSZW1vdmUgRmlsdGVyO0NsZWFyKfWMAgAACSlJREFUWEedlgdY - VFcaht3sRtRoXM1mscZAIHYlxggqigKKoEgRERGQ7uqiJthdsQdQQSWgdEZFJIiKIAM2XJoCUmeGTkA6 - AyMgwzAFjd+ec5HJaIiR/Z/ne+6ZOef+33v6HQKA0Z/EXxT00R9Isc0fRr+f3Fde+H0oGv6V6GOioW+k - 9EbDFMr0f9qGtlUEeisUzRlfeeG3UDQdGuWxckp20HqngjDLCG6EVR4nfEMhl2Ul4LGswA3fICgItSjK - D7XIzwlcx3p0bq2r/w5tVfLecKJ+mLcgFM0ZX3mhL2hjxjgjwHx9UfiGvIobO9GYEYjO6lT0tJZA1MrF - Kwkfr3sFeCWug6g5C6Kmx2gvi0NtijeKr7kiJ8Asn+1pZEXyjCCiILRDTCiaM77ywpueB+3SGZ8fYhlX - n+oHSfszdFVnoSk1FBXX3FHktxZFZ1ci57AaOD4zUcVaiNas7RCWn4KUH4VXL5KJ0gnUI1QleSDVxzjh - +Ob5X5K8FIIZCUVzxlde6GvwcW6QRQK/8Caac5OQ70nM9s5A9v65eHJwDjL3qiNj95Q+gNMzURGhicb7 - JujMd4e4yhOyOh/IKo9AXHQIkrrrqM/8CQ+9jdgkL50SZhQUzRlfeaGvgVJuoEVPr7gDcdaqSLKZgIwd - XyNzz2xk7puN9N1qSHP/AlkHVFDgNQ2lwfNRm2gEQeZWCIsOorvUA6LC3eh8ZI+Wm+ZkBB+DfUivl+Qd - RUSn9i1zxlde6AMYnu1vLnkpLEJDViKS/r0YN9dNQIKtChKdVMF2moy7LhOQ4jaZQHyFQjIK5Ze1URe3 - Hk137cG/74iWRGs0JzhAWHYFgqwziD+wnAJ8SvQ3aqJozvjKC28AMn1NajoKPfFSXIJfX3WgpegeeDGn - kO61GYnfL0PClvmIMf8ctzeOQ7LLROT4LENxmAVq4negLdsHwl9iyXp4gLYH7qj0X4Sbu5a2kbyjiT4I - YFiK95rHtXGukDWyIRNXo1fWiJeyJryU1JBVX4GXwnz8KqkkO6Gc/C6GtOUexA2J6CoJR1vaQQgebIMg - wQaCW5tQfnEVoty0n5K8dAQ+aAqU4j1WnuSEW0FafQ0yUTlk0nrIepsgFZdD2s6GqPYIOgrXkaHWQf3V - BaSXs1B0jEzHj+qoZi1Ba7Id2pOc0Ra7EdleyxHipBVA8n5C9KcAzC4I3qa9Iv2MMcTcs5B2cSGTPGMg - pD0Ehn8d3c880JFv0QcQpYmqC3MYAK73NNRGrUBbsj3aEx3RGrMed3Zpw8Nk1mqSl56YtINvmTO+8sJv - h9DIuP16BY3sHZA134dUVEl6XwPZizxIGyIhenacjIAlAViOhigtVF3UAPekOnhnZqI22gBtSQ54Hm+H - 8qDVCHPQKiL5xhDJzwHFeBeABjMNF50Xbko7Y0JGwRfSzgJIhTwCkwRJTRi6yT5vz90AfqIuAViEygAN - 8MiWLPP7Bo3X1+J5oh0EN6yQuHsJjprMtif56GlIFyAzAooxEAClpI1HXt6qfaviZ1dIysMhrbtBDpYb - 6KkIhLD4INqzLcFnr8LzzCNozfBBU8optGaeR0uSKwS3rZHvawA/q3nxJM9YInpRvXtJMTEQAA3aaKjp - t5OnRLvpVNSx3SEqDUY3ARFyTuNFwT4I0q3IKHhDkBOEvO8dwdnmjGexXujkXEFlpAMCbb+rMpirMpXk - GRWls2zZU1tbPltvRfL2adPpdqQgDMSAAFdcFtMHhRhmOm+yWqj9Qs4Tf1s8f+KFjseHIchwQ0eRDwR5 - Icjd6QjBXRZkJckEZAs4rFN4FObdYKihMou8Pzp8sbbu4y0OYgn3DvjxIbhjsCrd6Sv1v5M6BmJAgHD7 - hfTRvyCHTRv3qfJpMw3fS87a0rzzxuCnkl1QchU57mSlJ4Si92kcZA8j0ctj48lWx1demprW5L2xFzW1 - 9DNc7MUyTgJEtwMhvs9Cw88/IWbx0gRSzyzKAQEuWH475ML6PpFgpoNotOH08d/c3KpRW8vehu6mNKSY - m6I7NQriO6HoIQai+CBIC+JBTCUsrcV70pzsxJL8OHRdO4sXl7zRyfJG21VfRGtp89/kHBhggOiH+CzK - aXZsRYwjeviZqLrti0QzchPeDoYwxg9dUT7EzBeiJzFI/WHra1H2dXRe8kR70FE8DzqCZv+juLRAu+vA - hK+1SS660D8YoH86Pg23nXGeF2GN7ppoPOewUH7dCzcNDdF2+RQ6wk+iPfgo2kOOQ3Q/AoJAD7Sd34fW - c/tQ5+kO1neLuvaOV19C8tDOMLthsAAj/S2n7sv1M0NP7VU03XNEW24wckI8EaWzXNZwbj+avLaDf/oH - tBA1/7gd9Ydd8Mt+Z0TM0xLuVFZdRnLQE/H9u2CAoI0p8YgTa1Rt0k4YkMsnBg3xZqi7ZQPe7QAEG6+I - T9lo9rr+mCsqXdei0sUYFUTVO62QtMbgtee02e7kfXoh/e7z7EMAaNCXhu9YOln37p4lEDfdQuM9F7Tm - hiL9nAfuWJj28lknUeFqjHJHI5Q7GKHMvk/1vrsRa2gg2a86ld4J9Mto0CNAg76gpKs+ZmrM5lmQtJL7 - nnMJvMhj1Bytl71Q5myMMrtVKN1siMqtFiixMUSJ9QqU2hmgzmcPovX1JPumqBuRPHKIwQLQxfP5tU0z - X3TWZ6M42gvxZsZoCT2OUvvVKLZeieJNBuA5mSNSU+t1qdtG8DauBNdSlzz1UXPMDZE6SyXuk1QpBD2e - PxosAKUedcJAZVvaRY+OsAWLUBfggbLNRuBZ6RHpg2tvigsz5grd/vHFzoBZ84TF/7IE10IXHLOl4JFn - 6V5neH85vYXkoRfUoABoUAi6iOh5PumAssrDNFtz0vs14FnqgWNnjIDpc4UOYyfqk/ox9mMnrgiYqSHk - OZqjyHwZAdHHg9X6OKSsmkTq/28AKnqIjJgydPj4IxPU/vvAzBD5dqbwnz5H6DR2oh6po18/dIg/oTAB - ZETybEyQvFIHtL2a0oh/krpBnYTvRv90KNFk/1FWjT06Tq3O+bNJuuQ/xbufAaVQtJ62Ux06XJn8x8w/ - UZ9vP8CH6J2gSeiUUNP+Xsu32JsnhaCHD62n6j8FmWByvmvyPg0Q1IQmpMb02W/eH++tBzDkf6uXBTIi - UkcgAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAC9ElEQVQ4T4WTXUiTURjHV6YhYh9WmpSSGQPBNG1tuvk65+a+nHPT6WxOt+HM - r/zI75WmBkURdBME3QYFIYUYRVFBdJkfF2GpEV2oTec0K5crb/6d520XEkEHfrwv7zn/33nOeXgFobGd - EcbY8Rfh/yAiBM1vYwjCOE3FK05XAZt7AL1Dt9E1cAvt52+iufcGGtqvw91yBY6GS6h090NvaYGsoBxZ - ytLXLEtCQQSntcIzeA1WVx8CwU0ENv6wHuL7j034vvyAdyUAtakBrT2XkK0qBctGkmCntKAM3f1XYan2 - 8EFavLhKBPiQWKqBmNNiYtYHpcGNElsdJAozCaJIEEm2jvOXYbJ18TtS2BsKf5hbQxang7rIhgV/AHKt - kwlqIZIXkyCaBFHifDPaWFlF5W2s3F9YWA7gk/cb3n70Y5ztyimMMJQ6Mb+8jpyCKphP1yKTM5BgNwmi - T8mNaO4chLakid918oMPEzM+jDPGGG+mlzDHwnO+dWQrbDBVuJEu1ZJgLwl2ka2xrQ8qYx3yC2uh0NdA - rnEhV+NAjsoOqbKSBU8jK68CErkVxdYaHBerSbCPBHvSpTqcafGAKzDBWO5iOFFU5oTB4mBUo7C0GvqS - KuhK7NCZK9mcCykiJQkOkCAmVaJGTVMPL/jfkCnZfVhcEGbkkSCOBPtTRCo46jpYucX8otXvP7H6jQhi - 9WsQfvbuZ88VhiRPzypyIDmNI0E8CWLJZne3sjMaeIGfBSnAsxbE8toGj48hkqnZUaqQlColwSESHDyW - ngur8yy7ID36R2dxYWQGPQ+n0Tk8jbb779F87x0a706h/s4UTso00BRXIjFFQoIEEsQnpcpgsddDlKPF - 9ddLuPpqEZdfejH0/DP6ni7A83ge3aNz6GBkZKtYV8xIEIpIkEiCmMPCzDEyZkjVMA29RNHFF9B5nkHd - /QSKc4/ANY8gu/4BTtUOI02cD+EJDnFHjk+yLN8F+i2pn2Q7soWkLRzdQnLoW6xAIAj/DQXi/m5m2Bwf - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAt0RVh0VGl0 - bGUAU2F2ZTv56PkJAAAJQElEQVRYR8WWd1TUVxbH3ZItycYkpm39d/+Ku1FRikjvvQ0ww9AZGJgBBhh6 - GRh6R6RIQEWxIGKkKKLYgsEaY8EuKEWRCCrShKjnu/f9hiEhuMecPSdn3zkfHo+Zw/d77yv3LgHwf+Wn - 41fEr/9HfvMzUH+X6Swa7IO3iN8Tf/wJb7+Bd34m7Lvs/zMzC0ywxVth6Vsy5Hk7X0YX1COmcDfiiuvB - F6fD1iMGtoIYeIhSkV+2G7ml9cgu2YHMou1QFmxDal4tUrI3IzGjBnHKKsQoNiIqqQwWjsFw8pbD0UsO - B49I2PFlL614kh2kxUywgOcHW/whInfHbNPxK2g50Y3mzm60dV2Hpp4HjCw8YeMcDM8gJZ5NzWKMeDqp - 4snEDB6Pz2B0/DlGnql4NDaN755Mw8w+EFV1+1FZ24ryTc3YUNMEW7fwl6TFssGyMD/Y4u3w7Do0HbuM - 3E3tyN7cjpK6o3MGhLBxCoYwMJUTvNr/BN19j3Hl3mNcvjuKS70jWKllTlhipTZB8/2RCRjbiiCNKYE4 - qhCBEXlIpixZu4ayk/funOb8YIt3wtK3ofHIRWRVtxEHULytA2v0BDA0F8LaSQx+QAoX3cWeEXzb8wgX - 7jzCN7e/w/lbw1ilY40Vmk4k7gx72q67Q89gaOWHkLgiBEXlQRSRi/jMarWBpcRvmbB6MAN/kio3o+Hw - BaRXtSKjaj8Kt3Zg9To+DOYMuPkm48HoJM7dHMbZG8M4c/0hTl8bwqmrQ9DQtYPGWh4ZdoetezRuDTyB - noUPQmKKERhJBsJzEZteBSsXKTPwHrHYgERRg11t55BW0QJlZQsKtrRjtS4ZMPOAlWMgeN6J6BseR1f3 - A3zdfR+dlwfx1aVBnLg4QMJO0DH0wFpjL4oyCldpW3TNvBAsL6LocxAQloXo1ApYOEuYgfeJRQbeDUmu - Rt3+M1CUfYnUsn3I33yQInOHPhmwdBDB2TMed+4/xYlv+3H8Qj+OEh3n+9Bx7h60DHjQN/eFkbUIFrwI - XLj5EDrGHhDLC+AXng2f0GxEppTDnG4Gab3WwNKghErUNnUhqaQRyaV7kVPTSml1g56pABb2IrpKsbh2 - bwQdZ+/iENF+phcHT/ei7VQPtA3dYeEig7mzDGZO4ThNGdIy5NMBzIdfaCa8JZmQJW6AmaOYGfiAWGCA - LZYGxJZj095OJNIbkFjcgKyqFjpcrlhnwoe5XQDd42hcuj2MA109OPD1HbQyTt5GC9HceQunrgyi6/IA - Tl4aQOfFfmjqu3H77yXNhFdIOsLii2FCV5O0ls1pzg+2eM9PXoKN9ccRm7cT8fm7kFnZBEuXMKzQdsEK - LRfomfnAyCoABlb+0Lfwha65N3RNvbDWRAhtSre2oQCaFPUafXc6E67cNQyg/fckcaFYSQeyEEY2IrUB - 9urOD2bgfS9ZIcq2d0CevR3ynO1QlDZAWd6I9LK9UDI2NNLM1o1I27AHSvo8taQBEakbIYkpQkh0IcQM - 2vcgunYiWQ586fAJg9LApzckKDKfM09aHxKLDXhI87B+y0FEZNSqyKxF1BxyNmcxts7/Ls/cgghlDXwo - Qh9JOrxpZtF6BjOU8BCnQcDERQrw/RV0E3JgYOnHDHxELDLwgXtwFgqqWxGetglhCoJm9ruMzUqa1aTV - ENX0txoE0CsnnBNkaWbRenARkygJuwcQ/slw80uGb2gWvQ2+PzYwX5CYgWUugenIrmiCJLEKkuQvIEn5 - AlI2J1dBmkJ/I9gcmrJRtU6sIDElBEyMUsxEBSzaOWEmyvNLAs83CS4+CXQQldzbQFofEwsMsMUyJ98U - KNfvQVBsBYISyiGOL4cX3V8PikxAEQrYzKWVxIIU9I8T4OgZTdeTVbsoeoIjYc9nVS8CNm4ymiPB80nk - xJ284rnM6Bh7MgOfzGkuMPChnWciFIU7ESDfwCGSr+eimn3xEjOzKp4T07MvMDXzEhPTsxinysgq5DOq - jGOTM3hKVfExg6qihZOUhOPIZCwcBLHcOdA2EqoN/I5YaMCaH4O4nG3wlRURxfCjmaWPCU8+f0F8/4Mo - K8VUhpnQ6BhjGiPEo6dTXCkefjJJ5TiYe7zs+bHcG+JK2dA04DMDnxKLDHxkSW94NBUkoSSfUp8HT2k+ - nH3iuagnSLz52C18eeQm9hy+hk2NF1C56zxK686guPYU8qtPIrvyBNJLj5L4FIYfT8LYJpATtnWX05bI - 4SyMp+Lmxgz8mZg3wH4wAx+bOYcjnA6cICibOiEVDsJoTM+8wPj095RqBjUiE7PzaVZFrY6cCROjUxgi - AwaW/rChoGx4UbB2ofNB26CxzvW/GzCyl1L9LodrQAbcROk0UzvmHokpin6cxHe3X8PO/VdQVf8NSref - RQmLvEYd+TEoig8jsaCdEx+isr2OXk4mbE31wcJJRt1QNFbquDADfyEWGfhEz1qMwKj1cPZN43DxVcCK - F8alf4y1YCxy6ojYnrPIR7jIWfulivwhg4SHRibxgNCm0syEGeaO4bDmRWKFjtNrDbDFp7oWgfAPK6BT - mwwHhjAJ5nSSWfRjJP50fBajXNp/6Ps4ceIhRc2Jj05w4qwl09IXwMwhnAiDqX0Y9QIR+FyLM/BXgjWm - Cw1om/rRi5ZNBycedgIVJnZiVHT2I+dQDzLa7iCx+Qbi991AzN7riG68jsiG65DVX0PYzquQ7LiK4Lpu - BG3rRuDWbjpw7lT9QmFqFwoTWynMyci/1zgyA38jFhvQNPamlyydTmwsrN1iOAypwdh45hEKTgwh88gD - pB0aRMrBASQdGED8/n7EtvQhuqkPkfvuQdZ4F+GEtKEXkt091KDy6CZIYETiRjSbkpnlaxxea4C7hmsM - PF+5+adSCZbDyjkKloQedTllXcPIPaYSV7QPIrltEAlkIK6lH9HNfYgi8Yi9KvHQPb2cgZD6Xq5JZcJq - jG0l+Gy1/QvSWvAOsB9cR7Rc06FolR7/lQY1oiupFWNo0j56FnbBNesrOKYdhW1yB6wTDsEi9iBM5Adg - GNGKdaFN0JHsg6a4EatFe7DKfzc+99mF5RoO+EzDnmO5ilf//JdJPmmpWzLOABvsF+aItcvsmWSHhKXp - Tfz9DfzjR7A1u/9MfD796sEW6kyw7WBf+CVgQaojX2BAPdQf/NLMjSVL/gMGC1sK0EICNQAAAABJRU5E - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABt0RVh0VGl0 - bGUARm9udDtTaXplO0luY3JlYXNlO1Vwz7EzxAAAAvRJREFUOE+Vk0lMk1EQxwcpq7baAi1lLdAFKLbw - UVm1hEBAWUtBwLIIKsheLVSJIiGgIAgVsAIhoGyJ0XjxZDR6YTmYeBONF44kIJiIDREIdXwP8FBO+pJ/ - vjeT//zem3n5IEl7Y0+IKKRSZ+ohNqWaxv8kSMlvgeTcZhoMWq3WQaZ+CiLqJoGpmQCmdhLIOkLEOpBd - aOkwBJeaIVg3CDLdAIA6Qw/b29sa8+jLJdPjmSWLxaJVVo6DomJsrzhKP5EX2/QCT5YNr7L9Ilxkun6Q - FvSDJL8PxLk9AKTA48PHT3Px567+lipSrO/ezy4sLi56ystGKIAVrZ9+FdP4HBWV4yjKatNRaJC2BwKz - uyAgqxNgc3Pzrra4ycIkFGPIqWxUqpIs6+vrXXvGtDqBqmH6V9S1Z7uRtVMYmNX1luQdRZl3wS+tHXzP - tgHs7Ow83NjYmF1ZWZlfXl6eX1tbm9va2jITo728ZKAutNT8hakafx1ZP4OS86Zd98gLMgr3TW4B76Rb - YDNRSb4JxHm9pLde4gFHaV7fgn/6nW65rvsiUzOF8pJh8kzXSePg4JVwE4Rqoy0gMKd7vy96/QxjiH96 - B/KjyqOdeT4nwiuffFdeHkef5NsrDmwhh3js+LF6W4AovQN800hfZHjk+p1kyl/J3o2IK9eZnioIQJTZ - iVxFURH1uKuqbQG+Ka37gwFwEWsfLAVmd5OC+yjK6MSwslEMKx/F4MJHyGOuvCEeV66ywhYgTGymxfZB - 6c2JnmojciSpMSRmU7FcuZ4hRUOr8uIRFMQbrC5eMSHUawMQnGmkAKeAjPYxd1XVZ7I/ymOqgBdOTiJ5 - iaZrOFg3hKK0e8gWa/pJztkGQBZLwGhlklzTDzfm0gSJjxHZHcjJ+3SFRlZoRnHuAPLjDN9Y7ADpYYCz - d1IreiW2oBtTRU7JKSA5ewrgBKUKBXFG5Mca0CPagO6qBnT1z/p5GEDN9NTjRLR3R6K/N6A/E81xiXgH - X44N4P+F8AdPLJhHg3OwnQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABt0RVh0VGl0 - bGUARm9udDtTaXplO0luY3JlYXNlO1Vwz7EzxAAACTZJREFUWEfFVllQk1kWvsF2QYGEYFjCIoSQhISE - JbJvSgsILuxLgIRNCIuIKKiAsog0oiLIJthiS2vT3ahtL9NTXf3QU9Xt9NT0VD/Mw0x3zVRb1TVqjTpa - pQ+CFtaZc24CMnGZmqc5VV/9f85dvu/ce875wwDg/4pXOt8EGxPY4H832rT64NR/AH3BhJKGIVZgHmBZ - 5X1LAoLNU7SMyOwQbyFWWrGCfJqKSaapGGfqsjEOlXGYqUpGEMNMWXSGKYpOs4BCRMFpnI62XEBF8wT9 - tn/+/PkM4jK9by/qZCl5h5YEoHHyqOaZhti2TyC29ROIOngFdNXnrqCfBAnUpWMs0DTKlERcTMSDTGE4 - zRRILC8YYPK8k8w/5wTtZRFQuX+ClTWOsZK6QbawsFA9PfvNzXOXfntzfn7enLhzL4tONdsKeCum9eq3 - iR2fwaauzyGx8wsIrZt+4p1U44pjdBICZTFGayAMIPEAC8gfYP5WYv/s44g+2ssioKR2kOVXnWRPnjzx - +vUf/7xR2nBmIa2wfeGvP//y+wcPHnjrYgqWC7DTmvp8YluvLSR2IjmKSECEN82AqvhkHY7TdQg4MY/W - Spx9gsmy+xF9TJbZy3wzemkvi4DM0h6WbjhMAvq7Tl6+n191HLYZWqGitutf9+/fP0UbLo8+vHF6X2zb - dST/FBKOED6DmIPXAO/8Bo6vRtgF5J3ixDKMWJZ1nPllWol3HmMbtvewDdu6aT+LgOSs/ezx48cxX379 - /V9yKnsgu/QoZJg6ICzRCJNTMz/duXMnfjF6xKqo5g+/j29H4sOfQvzh6xDffh3iENqqKfDZ0qjBOTwX - /LL6kPgdBBH3Wom7mE86Ymsn7WcRgLDH6K8UmY/Obc1pgeScJng7sxFiU6shKCx5/uHDh7MoYi1OX6Ex - Hg+IapldiMbEI8ThScRRMrZdg417LoE8t+8dnMdPwS/jmCXibT0WUoR3agfiCPNKaSf6JQF2z549O//o - 0aNv7969+x2S3bh9+/aNW7du3bh37953T58+nZqdnaXkWqmvv3AgvHEGQmqnft24+72vYg5chdhDV/EK - rkJU88eAGX8T53GxCIFPeifzSetk3mlInELEbcxrSxvz3HwIh9GsAv4r0Oj4V0c0Xf5DcO0FCMjtG9IY - T5kj938EJCLmAJ5IyywElY2Dd0pzOs5dhRDwiIk4+QWxdNMB5pHYQnu+ELBoahM1jxGsYazf4iGmNAyS - m5JvhSrviDJi7wyoTaPglbxvq0SXKtXvnp6Lbp6FqP2EjyG0fhp8dxy9jPPtaY1ncivz3ILYfJBJE4m4 - mXkk7GfucU2078sCLMQIJFZgt5Jj/aKRgJWhNZNtlnvuf7ha5ClE3zpd1eRvIrAEI5s+QnwI4SjQP7v/ - 8TqvUDcc58koxWilCS3MnYhjm5hbbCNzi9mDQ2i2AhREjKSW+sWmkdtPbjp+e4z2h+Dq8+C77Sh1PYpw - jaqwv0rfcAnoZCIwN8L3fACBJaMgTWjcReO01j2eIiZSQgNzjUZEUstAsxXAiZFUhsBIyMVrX76jJXBj - w2VQGobAK2lfMfoo01eKFHGuwdXvzhExjesRwVUXsBzbv8FxB8QKVyQmUkl0PZNE1TJJeA3CjENotgKI - WIatUoadyg9LCI3Xvq5yrCO07iJgac05eOup5dLxUqavVRvPfBFW9z7o6y+BHp9hte9jHhxbEAakqGgt - QiCJrGXrI2qYCxKv11czFz0dEJqtAD8i3oH1u6OHfvLkQ6wNMU/9GFQ+AT7J7V/Tb6ufxK2RZ3TtoqhD - a6chrGYaQmougqpgCFwja7oW57psNCNpFXMJq2Li0AomDi5DN5qtACL23X4Ua5fWWpLPL7VRHWK+CIrc - AfCI2031s478Vqxx8NR5aoxjczQnpPo9fgVB5efAI6Hlbzguss4TiEMrObFYV8rE2lJ0odkK2ECNIxUb - B9YvGo9QUzLYE4ZRKQuHFiTBmeHoEyOoCgjOCA9V4cCXusrzoNt1AXSVU6CtwLac2g1CVUYyjvNkdEZi - ZyQWaY1MqKE0QrMV4J1CjYO3ycXjd9BWTPyZjjUUj1dbcR6jm8SGcw40ZZOgKZ0AjWkCtOXvgg5JteXn - +TshIOc0rNdX0j8YR9pLFGRkIiQWBhqYUGVAF5qtAC/eNFrplR+/T1KdniJTGoZhw9Zu8EnpxDw4Al5b - DoPn2+3gmdQKOB9803tBXTTGhQWVojjTOVCXnAW36L0P7FY5UE/gySgMLGRCZQFzUhYSx8sCqE1S40Dj - ta/MP3EsCKOUbj60YO8RHIg+On66VwIdP8EF4eGb3v25uvgsqI0TSG6B95YOcFJklOM45Q3tKXBS5DIC - N1sBHgnN9OC1j3BUG0d+UuRjRkfV/4C/iZTXv3WcQO8UnaM0tr5cVTACgShCVTwOqqJx8M86BWKt8Ssc - J6G8MzrKsxmBm60A91jeIknAaq8Ec6TadBY2pHWDS4iRPrMUBf/KiUPKMZvLMKl4OfH59hKlt3/GyXmV - YRyvbAyTdgxU+aMgidg9v1qspNPjyeggy2TrZBm07mUBrlEN9OC1L8/qPa4uGQeP+IPgJE9LQh9tIBDr - ypHYxJyDTEykxsRS84ymkxD5pHT8TpE3AsqCUVDkj3B44jU4+u+guqaq4aewzncbPtBsBaDRPdExi5UF - Z34JxGN0jdwzh4nkbvXbcWKNhVikKkLX0pUJ3aPrmuVZg0AiFHnD+NkeBtnOU+AcVPYzjnsg6BvCcwHx - kgByUiRC39RDZpVhFAIR0qTWW+iTIqi38wiESCy0ZDKtWRQtcQs3Gf0zB0Ceg+Q5Z0CebYF082EQKrPp - GyxB8KtACGwF8KMPyBn4o5KSqegsYhwC8ofBc1Pb30WawjYcX1rspMjDBxdA6xx903p/9Nt54qGcEw9Z - kDWEiWiBd2ovOMpz/4Rzl67ilQLcYprANRoR1QSSyEa8gt2YhLvAKSD3Ao4vCcDN8PFCgBjnOOsqEeUg - 0lYg8BlUBiJNqRUmsPdKJbLXCqDNeEkhqN6pvtdbQWVEVcAXOlApybLwla9ZvAIqU/pSUr7QfRPo6hZB - ftr3tVdAthgR5cJyEDH5aZyw3BZF0BwKYBEkajnIR3tZyMleI+BNeJ29au6bgMbYvwErlLsqI/OQqQAA - AABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAB10RVh0VGl0 - bGUARm9udDtTaXplO0RlY3JlYXNlO0Rvd25Sih27AAACJklEQVQ4T2P4//8/RRirICkYqyApGET0AfF+ - NDxJzqeZQT91DoNO/HQGabdaBmlXIHapYZACYecqFAOakvJ6Pzr4F/+39s75Hxhb+hEo1qoS2stgmrdM - 0Th78X85z8YbUs6VDJJOQOxYwSDpUIFigMiV6/cOWHum/zWyDvt7+eotkAtEdBJnAl0wt844e9F/1dDe - /xIO5TYS9mUM4nZAbFuKMEDHPBjE8O+dvOhO3+T5t0FsWTUboNNnMCgH9Vw1zFhwXidx1n9J+/L54jYl - DOI2xQxi1sUIA+Q17BlkVa1BnEkgLKVkxgDCyoFdZlKOlQf0kuaE6yXP/S/n0fhNzKpQSMyygEHMMh9h - AAwAOZIgDOUC/Vo1AaghUzWkj1MnYfYH1ZDe/6LmefmiZnkMIqZ5CANgDHGgs0BOkwYGlE78LGa1kP7n - KsH9QhqRUxi0YmfM0Yya9l/CpviSiEkOg4hJNqYBIGeJWeQzKPm2Myj4tHtL2Ff+l7ADYtuK/+rhk/9r - Rk39L+fa+F/IONNGyCgT0wARs1ygAQUMamGTQK5ZAbQlTdg4m0HIOItBzrMFKD7loXJQ/39ho6z5Qgbp - mAaAbFfw6WDQiJgqKu/Z/A1oiwTIJiHDDAYF324G1ZBJXSohk/7Lujd9E9RPFcIwAGSbmEWJiphlyXNR - s8L/ggbpJ4GYAaiYQdSsgEHEvOC5iGnBf2AA/hfUTX6IYQC5GKsg8fg/AwCPSyXYWw9huQAAAABJRU5E - rkJggg== - - - - - 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 - ilptQ7AAAAAASUVORK5CYII= - - - - - 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 - ilptQ7AAAAAASUVORK5CYII= - - - - - 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 - R+ZN0wAAAABJRU5ErkJggg== - - - - - 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 - - - - 568, 60 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAB10RVh0VGl0 - bGUAQ2xvc2U7RXhpdDtCYXJzO1JpYmJvbjtGA7noAAADCklEQVQ4T42TaUhUURiGp0xzK1HTINrc00yz - 1EnTMtfUGItS8YclRhAJ6o/EJW1cAjOp3CEGJDEpMYkgR81RsqgYncQlTUfTMpd05mraOCP14+1816F/ - QRceeO8553vOd++5VzBzu0jArs0MA8aW/8BQD63fxBAYfC4Uv/p6qwBfioh8TBWJNyhkFNzEJE8eJvMZ - 4jx8FudiNDenm9WSUGBIE9oP7Rso9PC5TU8rtL2EFFp5C89oThZYrREJjJQ3sqHtacHS40oMZqdDYu+B - jvMX+HtCFhsLiZ0HBjLTwD0qB1dfho8Z10lgTIKtI5kZWHv3nC1IRV1EPGRSBZ5czUHrGRHaRDF8lrX0 - oi48Hv0ZKVDX3UN/ajoJTEhg3H8tBZruZkj2umFSOQvVkhbKKQ6NqQU8oyzPqzWYGJuFZI8bVLWlkF++ - QgJTEpi8PnOWtVrBWo1DT8l9aLS/oV7RYewrh7EvHBZ/6LC69oufk7FHm85KRntIJAnMSGAqC43C9/tZ - +JaZhI7oaLwvKcfCsg4LrJPvywxOh7fFZXgZGYmptAQoE0Lwwj+YBOYkMJMGhmG2KBUTF0+j9bgf2sV3 - WMtazKnXMKvSMLRoyyuB1E+IsQtB+HQuEM+OBpBgGwnMn/sGYTrnClp9vNCcno+hcRVmFjXgVnXgVtYx - vaDBgHIRT9PEkHp5YDjSB43uQhJsJ8G2Jk8/vrUGexeo59WYUa1haXUdA+VVPBuSn1DNqdFg54KBYE/U - Ox8lgQUJtje4+mA8WQRFTCg6E5OwznHoKymFLOAYOhiUaawz8RLkEYHo83dF7b5DJLAkgcVDOy98igvB - cLQQvdEn0eRyAF0BvhiJOYFhUSC6/H34MXnYcfSf8oTiiAMe7HIlgRUvkOw+iKEotpPQGYPBh9mLCsbH - cF8ohI5QeDtiKNQbI6IAtrMb5J77IXffi2obp78Cs7u2Tm9qdjqjxtYF1bbOqLIhnDawdkSllSMqeBxQ - YemAckaxhd1bVssfI/2W9EGQzVrPjn9go4cyO0KBwR+nGRqWKfsCHQAAAABJRU5ErkJggg== - - - - 658, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAc - CwAAAk1TRnQBSQFMAgEBAwEAAVgBCwFYAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA - AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 - AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA - AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm - AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM - AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA - ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz - AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ - AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM - AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA - AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA - AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ - AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ - AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA - AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm - ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ - Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz - AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA - AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM - AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM - ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM - Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA - AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM - AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ - AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz - AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm - AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wUACP8FAA7/AgAL/wH0 - Av8TAAP/AbwB9wKuAZIBvAP/AwAB/wy0Af8DAAL/A/QE8wIZAbQB/xIAAv8B8wGuAbUB8AL/AfABtQGu - AfIC/wIAAf8BtAH/A/QG8wG0Af8DAAL/A/QF8wEZAbQB/xEAAv8B8QGuAfABCQG0Aq0BtAEJAfABrgHx - Av8BAAH/AbQB/wT0BfMBtAH/AwAC/wT0BfMBtAH/EQAB/wH0Aa4B8QG0Aa0BCQH0AfMB3QGtAbQB8QGu - AfQB/wEAAf8BtAL/ArsCtQK0AvMBtAH/AwAD/wK1BbQB8wG0Af8RAAH/AbwBtQEJAq0BzwL0AbUCrQEJ - AbUBvAH/AQAB/wG1A/8E9APzAbQB/wMAA/8CtQW0AfMBtAH/EQAB/wG1AfEBtAOtAvQBtAKtAbQB8QG1 - Af8BAAH/AbUC/wMJArsBtQH0AfMBtAH/AwAD/wG7ArUEtAHzAbQB/xEAAf8BkQH0A7QBuwL0AbUCrQHP - AfQBkQH/AQAB/wG1Av8B9AH/AfQC8wL0AfMBtAH/AwAD/wK7ArUDtAHzAbQB/xEAAf8BkQH/A7QBtQHd - AfQBtQO0Af8BkQH/AQAB/wG7Af8B8wFuAvABbgHyA/QBtAH/AwAG/wT0AfMBtAH/EQAB/wG1AfIBCQO0 - Aq0DtAG1AfIBtQH/AQAB/wG7Af8B8gHpAm4BHwHwA/QBtAH/AwAD/wHpAfMBbgHzAf8D9AG0Af8RAAH/ - AfABBwEZArQBCQH/Ad0DtAEZAQcB8AH/AQAB/wG7Af8B8wHpAkYBHwHwAf8C9AG0Af8DAAP/AekCRgHz - Av8C9AG0Af8RAAL/AbUB8wEZAbQBtQH0Af8CtAEJAfMBtQL/AQAB/wG7Av8B6QGTAUYBHwHxAv8B9AG0 - Af8DAAP/AekCRgHzAf8DtAG8Af8SAAH/AfMBtQHyAfQBCQK1AQkB9AHyAbUB8wH/AgAB/wG7Av8B6QGT - AUYB6QHyA/8BtAH/AwAD/wNGAfQB/wG0AfMBCQH/FAAB/wH0AbUBCQHyAvQB8gEJAbUB9AL/AgAB/wG7 - Av8B6QKTAekB8wP/AbQB/wMAA/8BRgFvAUYB9AH/AbQBvAH/FgAC/wHxAbwCuwG8AfEC/wQAAf8DuwFG - A+kBtAK1ArQB/wMAAf8CuwFGApMCtQHwAf8YAAj/BgAN/wcABf8VAAFCAU0BPgcAAT4DAAEoAwABQAMA - ARADAAEBAQABAQUAAYAXAAP/AQAB8AEPAYABAQGAAQECAAHAAQMBgAEBAcABAQIAAYABAQGAAQEBwAEB - BAABgAEBAcABAQQAAYABAQHAAQEEAAGAAQEBwAEBBAABgAEBAcABAQQAAYABAQHAAQEEAAGAAQEBwAEB - BAABgAEBAcABAQQAAYABAQHAAQEEAAGAAQEBwAEBAgABgAEBAYABAQHAAQMCAAHAAQEBgAEBAcABBwIA - AeABBwGAAQEBwAEPAgAB8AEPAcABAQH8AR8CAAs= - - - - 515, 17 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAB10RVh0VGl0 - bGUAQ2xvc2U7RXhpdDtCYXJzO1JpYmJvbjtGA7noAAADCklEQVQ4T42TaUhUURiGp0xzK1HTINrc00yz - 1EnTMtfUGItS8YclRhAJ6o/EJW1cAjOp3CEGJDEpMYkgR81RsqgYncQlTUfTMpd05mraOCP14+1816F/ - QRceeO8553vOd++5VzBzu0jArs0MA8aW/8BQD63fxBAYfC4Uv/p6qwBfioh8TBWJNyhkFNzEJE8eJvMZ - 4jx8FudiNDenm9WSUGBIE9oP7Rso9PC5TU8rtL2EFFp5C89oThZYrREJjJQ3sqHtacHS40oMZqdDYu+B - jvMX+HtCFhsLiZ0HBjLTwD0qB1dfho8Z10lgTIKtI5kZWHv3nC1IRV1EPGRSBZ5czUHrGRHaRDF8lrX0 - oi48Hv0ZKVDX3UN/ajoJTEhg3H8tBZruZkj2umFSOQvVkhbKKQ6NqQU8oyzPqzWYGJuFZI8bVLWlkF++ - QgJTEpi8PnOWtVrBWo1DT8l9aLS/oV7RYewrh7EvHBZ/6LC69oufk7FHm85KRntIJAnMSGAqC43C9/tZ - +JaZhI7oaLwvKcfCsg4LrJPvywxOh7fFZXgZGYmptAQoE0Lwwj+YBOYkMJMGhmG2KBUTF0+j9bgf2sV3 - WMtazKnXMKvSMLRoyyuB1E+IsQtB+HQuEM+OBpBgGwnMn/sGYTrnClp9vNCcno+hcRVmFjXgVnXgVtYx - vaDBgHIRT9PEkHp5YDjSB43uQhJsJ8G2Jk8/vrUGexeo59WYUa1haXUdA+VVPBuSn1DNqdFg54KBYE/U - Ox8lgQUJtje4+mA8WQRFTCg6E5OwznHoKymFLOAYOhiUaawz8RLkEYHo83dF7b5DJLAkgcVDOy98igvB - cLQQvdEn0eRyAF0BvhiJOYFhUSC6/H34MXnYcfSf8oTiiAMe7HIlgRUvkOw+iKEotpPQGYPBh9mLCsbH - cF8ohI5QeDtiKNQbI6IAtrMb5J77IXffi2obp78Cs7u2Tm9qdjqjxtYF1bbOqLIhnDawdkSllSMqeBxQ - YemAckaxhd1bVssfI/2W9EGQzVrPjn9go4cyO0KBwR+nGRqWKfsCHQAAAABJRU5ErkJggg== - - - - 978, 17 - - - 307, 16 - - - 373, 60 - - - 791, 60 - - \ No newline at end of file From 19d4d9ba0fe4621e3d6c269ddc68114c00a66265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Mon, 13 Mar 2023 16:19:29 +0100 Subject: [PATCH 14/25] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Updating=20Analogy,?= =?UTF-8?q?=20creating=20full=20solution=20with=20all=20projects?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.CommonControls/UserControls/LogMessagesUC.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index 8eece301a..7671dd1ce 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -1434,7 +1434,7 @@ private void ExtensionPanel_SizeChanged(object sender, EventArgs e) { if (sender is DockPanel pnl && pnl.Controls.Count > 0) { - pnl.Controls[0].Controls[0].Size = pnl.Size; + pnl.Controls[0].Size = pnl.Size; } } From 79ec4b62aa8abe72f9dadb9b1b9fd7b36841abf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Fri, 24 Mar 2023 16:19:50 +0100 Subject: [PATCH 15/25] =?UTF-8?q?=E2=9C=A8=20Adding=20pooling=20of=20rolli?= =?UTF-8?q?ng=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy/Forms/EditFilePooling.Designer.cs | 88 ++++++++++++++++ Analogy/Forms/EditFilePooling.cs | 29 ++++++ Analogy/Forms/EditFilePooling.resx | 120 ++++++++++++++++++++++ Analogy/Forms/FluentDesignMainForm.cs | 8 +- Analogy/Forms/MainForm.cs | 16 +-- Analogy/Managers/FilePoolingManager.cs | 36 ++++--- Analogy/UserControls/FilePoolingLog.cs | 6 +- 7 files changed, 279 insertions(+), 24 deletions(-) create mode 100644 Analogy/Forms/EditFilePooling.Designer.cs create mode 100644 Analogy/Forms/EditFilePooling.cs create mode 100644 Analogy/Forms/EditFilePooling.resx diff --git a/Analogy/Forms/EditFilePooling.Designer.cs b/Analogy/Forms/EditFilePooling.Designer.cs new file mode 100644 index 000000000..2873c5509 --- /dev/null +++ b/Analogy/Forms/EditFilePooling.Designer.cs @@ -0,0 +1,88 @@ +namespace Analogy.Forms +{ + partial class EditFilePooling + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtFilename = new System.Windows.Forms.TextBox(); + this.BtnOk = new System.Windows.Forms.Button(); + this.lblHelp = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // txtFilename + // + this.txtFilename.Location = new System.Drawing.Point(12, 42); + this.txtFilename.Name = "txtFilename"; + this.txtFilename.Size = new System.Drawing.Size(775, 20); + this.txtFilename.TabIndex = 0; + // + // BtnOk + // + this.BtnOk.Location = new System.Drawing.Point(713, 77); + this.BtnOk.Name = "BtnOk"; + this.BtnOk.Size = new System.Drawing.Size(75, 23); + this.BtnOk.TabIndex = 1; + this.BtnOk.Text = "Ok"; + this.BtnOk.UseVisualStyleBackColor = true; + this.BtnOk.Click += new System.EventHandler(this.BtnOk_Click); + // + // lblHelp + // + this.lblHelp.AutoSize = true; + this.lblHelp.Location = new System.Drawing.Point(12, 19); + this.lblHelp.Name = "lblHelp"; + this.lblHelp.Size = new System.Drawing.Size(193, 13); + this.lblHelp.TabIndex = 2; + this.lblHelp.Text = "Add any needed * for rolling file scheme"; + // + // EditFilePooling + // + this.AcceptButton = this.BtnOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 112); + this.ControlBox = false; + this.Controls.Add(this.lblHelp); + this.Controls.Add(this.BtnOk); + this.Controls.Add(this.txtFilename); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "EditFilePooling"; + this.ShowIcon = false; + this.Text = "Edit filename filter for pooling"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtFilename; + private System.Windows.Forms.Button BtnOk; + private System.Windows.Forms.Label lblHelp; + } +} \ No newline at end of file diff --git a/Analogy/Forms/EditFilePooling.cs b/Analogy/Forms/EditFilePooling.cs new file mode 100644 index 000000000..71f87537a --- /dev/null +++ b/Analogy/Forms/EditFilePooling.cs @@ -0,0 +1,29 @@ +using System.IO; +using System.Windows.Forms; + +namespace Analogy.Forms +{ + public partial class EditFilePooling : Form + { + public EditFilePooling(string fileName) + { + InitializeComponent(); + Dir = Path.GetDirectoryName(fileName) ?? string.Empty; + + txtFilename.Text = Path.GetFileName(fileName); + } + + + public string Dir { get; set; } + + public string Filter + { + get { return Path.Combine(Dir, txtFilename.Text); } + } + + private void BtnOk_Click(object sender, System.EventArgs e) + { + Close(); + } + } +} \ No newline at end of file diff --git a/Analogy/Forms/EditFilePooling.resx b/Analogy/Forms/EditFilePooling.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Analogy/Forms/EditFilePooling.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Analogy/Forms/FluentDesignMainForm.cs b/Analogy/Forms/FluentDesignMainForm.cs index 6eb6b7b6b..0284837fe 100644 --- a/Analogy/Forms/FluentDesignMainForm.cs +++ b/Analogy/Forms/FluentDesignMainForm.cs @@ -848,11 +848,11 @@ void OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataProvide dockManager1.ActivePanel = page; } - async Task OpenFilePooling(string titleOfDataSource, string initialFolder, string file) + async Task OpenFilePooling(string titleOfDataSource, string initialFolder, string file, string initialFile) { openedWindows++; await FactoriesManager.Instance.InitializeIfNeeded(offlineAnalogy); - UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFile, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -1006,7 +1006,9 @@ void OnXtcLogsOnControlRemoved(object sender, DockPanelEventArgs arg) }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { - await OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, openFileDialog1.FileName); + EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); + efp.ShowDialog(); + await OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); AddRecentFiles(recentfiles, offlineAnalogy, title, new List { openFileDialog1.FileName }); } diff --git a/Analogy/Forms/MainForm.cs b/Analogy/Forms/MainForm.cs index 0193c0fc5..95b4f3e6e 100644 --- a/Analogy/Forms/MainForm.cs +++ b/Analogy/Forms/MainForm.cs @@ -1488,12 +1488,12 @@ async Task OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataP } async Task OpenFilePooling(string titleOfDataSource, IAnalogyOfflineDataProvider dataProvider, - string initialFolder, string file) + string initialFolder, string file, string initialFile) { OpenedWindows++; await FactoriesManager.Instance.InitializeIfNeeded(dataProvider); - UserControl filepoolingUC = new FilePoolingUCLogs(dataProvider, file, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(dataProvider, file, initialFile, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -1706,8 +1706,10 @@ await OpenOffline(dataProvider.OptionalTitle, dataProvider, }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { + EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); + efp.ShowDialog(); await OpenFilePooling(dataProvider.OptionalTitle, dataProvider, - dataProvider.InitialFolderFullPath, openFileDialog1.FileName); + dataProvider.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); AddRecentFiles(ribbonPage, recentBar, dataProvider, dataProvider.OptionalTitle, new List { openFileDialog1.FileName }); } @@ -1850,11 +1852,11 @@ async Task OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataP } - void OpenFilePooling(string titleOfDataSource, string initialFolder, string file) + void OpenFilePooling(string titleOfDataSource, string initialFolder, string file, string initialFile) { OpenedWindows++; - UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFile, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -2002,7 +2004,9 @@ void OnXtcLogsOnControlRemoved(object sender, DockPanelEventArgs arg) }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { - OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, openFileDialog1.FileName); + EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); + efp.ShowDialog(); + OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); AddRecentFiles(ribbonPage, recentBar, offlineAnalogy, title, new List { openFileDialog1.FileName }); } diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index 84f89edfa..555516939 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -32,7 +32,7 @@ internal class FilePoolingManager : ILogMessageCreatedHandler private DateTime lastRead; private UCLogs LogUI; private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; - public FilePoolingManager(string fileName, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) + public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) { _sync = new object(); LogUI = logUI; @@ -40,44 +40,56 @@ public FilePoolingManager(string fileName, UCLogs logUI, IAnalogyOfflineDataProv _cancellationTokenSource = new CancellationTokenSource(); OfflineDataProvider = offlineDataProvider; _messages = new List(); - FileName = fileName; + FileName = initialFilename; + FileFilter = filter; FileProcessor = new FileProcessor(Settings, this,AnalogyLogger.Instance); } + public string FileFilter { get; set; } public Task Init() { + HasFiltFilter = !FileFilter.Equals(FileName); _watchFile = new FileSystemWatcher { Path = Path.GetDirectoryName(FileName), - Filter = Path.GetFileName(FileName) + Filter = Path.GetFileName(FileFilter) }; _watchFile.Changed += WatchFile_Changed; - _watchFile.Deleted += WatchFile_Deleted; - _watchFile.Renamed += WatchFile_Renamed; + if (HasFiltFilter) + { + _watchFile.Deleted += WatchFile_Deleted; + _watchFile.Renamed += WatchFile_Renamed; + } _watchFile.Error += WatchFile_Error; _watchFile.EnableRaisingEvents = true; AnalogyLogMessage m = new AnalogyLogMessage { - Text = $"Start monitoring file {FileName}.", - FileName = FileName, + Text = $"Start monitoring file {FileFilter}.", + FileName = FileFilter, Level = AnalogyLogLevel.Analogy, Source = "Analogy", Class = AnalogyLogClass.General, Date = DateTime.Now }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); } + public bool HasFiltFilter { get; set; } + public void StopMonitoring() { _watchFile.EnableRaisingEvents = false; _watchFile.Changed -= WatchFile_Changed; - _watchFile.Deleted -= WatchFile_Deleted; - _watchFile.Renamed -= WatchFile_Renamed; + if (HasFiltFilter) + { + _watchFile.Deleted -= WatchFile_Deleted; + _watchFile.Renamed -= WatchFile_Renamed; + } _watchFile.Error -= WatchFile_Error; _watchFile.Dispose(); } @@ -189,20 +201,20 @@ private async void WatchFile_Changed(object sender, FileSystemEventArgs e) if (e.ChangeType == WatcherChangeTypes.Changed) { LogUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); + await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); } } catch (Exception exception) { AnalogyLogMessage m = new AnalogyLogMessage { - Text = $"Error monitoring file {FileName}. Reason {exception}", + Text = $"Error monitoring file {e.FullPath}. Reason {exception}", FileName = FileName, Level = AnalogyLogLevel.Warning, Class = AnalogyLogClass.General, Date = DateTime.Now }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); + OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); AnalogyLogManager.Instance.LogErrorMessage(m); } finally diff --git a/Analogy/UserControls/FilePoolingLog.cs b/Analogy/UserControls/FilePoolingLog.cs index edf912b8b..10167e2c7 100644 --- a/Analogy/UserControls/FilePoolingLog.cs +++ b/Analogy/UserControls/FilePoolingLog.cs @@ -22,11 +22,11 @@ public partial class FilePoolingUCLogs : XtraUserControl private string FileName { get; set; } public bool Enable { get; set; } = true; private FilePoolingManager PoolingManager { get; } - public FilePoolingUCLogs(IAnalogyOfflineDataProvider offlineDataProvider, string fileName, string initialFolder) + public FilePoolingUCLogs(IAnalogyOfflineDataProvider offlineDataProvider, string filter, string initialFilename, string initialFolder) { InitializeComponent(); - FileName = fileName; - PoolingManager = new FilePoolingManager(FileName, ucLogs1, offlineDataProvider); + FileName = initialFilename; + PoolingManager = new FilePoolingManager(filter, initialFilename, ucLogs1, offlineDataProvider); ucLogs1.SetFileDataSource(offlineDataProvider, offlineDataProvider); ucLogs1.EnableFileReload(FileName); From 6451346e7f4a539d57f6b21dc208754a11f7c4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Tue, 28 Mar 2023 08:25:33 +0200 Subject: [PATCH 16/25] =?UTF-8?q?=F0=9F=90=9B=20Correcting=20pooling=20for?= =?UTF-8?q?=20rolling=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy/Managers/FilePoolingManager.cs | 369 ++++++++++++------------- 1 file changed, 178 insertions(+), 191 deletions(-) diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index 555516939..a8f2d720f 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -1,232 +1,219 @@ -using Analogy.Interfaces; -using Analogy.Interfaces.DataTypes; -using Analogy.UserControls; -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Analogy.Common.DataTypes; -using Analogy.Common.Interfaces; +using Analogy.Interfaces; +using Analogy.Interfaces.DataTypes; +using Analogy.UserControls; + +namespace Analogy.Managers; -namespace Analogy.Managers +internal class FilePoolingManager : ILogMessageCreatedHandler { - internal class FilePoolingManager : ILogMessageCreatedHandler + private readonly CancellationTokenSource _cancellationTokenSource; + private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; + private readonly UCLogs _logUI; + private readonly List _messages; + + private readonly object _sync; + private DateTime _lastRead; + private DateTime _lastWriteTime = DateTime.MinValue; + private bool _readingInprogress; + private FileSystemWatcher _watchFile; + public EventHandler<(List messages, string dataSource)> OnNewMessages; + + public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) { - private IAnalogyUserSettings Settings => UserSettingsManager.UserSettings; - - private string FileName { get; } - private FileProcessor FileProcessor { get; } - private IAnalogyOfflineDataProvider OfflineDataProvider { get; } - private readonly CancellationTokenSource _cancellationTokenSource; - private readonly List _messages; - public EventHandler<(List messages, string dataSource)> OnNewMessages; - public bool ForceNoFileCaching { get; set; } = true; - - public bool DoNotAddToRecentHistory { get; set; } = true; - private readonly object _sync; - private FileSystemWatcher _watchFile; - private bool _readingInprogress; - private DateTime lastWriteTime = DateTime.MinValue; - private DateTime lastRead; - private UCLogs LogUI; - private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; - public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) - { - _sync = new object(); - LogUI = logUI; - _customEqualityComparer = new AnalogyLogMessageCustomEqualityComparer { CompareId = false }; - _cancellationTokenSource = new CancellationTokenSource(); - OfflineDataProvider = offlineDataProvider; - _messages = new List(); - FileName = initialFilename; - FileFilter = filter; - FileProcessor = new FileProcessor(Settings, this,AnalogyLogger.Instance); + _sync = new object(); + _logUI = logUI; + _customEqualityComparer = new AnalogyLogMessageCustomEqualityComparer { CompareId = false }; + _cancellationTokenSource = new CancellationTokenSource(); + OfflineDataProvider = offlineDataProvider; + _messages = new List(); + FileName = initialFilename; + FileFilter = filter; + FileProcessor = new FileProcessor(Settings, this, AnalogyLogger.Instance); + } - } + private IAnalogyUserSettings Settings + { + get { return UserSettingsManager.UserSettings; } + } - public string FileFilter { get; set; } + private string FileName { get; } + private FileProcessor FileProcessor { get; } + private IAnalogyOfflineDataProvider OfflineDataProvider { get; } - public Task Init() - { - HasFiltFilter = !FileFilter.Equals(FileName); - _watchFile = new FileSystemWatcher - { - Path = Path.GetDirectoryName(FileName), - Filter = Path.GetFileName(FileFilter) - }; - _watchFile.Changed += WatchFile_Changed; - if (HasFiltFilter) - { - _watchFile.Deleted += WatchFile_Deleted; - _watchFile.Renamed += WatchFile_Renamed; - } - _watchFile.Error += WatchFile_Error; - _watchFile.EnableRaisingEvents = true; - AnalogyLogMessage m = new AnalogyLogMessage - { - Text = $"Start monitoring file {FileFilter}.", - FileName = FileFilter, - Level = AnalogyLogLevel.Analogy, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); - } + public string FileFilter { get; set; } - public bool HasFiltFilter { get; set; } + public bool HasFiltFilter { get; set; } + public bool ForceNoFileCaching { get; set; } = true; + public bool DoNotAddToRecentHistory { get; set; } = true; - public void StopMonitoring() + public void AppendMessage(IAnalogyLogMessage message, string dataSource) + { + lock (_sync) { - - _watchFile.EnableRaisingEvents = false; - _watchFile.Changed -= WatchFile_Changed; - if (HasFiltFilter) + if (!_messages.Contains(message)) { - _watchFile.Deleted -= WatchFile_Deleted; - _watchFile.Renamed -= WatchFile_Renamed; + _messages.Add(message); + OnNewMessages?.Invoke(this, (new List { message }, dataSource)); } - _watchFile.Error -= WatchFile_Error; - _watchFile.Dispose(); } - public void AppendMessage(IAnalogyLogMessage message, string dataSource) + } + + public void AppendMessages(List messagesFromFile, string dataSource) + { + lock (_sync) { - lock (_sync) + List newMessages = messagesFromFile.Except(_messages, _customEqualityComparer).ToList(); + if (newMessages.Any()) { - if (!_messages.Contains(message)) - { - _messages.Add(message); - OnNewMessages?.Invoke(this, (new List { message }, dataSource)); - } + _messages.AddRange(newMessages); + OnNewMessages?.Invoke(this, (newMessages, dataSource)); } } + } - public void AppendMessages(List messagesFromFile, string dataSource) - { + public void ReportFileReadProgress(AnalogyFileReadProgress progress) + { + //noop + } - lock (_sync) - { - var newMessages = messagesFromFile.Except(_messages, _customEqualityComparer).ToList(); - if (newMessages.Any()) - { - _messages.AddRange(newMessages); - OnNewMessages?.Invoke(this, (newMessages, dataSource)); - } - } + public Task Init() + { + HasFiltFilter = !FileFilter.Equals(FileName); + _watchFile = new FileSystemWatcher + { + Path = Path.GetDirectoryName(FileName), + Filter = Path.GetFileName(FileFilter) + }; + _watchFile.Changed += WatchFile_Changed; + if (!HasFiltFilter) + { + _watchFile.Deleted += WatchFile_Deleted; + _watchFile.Renamed += WatchFile_Renamed; } + _watchFile.Error += WatchFile_Error; + _watchFile.EnableRaisingEvents = true; + AnalogyLogMessage m = new() + { + Text = $"Start monitoring file {FileFilter}.", + FileName = FileFilter, + Level = AnalogyLogLevel.Analogy, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); + } - private void WatchFile_Error(object sender, ErrorEventArgs e) + public void StopMonitoring() + { + _watchFile.EnableRaisingEvents = false; + _watchFile.Changed -= WatchFile_Changed; + if (!HasFiltFilter) { - _watchFile.EnableRaisingEvents = false; - _watchFile.Dispose(); - AnalogyLogMessage m = new AnalogyLogMessage - { - Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", - FileName = FileName, - Level = AnalogyLogLevel.Critical, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); + _watchFile.Deleted -= WatchFile_Deleted; + _watchFile.Renamed -= WatchFile_Renamed; } + _watchFile.Error -= WatchFile_Error; + _watchFile.Dispose(); + } - private async void WatchFile_Renamed(object sender, RenamedEventArgs e) - { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new AnalogyLogMessage - { - Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - await Init(); + private void WatchFile_Error(object sender, ErrorEventArgs e) + { + _watchFile.EnableRaisingEvents = false; + _watchFile.Dispose(); + AnalogyLogMessage m = new() + { + Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", + FileName = FileName, + Level = AnalogyLogLevel.Critical, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + } - } + private async void WatchFile_Renamed(object sender, RenamedEventArgs e) + { + _watchFile.EnableRaisingEvents = false; + AnalogyLogMessage m = new() + { + Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + await Init(); + } + + private void WatchFile_Deleted(object sender, FileSystemEventArgs e) + { + _watchFile.EnableRaisingEvents = false; + AnalogyLogMessage m = new() + { + Text = $"{FileName} has been deleted. Stopping monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + } - private void WatchFile_Deleted(object sender, FileSystemEventArgs e) + private async void WatchFile_Changed(object sender, FileSystemEventArgs e) + { + if (_readingInprogress) + return; + FileInfo f = new(e.FullPath); + if (_lastWriteTime == f.LastWriteTime) + return; + lock (_sync) { + if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) + return; + _lastWriteTime = f.LastWriteTime; + _lastRead = DateTime.Now; _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new AnalogyLogMessage - { - Text = $"{FileName} has been deleted. Stopping monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); + _readingInprogress = true; } - - private async void WatchFile_Changed(object sender, FileSystemEventArgs e) + try { - if (_readingInprogress) - { - return; - } - - FileInfo f = new FileInfo(e.FullPath); - if (lastWriteTime == f.LastWriteTime) + if (e.ChangeType == WatcherChangeTypes.Changed) { - return; - } - - - - lock (_sync) - { - if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) - { - return; - } - lastWriteTime = f.LastWriteTime; - lastRead = DateTime.Now; - _watchFile.EnableRaisingEvents = false; - _readingInprogress = true; - - } - - try - { - if (e.ChangeType == WatcherChangeTypes.Changed) - { - LogUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); - } - } - catch (Exception exception) - { - AnalogyLogMessage m = new AnalogyLogMessage - { - Text = $"Error monitoring file {e.FullPath}. Reason {exception}", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); - AnalogyLogManager.Instance.LogErrorMessage(m); - } - finally - { - _readingInprogress = false; - _watchFile.EnableRaisingEvents = true; + _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); + await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); } } - public void ReportFileReadProgress(AnalogyFileReadProgress progress) + catch (Exception exception) { - //noop + AnalogyLogMessage m = new() + { + Text = $"Error monitoring file {e.FullPath}. Reason {exception}", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); + AnalogyLogManager.Instance.LogErrorMessage(m); + } + finally + { + _readingInprogress = false; + _watchFile.EnableRaisingEvents = true; } } -} - +} \ No newline at end of file From 40cd11a7ae8525ecf53dbcbb432969bf39acd8f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Tue, 28 Mar 2023 08:59:46 +0200 Subject: [PATCH 17/25] =?UTF-8?q?=F0=9F=90=9B=20Adding=20semaphore=20to=20?= =?UTF-8?q?avoid=20issue=20on=20closing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy/Managers/FilePoolingManager.cs | 168 +++++++++++++++---------- 1 file changed, 101 insertions(+), 67 deletions(-) diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index a8f2d720f..3474fd73d 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -17,6 +17,8 @@ internal class FilePoolingManager : ILogMessageCreatedHandler private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; private readonly UCLogs _logUI; private readonly List _messages; + //Instantiate a Singleton of the Semaphore with a value of 1. This means that only 1 thread can be granted access at a time. + static SemaphoreSlim _watcherSemaphore = new SemaphoreSlim(1,1); private readonly object _sync; private DateTime _lastRead; @@ -127,93 +129,125 @@ public void StopMonitoring() private void WatchFile_Error(object sender, ErrorEventArgs e) { - _watchFile.EnableRaisingEvents = false; - _watchFile.Dispose(); - AnalogyLogMessage m = new() - { - Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", - FileName = FileName, - Level = AnalogyLogLevel.Critical, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); + _watcherSemaphore.Wait(); + try + { + _watchFile.EnableRaisingEvents = false; + _watchFile.Dispose(); + AnalogyLogMessage m = new() + { + Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", + FileName = FileName, + Level = AnalogyLogLevel.Critical, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + } + finally + { + _watcherSemaphore.Release(); + } } private async void WatchFile_Renamed(object sender, RenamedEventArgs e) { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new() - { - Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - await Init(); - } - - private void WatchFile_Deleted(object sender, FileSystemEventArgs e) - { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new() - { - Text = $"{FileName} has been deleted. Stopping monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - } - - private async void WatchFile_Changed(object sender, FileSystemEventArgs e) - { - if (_readingInprogress) - return; - FileInfo f = new(e.FullPath); - if (_lastWriteTime == f.LastWriteTime) - return; - lock (_sync) + await _watcherSemaphore.WaitAsync(); + try { - if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) - return; - _lastWriteTime = f.LastWriteTime; - _lastRead = DateTime.Now; _watchFile.EnableRaisingEvents = false; - _readingInprogress = true; + AnalogyLogMessage m = new() + { + Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + await Init(); } - try + finally { - if (e.ChangeType == WatcherChangeTypes.Changed) - { - _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); - } + _watcherSemaphore.Release(); } - catch (Exception exception) + } + + private void WatchFile_Deleted(object sender, FileSystemEventArgs e) + { + _watcherSemaphore.Wait(); + try { + _watchFile.EnableRaisingEvents = false; AnalogyLogMessage m = new() { - Text = $"Error monitoring file {e.FullPath}. Reason {exception}", + Text = $"{FileName} has been deleted. Stopping monitoring", FileName = FileName, Level = AnalogyLogLevel.Warning, Class = AnalogyLogClass.General, Date = DateTime.Now }; - OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); - AnalogyLogManager.Instance.LogErrorMessage(m); + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + } + finally + { + _watcherSemaphore.Release(); + } + } + + private async void WatchFile_Changed(object sender, FileSystemEventArgs e) + { + await _watcherSemaphore.WaitAsync(); + try + { + if (_readingInprogress) + return; + FileInfo f = new(e.FullPath); + if (_lastWriteTime == f.LastWriteTime) + return; + lock (_sync) + { + if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) + return; + _lastWriteTime = f.LastWriteTime; + _lastRead = DateTime.Now; + _watchFile.EnableRaisingEvents = false; + _readingInprogress = true; + } + try + { + if (e.ChangeType == WatcherChangeTypes.Changed) + { + _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); + await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); + } + } + catch (Exception exception) + { + AnalogyLogMessage m = new() + { + Text = $"Error monitoring file {e.FullPath}. Reason {exception}", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); + AnalogyLogManager.Instance.LogErrorMessage(m); + } + finally + { + _readingInprogress = false; + _watchFile.EnableRaisingEvents = true; + } } finally { - _readingInprogress = false; - _watchFile.EnableRaisingEvents = true; + _watcherSemaphore.Release(); } } } \ No newline at end of file From d15a7c181b9141589a72eb5fe764866d50a44441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Tue, 28 Mar 2023 16:18:38 +0200 Subject: [PATCH 18/25] =?UTF-8?q?=F0=9F=9A=A7=20Improving=20custom=20contr?= =?UTF-8?q?ol=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy.Common/Analogy.Common.csproj | 2 +- Analogy.Common/Interfaces/ILogWindow.cs | 4 +--- Analogy.CommonControls/Analogy.CommonControls.csproj | 1 - Analogy.CommonControls/UserControls/LogMessagesUC.cs | 11 ++++++----- .../UserControls/ServerSideLogMessagesUC.cs | 10 ++++++---- Analogy/Analogy.csproj | 2 +- Analogy/Tools/FileComparerProcessor.cs | 3 +++ 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Analogy.Common/Analogy.Common.csproj b/Analogy.Common/Analogy.Common.csproj index 713e0e0c2..8f0505b61 100644 --- a/Analogy.Common/Analogy.Common.csproj +++ b/Analogy.Common/Analogy.Common.csproj @@ -40,7 +40,7 @@ - + diff --git a/Analogy.Common/Interfaces/ILogWindow.cs b/Analogy.Common/Interfaces/ILogWindow.cs index 428d71731..8aff54b9f 100644 --- a/Analogy.Common/Interfaces/ILogWindow.cs +++ b/Analogy.Common/Interfaces/ILogWindow.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Analogy.Interfaces; namespace Analogy.Common.Interfaces @@ -10,5 +7,6 @@ namespace Analogy.Common.Interfaces public interface ILogWindow { List GetMessages(); + Guid Id { get; } } } diff --git a/Analogy.CommonControls/Analogy.CommonControls.csproj b/Analogy.CommonControls/Analogy.CommonControls.csproj index 9ec193316..1ee7ecddc 100644 --- a/Analogy.CommonControls/Analogy.CommonControls.csproj +++ b/Analogy.CommonControls/Analogy.CommonControls.csproj @@ -44,7 +44,6 @@ - diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index a48f6e6f6..f27339d9c 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -200,6 +200,7 @@ public bool RealTimeMode public LogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManager extensionManager, IFactoriesManager factoriesManager, IAnalogyLogger logger) { Logger = logger; + Id = Guid.NewGuid(); Settings = userSettingsManager; ExtensionManager = extensionManager; FactoriesManager = factoriesManager; @@ -303,7 +304,6 @@ public LogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManage _filterCriteria.IncludeFilterCriteriaUIOptions = IncludeFilterCriteriaUIOptions; _filterCriteria.ExcludeFilterCriteriaUIOptions = ExcludeFilterCriteriaUIOptions; - } private async void LogMessagesUC_Load(object sender, EventArgs e) @@ -1457,9 +1457,9 @@ public async Task LoadExtensions() pnl.ID = extension.Id; pnl.DockedAsTabbedDocument = true; } - pnl.Controls.Add(extension.UserControl); + pnl.Controls.Add(extension.CreateUserControl(Id, Logger)); pnl.SizeChanged += ExtensionPanel_SizeChanged; - await extension.InitializeUserControl(this, Logger); + await extension.InitializeUserControl(this, Id, Logger); } } @@ -1659,6 +1659,7 @@ internal DataTable GetFilteredDataTable() } public List GetMessages() => PagingManager.GetAllMessages(); + public Guid Id { get; } private string GetFilterDisplayText(DateRangeFilter filterType) { @@ -1816,7 +1817,7 @@ public void AppendMessage(IAnalogyLogMessage message, string dataSource) { if (IsHandleCreated) { - BeginInvoke(new MethodInvoker(() => extension.NewMessage(message))); + BeginInvoke(new MethodInvoker(() => extension.NewMessage(message, Id))); } } } @@ -1933,7 +1934,7 @@ public void AppendMessages(List messages, string dataSource) { foreach (var extension in UserControlRegisteredExtensions) { - BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages))); + BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages, Id))); } } diff --git a/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs b/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs index 4c3ea6d3b..8985c2ecb 100644 --- a/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs @@ -159,6 +159,7 @@ public bool RealTimeMode public ServerSideLogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManager extensionManager, IFactoriesManager factoriesManager, IAnalogyLogger logger) { Logger = logger; + Id = Guid.NewGuid(); Settings = userSettingsManager; ExtensionManager = extensionManager; FactoriesManager = factoriesManager; @@ -1307,8 +1308,8 @@ public async Task LoadExtensions() { var page = dockManager1.AddPanel(DockingStyle.Float); page.Text = extension.Title; - page.Controls.Add(extension.UserControl); - await extension.InitializeUserControl(this, Logger); + page.Controls.Add(extension.CreateUserControl(Id, Logger)); + await extension.InitializeUserControl(this, Id, Logger); page.DockedAsTabbedDocument = true; } } @@ -1501,6 +1502,7 @@ internal DataTable GetFilteredDataTable() } public List GetMessages() => PagingManager.GetAllMessages(); + public Guid Id { get; } private string GetFilterDisplayText(DateRangeFilter filterType) { @@ -1650,7 +1652,7 @@ public void AppendMessage(IAnalogyLogMessage message, string dataSource) { if (IsHandleCreated) { - BeginInvoke(new MethodInvoker(() => extension.NewMessage(message))); + BeginInvoke(new MethodInvoker(() => extension.NewMessage(message, Id))); } } } @@ -1763,7 +1765,7 @@ public void AppendMessages(List messages, string dataSource) { foreach (var extension in UserControlRegisteredExtensions) { - BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages))); + BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages, Id))); } } diff --git a/Analogy/Analogy.csproj b/Analogy/Analogy.csproj index 4f91aee59..59bd889d6 100644 --- a/Analogy/Analogy.csproj +++ b/Analogy/Analogy.csproj @@ -48,7 +48,7 @@ - + diff --git a/Analogy/Tools/FileComparerProcessor.cs b/Analogy/Tools/FileComparerProcessor.cs index c0b15c265..39f471d5e 100644 --- a/Analogy/Tools/FileComparerProcessor.cs +++ b/Analogy/Tools/FileComparerProcessor.cs @@ -17,6 +17,7 @@ public class FileComparerProcessor : ILogMessageCreatedHandler,ILogWindow public string FileName { get; } public FileComparerProcessor(string filename) { + Id = Guid.NewGuid(); FileName = filename; messages = new List(); } @@ -62,5 +63,7 @@ public List GetMessages() { return messages; } + + public Guid Id { get; } } } From 6845771464e89b10d21a3fa5a18f61c47ca62e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 29 Mar 2023 09:19:07 +0200 Subject: [PATCH 19/25] =?UTF-8?q?=F0=9F=90=9B=20Disposing=20controls=20on?= =?UTF-8?q?=20panel=20closing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Analogy/Forms/FluentDesignMainForm.cs | 5 +++++ Analogy/Forms/MainForm.cs | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Analogy/Forms/FluentDesignMainForm.cs b/Analogy/Forms/FluentDesignMainForm.cs index 0284837fe..1b5b4424b 100644 --- a/Analogy/Forms/FluentDesignMainForm.cs +++ b/Analogy/Forms/FluentDesignMainForm.cs @@ -489,6 +489,11 @@ private void SetupEventHandlers() dockManager1.ClosingPanel += (s, e) => { + Control control = e.Panel.ActiveControl; + if (control != null) + { + control.Dispose(); + } var workspace = Utils.GetLogWindows(this); workspace?.SaveCurrentWorkspace(); }; diff --git a/Analogy/Forms/MainForm.cs b/Analogy/Forms/MainForm.cs index 95b4f3e6e..ab4d474de 100644 --- a/Analogy/Forms/MainForm.cs +++ b/Analogy/Forms/MainForm.cs @@ -417,10 +417,15 @@ private void SetupEventHandlers() { Utils.OpenLink("https://www.binance.com/en/register?ref=V8P114PE"); }; - dockManager1.ClosingPanel += (s, e) => + dockManager1.ClosingPanel += (s, e) => { - var workspace = Utils.GetLogWindows(this); - workspace?.SaveCurrentWorkspace(); + Control control = e.Panel.ActiveControl; + if (control != null) + { + control.Dispose(); + } + var workspace = Utils.GetLogWindows(this); + workspace?.SaveCurrentWorkspace(); }; bbtnSponsorOpenCollection.ItemClick += (s, e) => Utils.OpenLink("https://opencollective.com/analogy-log-viewer"); @@ -572,7 +577,7 @@ private void SetupEventHandlers() }; bbiBookmarks.ItemClick += (s, e) => OpenBookmarkLog(); - + } private async Task OpenOfflineLogs(RibbonPage ribbonPage, string[] filenames, From 3325955ec3f3c8116fcf1149ce88948ceab5eac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 29 Mar 2023 10:03:40 +0200 Subject: [PATCH 20/25] =?UTF-8?q?Revert=20"=F0=9F=90=9B=20Adding=20semapho?= =?UTF-8?q?re=20to=20avoid=20issue=20on=20closing"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 40cd11a7ae8525ecf53dbcbb432969bf39acd8f3. --- Analogy/Managers/FilePoolingManager.cs | 168 ++++++++++--------------- 1 file changed, 67 insertions(+), 101 deletions(-) diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index 3474fd73d..a8f2d720f 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -17,8 +17,6 @@ internal class FilePoolingManager : ILogMessageCreatedHandler private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; private readonly UCLogs _logUI; private readonly List _messages; - //Instantiate a Singleton of the Semaphore with a value of 1. This means that only 1 thread can be granted access at a time. - static SemaphoreSlim _watcherSemaphore = new SemaphoreSlim(1,1); private readonly object _sync; private DateTime _lastRead; @@ -129,125 +127,93 @@ public void StopMonitoring() private void WatchFile_Error(object sender, ErrorEventArgs e) { - _watcherSemaphore.Wait(); - try - { - _watchFile.EnableRaisingEvents = false; - _watchFile.Dispose(); - AnalogyLogMessage m = new() - { - Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", - FileName = FileName, - Level = AnalogyLogLevel.Critical, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - } - finally - { - _watcherSemaphore.Release(); - } + _watchFile.EnableRaisingEvents = false; + _watchFile.Dispose(); + AnalogyLogMessage m = new() + { + Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", + FileName = FileName, + Level = AnalogyLogLevel.Critical, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); } private async void WatchFile_Renamed(object sender, RenamedEventArgs e) { - await _watcherSemaphore.WaitAsync(); - try - { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new() - { - Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - await Init(); - } - finally - { - _watcherSemaphore.Release(); - } + _watchFile.EnableRaisingEvents = false; + AnalogyLogMessage m = new() + { + Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + await Init(); } private void WatchFile_Deleted(object sender, FileSystemEventArgs e) { - _watcherSemaphore.Wait(); - try + _watchFile.EnableRaisingEvents = false; + AnalogyLogMessage m = new() + { + Text = $"{FileName} has been deleted. Stopping monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + } + + private async void WatchFile_Changed(object sender, FileSystemEventArgs e) + { + if (_readingInprogress) + return; + FileInfo f = new(e.FullPath); + if (_lastWriteTime == f.LastWriteTime) + return; + lock (_sync) { + if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) + return; + _lastWriteTime = f.LastWriteTime; + _lastRead = DateTime.Now; _watchFile.EnableRaisingEvents = false; + _readingInprogress = true; + } + try + { + if (e.ChangeType == WatcherChangeTypes.Changed) + { + _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); + await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); + } + } + catch (Exception exception) + { AnalogyLogMessage m = new() { - Text = $"{FileName} has been deleted. Stopping monitoring", + Text = $"Error monitoring file {e.FullPath}. Reason {exception}", FileName = FileName, Level = AnalogyLogLevel.Warning, Class = AnalogyLogClass.General, Date = DateTime.Now }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - } - finally - { - _watcherSemaphore.Release(); - } - } - - private async void WatchFile_Changed(object sender, FileSystemEventArgs e) - { - await _watcherSemaphore.WaitAsync(); - try - { - if (_readingInprogress) - return; - FileInfo f = new(e.FullPath); - if (_lastWriteTime == f.LastWriteTime) - return; - lock (_sync) - { - if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) - return; - _lastWriteTime = f.LastWriteTime; - _lastRead = DateTime.Now; - _watchFile.EnableRaisingEvents = false; - _readingInprogress = true; - } - try - { - if (e.ChangeType == WatcherChangeTypes.Changed) - { - _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); - } - } - catch (Exception exception) - { - AnalogyLogMessage m = new() - { - Text = $"Error monitoring file {e.FullPath}. Reason {exception}", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); - AnalogyLogManager.Instance.LogErrorMessage(m); - } - finally - { - _readingInprogress = false; - _watchFile.EnableRaisingEvents = true; - } + OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); + AnalogyLogManager.Instance.LogErrorMessage(m); } finally { - _watcherSemaphore.Release(); + _readingInprogress = false; + _watchFile.EnableRaisingEvents = true; } } } \ No newline at end of file From 2f247272899d718e1d03738015a4eabb2e4caf6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 29 Mar 2023 10:03:51 +0200 Subject: [PATCH 21/25] =?UTF-8?q?Revert=20"=F0=9F=90=9B=20Correcting=20poo?= =?UTF-8?q?ling=20for=20rolling=20files"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 6451346e7f4a539d57f6b21dc208754a11f7c4cb. --- Analogy/Managers/FilePoolingManager.cs | 369 +++++++++++++------------ 1 file changed, 191 insertions(+), 178 deletions(-) diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index a8f2d720f..555516939 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -1,219 +1,232 @@ -using System; +using Analogy.Interfaces; +using Analogy.Interfaces.DataTypes; +using Analogy.UserControls; +using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Analogy.Common.DataTypes; -using Analogy.Interfaces; -using Analogy.Interfaces.DataTypes; -using Analogy.UserControls; - -namespace Analogy.Managers; +using Analogy.Common.Interfaces; -internal class FilePoolingManager : ILogMessageCreatedHandler +namespace Analogy.Managers { - private readonly CancellationTokenSource _cancellationTokenSource; - private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; - private readonly UCLogs _logUI; - private readonly List _messages; - - private readonly object _sync; - private DateTime _lastRead; - private DateTime _lastWriteTime = DateTime.MinValue; - private bool _readingInprogress; - private FileSystemWatcher _watchFile; - public EventHandler<(List messages, string dataSource)> OnNewMessages; - - public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) + internal class FilePoolingManager : ILogMessageCreatedHandler { - _sync = new object(); - _logUI = logUI; - _customEqualityComparer = new AnalogyLogMessageCustomEqualityComparer { CompareId = false }; - _cancellationTokenSource = new CancellationTokenSource(); - OfflineDataProvider = offlineDataProvider; - _messages = new List(); - FileName = initialFilename; - FileFilter = filter; - FileProcessor = new FileProcessor(Settings, this, AnalogyLogger.Instance); - } + private IAnalogyUserSettings Settings => UserSettingsManager.UserSettings; + + private string FileName { get; } + private FileProcessor FileProcessor { get; } + private IAnalogyOfflineDataProvider OfflineDataProvider { get; } + private readonly CancellationTokenSource _cancellationTokenSource; + private readonly List _messages; + public EventHandler<(List messages, string dataSource)> OnNewMessages; + public bool ForceNoFileCaching { get; set; } = true; + + public bool DoNotAddToRecentHistory { get; set; } = true; + private readonly object _sync; + private FileSystemWatcher _watchFile; + private bool _readingInprogress; + private DateTime lastWriteTime = DateTime.MinValue; + private DateTime lastRead; + private UCLogs LogUI; + private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; + public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) + { + _sync = new object(); + LogUI = logUI; + _customEqualityComparer = new AnalogyLogMessageCustomEqualityComparer { CompareId = false }; + _cancellationTokenSource = new CancellationTokenSource(); + OfflineDataProvider = offlineDataProvider; + _messages = new List(); + FileName = initialFilename; + FileFilter = filter; + FileProcessor = new FileProcessor(Settings, this,AnalogyLogger.Instance); - private IAnalogyUserSettings Settings - { - get { return UserSettingsManager.UserSettings; } - } + } - private string FileName { get; } - private FileProcessor FileProcessor { get; } - private IAnalogyOfflineDataProvider OfflineDataProvider { get; } + public string FileFilter { get; set; } - public string FileFilter { get; set; } + public Task Init() + { + HasFiltFilter = !FileFilter.Equals(FileName); + _watchFile = new FileSystemWatcher + { + Path = Path.GetDirectoryName(FileName), + Filter = Path.GetFileName(FileFilter) + }; + _watchFile.Changed += WatchFile_Changed; + if (HasFiltFilter) + { + _watchFile.Deleted += WatchFile_Deleted; + _watchFile.Renamed += WatchFile_Renamed; + } + _watchFile.Error += WatchFile_Error; + _watchFile.EnableRaisingEvents = true; + AnalogyLogMessage m = new AnalogyLogMessage + { + Text = $"Start monitoring file {FileFilter}.", + FileName = FileFilter, + Level = AnalogyLogLevel.Analogy, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); + } - public bool HasFiltFilter { get; set; } - public bool ForceNoFileCaching { get; set; } = true; - public bool DoNotAddToRecentHistory { get; set; } = true; + public bool HasFiltFilter { get; set; } - public void AppendMessage(IAnalogyLogMessage message, string dataSource) - { - lock (_sync) + public void StopMonitoring() { - if (!_messages.Contains(message)) + + _watchFile.EnableRaisingEvents = false; + _watchFile.Changed -= WatchFile_Changed; + if (HasFiltFilter) { - _messages.Add(message); - OnNewMessages?.Invoke(this, (new List { message }, dataSource)); + _watchFile.Deleted -= WatchFile_Deleted; + _watchFile.Renamed -= WatchFile_Renamed; } + _watchFile.Error -= WatchFile_Error; + _watchFile.Dispose(); } - } - - public void AppendMessages(List messagesFromFile, string dataSource) - { - lock (_sync) + public void AppendMessage(IAnalogyLogMessage message, string dataSource) { - List newMessages = messagesFromFile.Except(_messages, _customEqualityComparer).ToList(); - if (newMessages.Any()) + lock (_sync) { - _messages.AddRange(newMessages); - OnNewMessages?.Invoke(this, (newMessages, dataSource)); + if (!_messages.Contains(message)) + { + _messages.Add(message); + OnNewMessages?.Invoke(this, (new List { message }, dataSource)); + } } } - } - public void ReportFileReadProgress(AnalogyFileReadProgress progress) - { - //noop - } - - public Task Init() - { - HasFiltFilter = !FileFilter.Equals(FileName); - _watchFile = new FileSystemWatcher - { - Path = Path.GetDirectoryName(FileName), - Filter = Path.GetFileName(FileFilter) - }; - _watchFile.Changed += WatchFile_Changed; - if (!HasFiltFilter) + public void AppendMessages(List messagesFromFile, string dataSource) { - _watchFile.Deleted += WatchFile_Deleted; - _watchFile.Renamed += WatchFile_Renamed; + + lock (_sync) + { + var newMessages = messagesFromFile.Except(_messages, _customEqualityComparer).ToList(); + if (newMessages.Any()) + { + _messages.AddRange(newMessages); + OnNewMessages?.Invoke(this, (newMessages, dataSource)); + } + } } - _watchFile.Error += WatchFile_Error; - _watchFile.EnableRaisingEvents = true; - AnalogyLogMessage m = new() - { - Text = $"Start monitoring file {FileFilter}.", - FileName = FileFilter, - Level = AnalogyLogLevel.Analogy, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); - } - public void StopMonitoring() - { - _watchFile.EnableRaisingEvents = false; - _watchFile.Changed -= WatchFile_Changed; - if (!HasFiltFilter) + private void WatchFile_Error(object sender, ErrorEventArgs e) { - _watchFile.Deleted -= WatchFile_Deleted; - _watchFile.Renamed -= WatchFile_Renamed; + _watchFile.EnableRaisingEvents = false; + _watchFile.Dispose(); + AnalogyLogMessage m = new AnalogyLogMessage + { + Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", + FileName = FileName, + Level = AnalogyLogLevel.Critical, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, FileName)); } - _watchFile.Error -= WatchFile_Error; - _watchFile.Dispose(); - } - private void WatchFile_Error(object sender, ErrorEventArgs e) - { - _watchFile.EnableRaisingEvents = false; - _watchFile.Dispose(); - AnalogyLogMessage m = new() - { - Text = $"Error monitoring file {FileName}. Reason {e.GetException()}", - FileName = FileName, - Level = AnalogyLogLevel.Critical, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - } - - private async void WatchFile_Renamed(object sender, RenamedEventArgs e) - { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new() - { - Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Source = "Analogy", - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - await Init(); - } + private async void WatchFile_Renamed(object sender, RenamedEventArgs e) + { + _watchFile.EnableRaisingEvents = false; + AnalogyLogMessage m = new AnalogyLogMessage + { + Text = $"{FileName} has changed to {e.FullPath} from {e.OldName}. restarting monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Source = "Analogy", + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); + await Init(); - private void WatchFile_Deleted(object sender, FileSystemEventArgs e) - { - _watchFile.EnableRaisingEvents = false; - AnalogyLogMessage m = new() - { - Text = $"{FileName} has been deleted. Stopping monitoring", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - _watchFile.Dispose(); - OnNewMessages?.Invoke(this, (new List { m }, FileName)); - } + } - private async void WatchFile_Changed(object sender, FileSystemEventArgs e) - { - if (_readingInprogress) - return; - FileInfo f = new(e.FullPath); - if (_lastWriteTime == f.LastWriteTime) - return; - lock (_sync) + private void WatchFile_Deleted(object sender, FileSystemEventArgs e) { - if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(_lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) - return; - _lastWriteTime = f.LastWriteTime; - _lastRead = DateTime.Now; _watchFile.EnableRaisingEvents = false; - _readingInprogress = true; + AnalogyLogMessage m = new AnalogyLogMessage + { + Text = $"{FileName} has been deleted. Stopping monitoring", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + _watchFile.Dispose(); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); } - try + + private async void WatchFile_Changed(object sender, FileSystemEventArgs e) { - if (e.ChangeType == WatcherChangeTypes.Changed) + if (_readingInprogress) { - _logUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); + return; + } + + FileInfo f = new FileInfo(e.FullPath); + if (lastWriteTime == f.LastWriteTime) + { + return; + } + + + + lock (_sync) + { + if (_readingInprogress || (Settings.EnableFilePoolingDelay && DateTime.Now.Subtract(lastRead).TotalSeconds <= Settings.FilePoolingDelayInterval)) + { + return; + } + lastWriteTime = f.LastWriteTime; + lastRead = DateTime.Now; + _watchFile.EnableRaisingEvents = false; + _readingInprogress = true; + + } + + try + { + if (e.ChangeType == WatcherChangeTypes.Changed) + { + LogUI.SetReloadColorDate(FileProcessor.lastNewestMessage); + await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); + } + } + catch (Exception exception) + { + AnalogyLogMessage m = new AnalogyLogMessage + { + Text = $"Error monitoring file {e.FullPath}. Reason {exception}", + FileName = FileName, + Level = AnalogyLogLevel.Warning, + Class = AnalogyLogClass.General, + Date = DateTime.Now + }; + OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); + AnalogyLogManager.Instance.LogErrorMessage(m); + } + finally + { + _readingInprogress = false; + _watchFile.EnableRaisingEvents = true; } } - catch (Exception exception) - { - AnalogyLogMessage m = new() - { - Text = $"Error monitoring file {e.FullPath}. Reason {exception}", - FileName = FileName, - Level = AnalogyLogLevel.Warning, - Class = AnalogyLogClass.General, - Date = DateTime.Now - }; - OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); - AnalogyLogManager.Instance.LogErrorMessage(m); - } - finally + public void ReportFileReadProgress(AnalogyFileReadProgress progress) { - _readingInprogress = false; - _watchFile.EnableRaisingEvents = true; + //noop } } -} \ No newline at end of file +} + From 405e3bc655f3499e8c6bc39e6fb3886967f9b576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Yann=20Brid=C3=A9?= Date: Wed, 29 Mar 2023 10:04:19 +0200 Subject: [PATCH 22/25] =?UTF-8?q?Revert=20"=E2=9C=A8=20Adding=20pooling=20?= =?UTF-8?q?of=20rolling=20files"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cb8471d5ab3f15fb47f8f684141bcd3a31d4eb2e. --- Analogy/Forms/EditFilePooling.Designer.cs | 88 ---------------- Analogy/Forms/EditFilePooling.cs | 29 ------ Analogy/Forms/EditFilePooling.resx | 120 ---------------------- Analogy/Forms/FluentDesignMainForm.cs | 8 +- Analogy/Forms/MainForm.cs | 16 ++- Analogy/Managers/FilePoolingManager.cs | 36 +++---- Analogy/UserControls/FilePoolingLog.cs | 6 +- 7 files changed, 24 insertions(+), 279 deletions(-) delete mode 100644 Analogy/Forms/EditFilePooling.Designer.cs delete mode 100644 Analogy/Forms/EditFilePooling.cs delete mode 100644 Analogy/Forms/EditFilePooling.resx diff --git a/Analogy/Forms/EditFilePooling.Designer.cs b/Analogy/Forms/EditFilePooling.Designer.cs deleted file mode 100644 index 2873c5509..000000000 --- a/Analogy/Forms/EditFilePooling.Designer.cs +++ /dev/null @@ -1,88 +0,0 @@ -namespace Analogy.Forms -{ - partial class EditFilePooling - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.txtFilename = new System.Windows.Forms.TextBox(); - this.BtnOk = new System.Windows.Forms.Button(); - this.lblHelp = new System.Windows.Forms.Label(); - this.SuspendLayout(); - // - // txtFilename - // - this.txtFilename.Location = new System.Drawing.Point(12, 42); - this.txtFilename.Name = "txtFilename"; - this.txtFilename.Size = new System.Drawing.Size(775, 20); - this.txtFilename.TabIndex = 0; - // - // BtnOk - // - this.BtnOk.Location = new System.Drawing.Point(713, 77); - this.BtnOk.Name = "BtnOk"; - this.BtnOk.Size = new System.Drawing.Size(75, 23); - this.BtnOk.TabIndex = 1; - this.BtnOk.Text = "Ok"; - this.BtnOk.UseVisualStyleBackColor = true; - this.BtnOk.Click += new System.EventHandler(this.BtnOk_Click); - // - // lblHelp - // - this.lblHelp.AutoSize = true; - this.lblHelp.Location = new System.Drawing.Point(12, 19); - this.lblHelp.Name = "lblHelp"; - this.lblHelp.Size = new System.Drawing.Size(193, 13); - this.lblHelp.TabIndex = 2; - this.lblHelp.Text = "Add any needed * for rolling file scheme"; - // - // EditFilePooling - // - this.AcceptButton = this.BtnOk; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 112); - this.ControlBox = false; - this.Controls.Add(this.lblHelp); - this.Controls.Add(this.BtnOk); - this.Controls.Add(this.txtFilename); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "EditFilePooling"; - this.ShowIcon = false; - this.Text = "Edit filename filter for pooling"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox txtFilename; - private System.Windows.Forms.Button BtnOk; - private System.Windows.Forms.Label lblHelp; - } -} \ No newline at end of file diff --git a/Analogy/Forms/EditFilePooling.cs b/Analogy/Forms/EditFilePooling.cs deleted file mode 100644 index 71f87537a..000000000 --- a/Analogy/Forms/EditFilePooling.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.IO; -using System.Windows.Forms; - -namespace Analogy.Forms -{ - public partial class EditFilePooling : Form - { - public EditFilePooling(string fileName) - { - InitializeComponent(); - Dir = Path.GetDirectoryName(fileName) ?? string.Empty; - - txtFilename.Text = Path.GetFileName(fileName); - } - - - public string Dir { get; set; } - - public string Filter - { - get { return Path.Combine(Dir, txtFilename.Text); } - } - - private void BtnOk_Click(object sender, System.EventArgs e) - { - Close(); - } - } -} \ No newline at end of file diff --git a/Analogy/Forms/EditFilePooling.resx b/Analogy/Forms/EditFilePooling.resx deleted file mode 100644 index 1af7de150..000000000 --- a/Analogy/Forms/EditFilePooling.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Analogy/Forms/FluentDesignMainForm.cs b/Analogy/Forms/FluentDesignMainForm.cs index 1b5b4424b..c39507106 100644 --- a/Analogy/Forms/FluentDesignMainForm.cs +++ b/Analogy/Forms/FluentDesignMainForm.cs @@ -853,11 +853,11 @@ void OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataProvide dockManager1.ActivePanel = page; } - async Task OpenFilePooling(string titleOfDataSource, string initialFolder, string file, string initialFile) + async Task OpenFilePooling(string titleOfDataSource, string initialFolder, string file) { openedWindows++; await FactoriesManager.Instance.InitializeIfNeeded(offlineAnalogy); - UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFile, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -1011,9 +1011,7 @@ void OnXtcLogsOnControlRemoved(object sender, DockPanelEventArgs arg) }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { - EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); - efp.ShowDialog(); - await OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); + await OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, openFileDialog1.FileName); AddRecentFiles(recentfiles, offlineAnalogy, title, new List { openFileDialog1.FileName }); } diff --git a/Analogy/Forms/MainForm.cs b/Analogy/Forms/MainForm.cs index ab4d474de..1e815b34c 100644 --- a/Analogy/Forms/MainForm.cs +++ b/Analogy/Forms/MainForm.cs @@ -1493,12 +1493,12 @@ async Task OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataP } async Task OpenFilePooling(string titleOfDataSource, IAnalogyOfflineDataProvider dataProvider, - string initialFolder, string file, string initialFile) + string initialFolder, string file) { OpenedWindows++; await FactoriesManager.Instance.InitializeIfNeeded(dataProvider); - UserControl filepoolingUC = new FilePoolingUCLogs(dataProvider, file, initialFile, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(dataProvider, file, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -1711,10 +1711,8 @@ await OpenOffline(dataProvider.OptionalTitle, dataProvider, }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { - EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); - efp.ShowDialog(); await OpenFilePooling(dataProvider.OptionalTitle, dataProvider, - dataProvider.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); + dataProvider.InitialFolderFullPath, openFileDialog1.FileName); AddRecentFiles(ribbonPage, recentBar, dataProvider, dataProvider.OptionalTitle, new List { openFileDialog1.FileName }); } @@ -1857,11 +1855,11 @@ async Task OpenExternalDataSource(string titleOfDataSource, IAnalogyOfflineDataP } - void OpenFilePooling(string titleOfDataSource, string initialFolder, string file, string initialFile) + void OpenFilePooling(string titleOfDataSource, string initialFolder, string file) { OpenedWindows++; - UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFile, initialFolder); + UserControl filepoolingUC = new FilePoolingUCLogs(offlineAnalogy, file, initialFolder); var page = dockManager1.AddPanel(DockingStyle.Float); page.DockedAsTabbedDocument = true; @@ -2009,9 +2007,7 @@ void OnXtcLogsOnControlRemoved(object sender, DockPanelEventArgs arg) }; if (openFileDialog1.ShowDialog() == DialogResult.OK) { - EditFilePooling efp = new EditFilePooling(openFileDialog1.FileName); - efp.ShowDialog(); - OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, efp.Filter, openFileDialog1.FileName); + OpenFilePooling(title, offlineAnalogy.InitialFolderFullPath, openFileDialog1.FileName); AddRecentFiles(ribbonPage, recentBar, offlineAnalogy, title, new List { openFileDialog1.FileName }); } diff --git a/Analogy/Managers/FilePoolingManager.cs b/Analogy/Managers/FilePoolingManager.cs index 555516939..84f89edfa 100644 --- a/Analogy/Managers/FilePoolingManager.cs +++ b/Analogy/Managers/FilePoolingManager.cs @@ -32,7 +32,7 @@ internal class FilePoolingManager : ILogMessageCreatedHandler private DateTime lastRead; private UCLogs LogUI; private readonly AnalogyLogMessageCustomEqualityComparer _customEqualityComparer; - public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) + public FilePoolingManager(string fileName, UCLogs logUI, IAnalogyOfflineDataProvider offlineDataProvider) { _sync = new object(); LogUI = logUI; @@ -40,56 +40,44 @@ public FilePoolingManager(string filter, string initialFilename, UCLogs logUI, _cancellationTokenSource = new CancellationTokenSource(); OfflineDataProvider = offlineDataProvider; _messages = new List(); - FileName = initialFilename; - FileFilter = filter; + FileName = fileName; FileProcessor = new FileProcessor(Settings, this,AnalogyLogger.Instance); } - public string FileFilter { get; set; } public Task Init() { - HasFiltFilter = !FileFilter.Equals(FileName); _watchFile = new FileSystemWatcher { Path = Path.GetDirectoryName(FileName), - Filter = Path.GetFileName(FileFilter) + Filter = Path.GetFileName(FileName) }; _watchFile.Changed += WatchFile_Changed; - if (HasFiltFilter) - { - _watchFile.Deleted += WatchFile_Deleted; - _watchFile.Renamed += WatchFile_Renamed; - } + _watchFile.Deleted += WatchFile_Deleted; + _watchFile.Renamed += WatchFile_Renamed; _watchFile.Error += WatchFile_Error; _watchFile.EnableRaisingEvents = true; AnalogyLogMessage m = new AnalogyLogMessage { - Text = $"Start monitoring file {FileFilter}.", - FileName = FileFilter, + Text = $"Start monitoring file {FileName}.", + FileName = FileName, Level = AnalogyLogLevel.Analogy, Source = "Analogy", Class = AnalogyLogClass.General, Date = DateTime.Now }; - OnNewMessages?.Invoke(this, (new List { m }, FileName)); return FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); } - public bool HasFiltFilter { get; set; } - public void StopMonitoring() { _watchFile.EnableRaisingEvents = false; _watchFile.Changed -= WatchFile_Changed; - if (HasFiltFilter) - { - _watchFile.Deleted -= WatchFile_Deleted; - _watchFile.Renamed -= WatchFile_Renamed; - } + _watchFile.Deleted -= WatchFile_Deleted; + _watchFile.Renamed -= WatchFile_Renamed; _watchFile.Error -= WatchFile_Error; _watchFile.Dispose(); } @@ -201,20 +189,20 @@ private async void WatchFile_Changed(object sender, FileSystemEventArgs e) if (e.ChangeType == WatcherChangeTypes.Changed) { LogUI.SetReloadColorDate(FileProcessor.lastNewestMessage); - await FileProcessor.Process(OfflineDataProvider, e.FullPath, _cancellationTokenSource.Token); + await FileProcessor.Process(OfflineDataProvider, FileName, _cancellationTokenSource.Token); } } catch (Exception exception) { AnalogyLogMessage m = new AnalogyLogMessage { - Text = $"Error monitoring file {e.FullPath}. Reason {exception}", + Text = $"Error monitoring file {FileName}. Reason {exception}", FileName = FileName, Level = AnalogyLogLevel.Warning, Class = AnalogyLogClass.General, Date = DateTime.Now }; - OnNewMessages?.Invoke(this, (new List { m }, e.FullPath)); + OnNewMessages?.Invoke(this, (new List { m }, FileName)); AnalogyLogManager.Instance.LogErrorMessage(m); } finally diff --git a/Analogy/UserControls/FilePoolingLog.cs b/Analogy/UserControls/FilePoolingLog.cs index 10167e2c7..edf912b8b 100644 --- a/Analogy/UserControls/FilePoolingLog.cs +++ b/Analogy/UserControls/FilePoolingLog.cs @@ -22,11 +22,11 @@ public partial class FilePoolingUCLogs : XtraUserControl private string FileName { get; set; } public bool Enable { get; set; } = true; private FilePoolingManager PoolingManager { get; } - public FilePoolingUCLogs(IAnalogyOfflineDataProvider offlineDataProvider, string filter, string initialFilename, string initialFolder) + public FilePoolingUCLogs(IAnalogyOfflineDataProvider offlineDataProvider, string fileName, string initialFolder) { InitializeComponent(); - FileName = initialFilename; - PoolingManager = new FilePoolingManager(filter, initialFilename, ucLogs1, offlineDataProvider); + FileName = fileName; + PoolingManager = new FilePoolingManager(FileName, ucLogs1, offlineDataProvider); ucLogs1.SetFileDataSource(offlineDataProvider, offlineDataProvider); ucLogs1.EnableFileReload(FileName); From b9411bbf0f9b2d39872d6ede47bbcb94099fe975 Mon Sep 17 00:00:00 2001 From: Lior Banai Date: Fri, 31 Mar 2023 13:37:49 +0300 Subject: [PATCH 23/25] Update nugets and interfaces --- Analogy.Common/Analogy.Common.csproj | 6 +-- .../Analogy.CommonControls.Example.csproj | 2 +- .../Analogy.CommonControls.csproj | 4 +- .../UserControls/LogMessagesUC.cs | 31 +++++++------- .../UserControls/ServerSideLogMessagesUC.cs | 42 ++++++++++++------- Analogy.UnitTests/Analogy.UnitTests.csproj | 4 +- Analogy/Analogy.csproj | 38 ++++++++--------- 7 files changed, 69 insertions(+), 58 deletions(-) diff --git a/Analogy.Common/Analogy.Common.csproj b/Analogy.Common/Analogy.Common.csproj index 8f0505b61..c89c1050f 100644 --- a/Analogy.Common/Analogy.Common.csproj +++ b/Analogy.Common/Analogy.Common.csproj @@ -39,9 +39,9 @@ - - - + + + diff --git a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj index 3d91d105d..39222983f 100644 --- a/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj +++ b/Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj @@ -11,7 +11,7 @@ - + diff --git a/Analogy.CommonControls/Analogy.CommonControls.csproj b/Analogy.CommonControls/Analogy.CommonControls.csproj index 1ee7ecddc..44b921893 100644 --- a/Analogy.CommonControls/Analogy.CommonControls.csproj +++ b/Analogy.CommonControls/Analogy.CommonControls.csproj @@ -43,8 +43,8 @@ - - + + diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index f27339d9c..5dff9ac66 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -402,9 +402,9 @@ private async void LogMessagesUC_Load(object sender, EventArgs e) private void HideColumns() { - if (DataProvider.HideColumns() != null) + if (DataProvider.HideAdditionalColumns() != null) { - foreach (string columnFieldName in DataProvider.HideColumns()) + foreach (string columnFieldName in DataProvider.HideAdditionalColumns()) { var column = logGrid.Columns.ColumnByFieldName(columnFieldName); if (column != null) @@ -413,6 +413,17 @@ private void HideColumns() } } } + if (DataProvider.HideExistingColumns() != null) + { + foreach (AnalogyLogMessagePropertyName columnFieldName in DataProvider.HideExistingColumns()) + { + var column = logGrid.Columns.ColumnByFieldName(columnFieldName.ToString()); + if (column != null) + { + column.Visible = false; + } + } + } } public void LoadWorkspace(string fileName) @@ -1081,18 +1092,13 @@ private void LogGrid_MouseUp(object sender, MouseEventArgs e) } private void LoadReplacementHeaders() { - if (DataProvider == null) + if (DataProvider?.GetReplacementHeaders() == null) { return; } try { - if (DataProvider.GetReplacementHeaders() == null || !DataProvider.GetReplacementHeaders().Any()) - { - return; - } - foreach ((string fieldName, string replacementHeader) in DataProvider.GetReplacementHeaders()) { var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); @@ -1101,15 +1107,6 @@ private void LoadReplacementHeaders() column.Caption = replacementHeader; } } - - foreach (string fieldName in DataProvider.HideColumns()) - { - var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); - if (column != null) - { - column.Visible = false; - } - } } catch (Exception) { diff --git a/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs b/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs index 8985c2ecb..d98869254 100644 --- a/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs @@ -261,6 +261,7 @@ private async void LogMessagesUC_Load(object sender, EventArgs e) LoadUISettings(); LoadReplacementHeaders(); + HideColumns(); BookmarkModeUI(); await LoadExtensions(); SetupEventsHandlers(); @@ -937,20 +938,41 @@ private void LogGrid_MouseUp(object sender, MouseEventArgs e) LogGridPopupMenu.ShowPopup(Cursor.Position); } } + private void HideColumns() + { + if (DataProvider.HideAdditionalColumns() != null) + { + foreach (string columnFieldName in DataProvider.HideAdditionalColumns()) + { + var column = logGrid.Columns.ColumnByFieldName(columnFieldName); + if (column != null) + { + column.Visible = false; + } + } + } + if (DataProvider.HideExistingColumns() != null) + { + foreach (AnalogyLogMessagePropertyName columnFieldName in DataProvider.HideExistingColumns()) + { + var column = logGrid.Columns.ColumnByFieldName(columnFieldName.ToString()); + if (column != null) + { + column.Visible = false; + } + } + } + } + private void LoadReplacementHeaders() { - if (DataProvider == null) + if (DataProvider?.GetReplacementHeaders() == null) { return; } try { - if (DataProvider.GetReplacementHeaders() == null || !DataProvider.GetReplacementHeaders().Any()) - { - return; - } - foreach ((string fieldName, string replacementHeader) in DataProvider.GetReplacementHeaders()) { var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); @@ -960,14 +982,6 @@ private void LoadReplacementHeaders() } } - foreach (string fieldName in DataProvider.HideColumns()) - { - var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName); - if (column != null) - { - column.Visible = false; - } - } } catch (Exception) { diff --git a/Analogy.UnitTests/Analogy.UnitTests.csproj b/Analogy.UnitTests/Analogy.UnitTests.csproj index 00a3c18ff..624dd93ad 100644 --- a/Analogy.UnitTests/Analogy.UnitTests.csproj +++ b/Analogy.UnitTests/Analogy.UnitTests.csproj @@ -48,8 +48,8 @@ - - + + diff --git a/Analogy/Analogy.csproj b/Analogy/Analogy.csproj index 59bd889d6..bebf96d6c 100644 --- a/Analogy/Analogy.csproj +++ b/Analogy/Analogy.csproj @@ -48,25 +48,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + From 8759749d7ddfddc1fd69c6f0b9a01651db40531f Mon Sep 17 00:00:00 2001 From: Lior Banai Date: Fri, 31 Mar 2023 14:03:01 +0300 Subject: [PATCH 24/25] use c#11 pattern --- Analogy.CommonControls/UserControls/LogMessagesUC.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Analogy.CommonControls/UserControls/LogMessagesUC.cs b/Analogy.CommonControls/UserControls/LogMessagesUC.cs index 5dff9ac66..58fce23e7 100644 --- a/Analogy.CommonControls/UserControls/LogMessagesUC.cs +++ b/Analogy.CommonControls/UserControls/LogMessagesUC.cs @@ -1460,9 +1460,9 @@ public async Task LoadExtensions() } } - private void ExtensionPanel_SizeChanged(object sender, EventArgs e) + private void ExtensionPanel_SizeChanged(object? sender, EventArgs e) { - if (sender is DockPanel pnl && pnl.Controls.Count > 0) + if (sender is DockPanel { Controls.Count: > 0 } pnl) { pnl.Controls[0].Size = pnl.Size; } From e263416b37162f593ee426d86e4ef35d83c925d3 Mon Sep 17 00:00:00 2001 From: Lior Banai Date: Fri, 31 Mar 2023 18:07:32 +0300 Subject: [PATCH 25/25] [nuget] remove source d:\LocalNuget --- Analogy.sln | 5 +++++ nuget.config | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Analogy.sln b/Analogy.sln index e2b5c4a5e..096ded5c7 100644 --- a/Analogy.sln +++ b/Analogy.sln @@ -20,6 +20,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Analogy.CommonControls.Exam EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Analogy.Common", "Analogy.Common\Analogy.Common.csproj", "{42A38B8A-CDCF-477A-8BC6-1A4685CD5255}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F5E34202-7C91-45AB-94DA-A8934FE3D3B6}" + ProjectSection(SolutionItems) = preProject + nuget.config = nuget.config + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/nuget.config b/nuget.config index ca74b0422..248a5bb51 100644 --- a/nuget.config +++ b/nuget.config @@ -3,6 +3,5 @@ - \ No newline at end of file