Skip to content

Commit 311d56d

Browse files
authored
Merge pull request #1681 from pybride/BetterUC
Improving handling of custom control linked to log tabs
2 parents 14c212c + e263416 commit 311d56d

File tree

12 files changed

+131
-78
lines changed

12 files changed

+131
-78
lines changed

Analogy.Common/Analogy.Common.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@
3939

4040
</ItemGroup>
4141
<ItemGroup>
42-
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.2" />
43-
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.0" />
44-
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.2" />
42+
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.3" />
43+
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.3" />
44+
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.3" />
4545
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
4646
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
4747
<PackageReference Include="System.IO.Compression" Version="4.3.0" />
+1-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
4-
using System.Text;
5-
using System.Threading.Tasks;
63
using Analogy.Interfaces;
74

85
namespace Analogy.Common.Interfaces
96
{
107
public interface ILogWindow
118
{
129
List<IAnalogyLogMessage> GetMessages();
10+
Guid Id { get; }
1311
}
1412
}

Analogy.CommonControls.Example/Analogy.CommonControls.Example.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.0" />
14+
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.3" />
1515
</ItemGroup>
1616
<ItemGroup Condition=" '$(TargetFramework)' == 'net48' or '$(TargetFramework)' == 'net471' ">
1717
<PackageReference Include="PolySharp" Version="1.12.1">

Analogy.CommonControls/Analogy.CommonControls.csproj

+2-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@
4343
</PackageReference>
4444
</ItemGroup>
4545
<ItemGroup>
46-
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.2" />
47-
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.0" />
48-
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.2" />
46+
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.3" />
47+
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.3" />
4948
<PackageReference Include="Markdig" Version="0.31.0" />
5049
<PackageReference Include="MessagePack" Version="2.5.108" />
5150
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />

Analogy.CommonControls/UserControls/LogMessagesUC.cs

+47-25
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ public bool RealTimeMode
200200
public LogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManager extensionManager, IFactoriesManager factoriesManager, IAnalogyLogger logger)
201201
{
202202
Logger = logger;
203+
Id = Guid.NewGuid();
203204
Settings = userSettingsManager;
204205
ExtensionManager = extensionManager;
205206
FactoriesManager = factoriesManager;
@@ -303,7 +304,6 @@ public LogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManage
303304
_filterCriteria.IncludeFilterCriteriaUIOptions = IncludeFilterCriteriaUIOptions;
304305
_filterCriteria.ExcludeFilterCriteriaUIOptions = ExcludeFilterCriteriaUIOptions;
305306

306-
307307
}
308308

309309
private async void LogMessagesUC_Load(object sender, EventArgs e)
@@ -347,6 +347,16 @@ private async void LogMessagesUC_Load(object sender, EventArgs e)
347347
LoadReplacementHeaders();
348348
HideColumns();
349349
BookmarkModeUI();
350+
351+
352+
if (!string.IsNullOrEmpty(Settings.LogsLayoutFileName) && File.Exists(Settings.LogsLayoutFileName))
353+
{
354+
string name = Path.GetFileNameWithoutExtension(Settings.LogsLayoutFileName);
355+
wsLogs.LoadWorkspace(name, Settings.LogsLayoutFileName);
356+
wsLogs.ApplyWorkspace(name);
357+
}
358+
LoadWorkspace(CurrentLogLayoutFileName);
359+
350360
await LoadExtensions();
351361
SetupEventsHandlers();
352362

@@ -392,9 +402,9 @@ private async void LogMessagesUC_Load(object sender, EventArgs e)
392402

393403
private void HideColumns()
394404
{
395-
if (DataProvider.HideColumns() != null)
405+
if (DataProvider.HideAdditionalColumns() != null)
396406
{
397-
foreach (string columnFieldName in DataProvider.HideColumns())
407+
foreach (string columnFieldName in DataProvider.HideAdditionalColumns())
398408
{
399409
var column = logGrid.Columns.ColumnByFieldName(columnFieldName);
400410
if (column != null)
@@ -403,6 +413,17 @@ private void HideColumns()
403413
}
404414
}
405415
}
416+
if (DataProvider.HideExistingColumns() != null)
417+
{
418+
foreach (AnalogyLogMessagePropertyName columnFieldName in DataProvider.HideExistingColumns())
419+
{
420+
var column = logGrid.Columns.ColumnByFieldName(columnFieldName.ToString());
421+
if (column != null)
422+
{
423+
column.Visible = false;
424+
}
425+
}
426+
}
406427
}
407428

408429
public void LoadWorkspace(string fileName)
@@ -1071,18 +1092,13 @@ private void LogGrid_MouseUp(object sender, MouseEventArgs e)
10711092
}
10721093
private void LoadReplacementHeaders()
10731094
{
1074-
if (DataProvider == null)
1095+
if (DataProvider?.GetReplacementHeaders() == null)
10751096
{
10761097
return;
10771098
}
10781099

10791100
try
10801101
{
1081-
if (DataProvider.GetReplacementHeaders() == null || !DataProvider.GetReplacementHeaders().Any())
1082-
{
1083-
return;
1084-
}
1085-
10861102
foreach ((string fieldName, string replacementHeader) in DataProvider.GetReplacementHeaders())
10871103
{
10881104
var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName);
@@ -1091,15 +1107,6 @@ private void LoadReplacementHeaders()
10911107
column.Caption = replacementHeader;
10921108
}
10931109
}
1094-
1095-
foreach (string fieldName in DataProvider.HideColumns())
1096-
{
1097-
var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName);
1098-
if (column != null)
1099-
{
1100-
column.Visible = false;
1101-
}
1102-
}
11031110
}
11041111
catch (Exception)
11051112
{
@@ -1439,11 +1446,25 @@ public async Task LoadExtensions()
14391446
}
14401447
foreach (IAnalogyExtensionUserControl extension in UserControlRegisteredExtensions)
14411448
{
1442-
var page = dockManager1.AddPanel(DockingStyle.Float);
1443-
page.Text = extension.Title;
1444-
page.Controls.Add(extension.UserControl);
1445-
await extension.InitializeUserControl(this, Logger);
1446-
page.DockedAsTabbedDocument = true;
1449+
DockPanel? pnl = dockManager1.Panels.FirstOrDefault(i => i.ID == extension.Id);
1450+
if (pnl == null)
1451+
{
1452+
pnl = dockManager1.AddPanel(DockingStyle.Float);
1453+
pnl.Text = extension.Title;
1454+
pnl.ID = extension.Id;
1455+
pnl.DockedAsTabbedDocument = true;
1456+
}
1457+
pnl.Controls.Add(extension.CreateUserControl(Id, Logger));
1458+
pnl.SizeChanged += ExtensionPanel_SizeChanged;
1459+
await extension.InitializeUserControl(this, Id, Logger);
1460+
}
1461+
}
1462+
1463+
private void ExtensionPanel_SizeChanged(object? sender, EventArgs e)
1464+
{
1465+
if (sender is DockPanel { Controls.Count: > 0 } pnl)
1466+
{
1467+
pnl.Controls[0].Size = pnl.Size;
14471468
}
14481469
}
14491470

@@ -1635,6 +1656,7 @@ internal DataTable GetFilteredDataTable()
16351656
}
16361657

16371658
public List<IAnalogyLogMessage> GetMessages() => PagingManager.GetAllMessages();
1659+
public Guid Id { get; }
16381660

16391661
private string GetFilterDisplayText(DateRangeFilter filterType)
16401662
{
@@ -1792,7 +1814,7 @@ public void AppendMessage(IAnalogyLogMessage message, string dataSource)
17921814
{
17931815
if (IsHandleCreated)
17941816
{
1795-
BeginInvoke(new MethodInvoker(() => extension.NewMessage(message)));
1817+
BeginInvoke(new MethodInvoker(() => extension.NewMessage(message, Id)));
17961818
}
17971819
}
17981820
}
@@ -1909,7 +1931,7 @@ public void AppendMessages(List<IAnalogyLogMessage> messages, string dataSource)
19091931
{
19101932
foreach (var extension in UserControlRegisteredExtensions)
19111933
{
1912-
BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages)));
1934+
BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages, Id)));
19131935
}
19141936
}
19151937

Analogy.CommonControls/UserControls/ServerSideLogMessagesUC.cs

+34-18
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ public bool RealTimeMode
159159
public ServerSideLogMessagesUC(IUserSettingsManager userSettingsManager, IExtensionsManager extensionManager, IFactoriesManager factoriesManager, IAnalogyLogger logger)
160160
{
161161
Logger = logger;
162+
Id = Guid.NewGuid();
162163
Settings = userSettingsManager;
163164
ExtensionManager = extensionManager;
164165
FactoriesManager = factoriesManager;
@@ -260,6 +261,7 @@ private async void LogMessagesUC_Load(object sender, EventArgs e)
260261

261262
LoadUISettings();
262263
LoadReplacementHeaders();
264+
HideColumns();
263265
BookmarkModeUI();
264266
await LoadExtensions();
265267
SetupEventsHandlers();
@@ -936,20 +938,41 @@ private void LogGrid_MouseUp(object sender, MouseEventArgs e)
936938
LogGridPopupMenu.ShowPopup(Cursor.Position);
937939
}
938940
}
941+
private void HideColumns()
942+
{
943+
if (DataProvider.HideAdditionalColumns() != null)
944+
{
945+
foreach (string columnFieldName in DataProvider.HideAdditionalColumns())
946+
{
947+
var column = logGrid.Columns.ColumnByFieldName(columnFieldName);
948+
if (column != null)
949+
{
950+
column.Visible = false;
951+
}
952+
}
953+
}
954+
if (DataProvider.HideExistingColumns() != null)
955+
{
956+
foreach (AnalogyLogMessagePropertyName columnFieldName in DataProvider.HideExistingColumns())
957+
{
958+
var column = logGrid.Columns.ColumnByFieldName(columnFieldName.ToString());
959+
if (column != null)
960+
{
961+
column.Visible = false;
962+
}
963+
}
964+
}
965+
}
966+
939967
private void LoadReplacementHeaders()
940968
{
941-
if (DataProvider == null)
969+
if (DataProvider?.GetReplacementHeaders() == null)
942970
{
943971
return;
944972
}
945973

946974
try
947975
{
948-
if (DataProvider.GetReplacementHeaders() == null || !DataProvider.GetReplacementHeaders().Any())
949-
{
950-
return;
951-
}
952-
953976
foreach ((string fieldName, string replacementHeader) in DataProvider.GetReplacementHeaders())
954977
{
955978
var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName);
@@ -959,14 +982,6 @@ private void LoadReplacementHeaders()
959982
}
960983
}
961984

962-
foreach (string fieldName in DataProvider.HideColumns())
963-
{
964-
var column = logGrid.Columns.FirstOrDefault((col) => col.FieldName == fieldName);
965-
if (column != null)
966-
{
967-
column.Visible = false;
968-
}
969-
}
970985
}
971986
catch (Exception)
972987
{
@@ -1307,8 +1322,8 @@ public async Task LoadExtensions()
13071322
{
13081323
var page = dockManager1.AddPanel(DockingStyle.Float);
13091324
page.Text = extension.Title;
1310-
page.Controls.Add(extension.UserControl);
1311-
await extension.InitializeUserControl(this, Logger);
1325+
page.Controls.Add(extension.CreateUserControl(Id, Logger));
1326+
await extension.InitializeUserControl(this, Id, Logger);
13121327
page.DockedAsTabbedDocument = true;
13131328
}
13141329
}
@@ -1501,6 +1516,7 @@ internal DataTable GetFilteredDataTable()
15011516
}
15021517

15031518
public List<IAnalogyLogMessage> GetMessages() => PagingManager.GetAllMessages();
1519+
public Guid Id { get; }
15041520

15051521
private string GetFilterDisplayText(DateRangeFilter filterType)
15061522
{
@@ -1650,7 +1666,7 @@ public void AppendMessage(IAnalogyLogMessage message, string dataSource)
16501666
{
16511667
if (IsHandleCreated)
16521668
{
1653-
BeginInvoke(new MethodInvoker(() => extension.NewMessage(message)));
1669+
BeginInvoke(new MethodInvoker(() => extension.NewMessage(message, Id)));
16541670
}
16551671
}
16561672
}
@@ -1763,7 +1779,7 @@ public void AppendMessages(List<IAnalogyLogMessage> messages, string dataSource)
17631779
{
17641780
foreach (var extension in UserControlRegisteredExtensions)
17651781
{
1766-
BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages)));
1782+
BeginInvoke(new MethodInvoker(() => extension.NewMessages(messages, Id)));
17671783
}
17681784
}
17691785

Analogy.UnitTests/Analogy.UnitTests.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@
4848
</PropertyGroup>
4949
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
5050
<ItemGroup>
51-
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.0" />
52-
<PackageReference Include="Analogy.LogViewer.Serilog" Version="3.8.2" />
51+
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.3" />
52+
<PackageReference Include="Analogy.LogViewer.Serilog" Version="3.8.3" />
5353
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
5454
<PackageReference Include="MSTest.TestAdapter" Version="3.0.2" />
5555
<PackageReference Include="MSTest.TestFramework" Version="3.0.2" />

Analogy.sln

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Analogy.CommonControls.Exam
2020
EndProject
2121
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Analogy.Common", "Analogy.Common\Analogy.Common.csproj", "{42A38B8A-CDCF-477A-8BC6-1A4685CD5255}"
2222
EndProject
23+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F5E34202-7C91-45AB-94DA-A8934FE3D3B6}"
24+
ProjectSection(SolutionItems) = preProject
25+
nuget.config = nuget.config
26+
EndProjectSection
27+
EndProject
2328
Global
2429
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2530
Debug|Any CPU = Debug|Any CPU

Analogy/Analogy.csproj

+19-19
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,25 @@
4848
<EmbeddedResource Remove="UserControls\UCLogsNonFloatable.resx" />
4949
</ItemGroup>
5050
<ItemGroup>
51-
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.0" />
52-
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.2" />
53-
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.2" />
54-
<PackageReference Include="Analogy.LogViewer.XMLParser" Version="3.8.2" />
55-
<PackageReference Include="Analogy.LogViewer.Example" Version="3.8.2" />
56-
<PackageReference Include="Analogy.LogViewer.IISLogsProvider" Version="3.8.2" />
57-
<PackageReference Include="Analogy.LogViewer.Log4Net" Version="3.8.2" />
58-
<PackageReference Include="Analogy.LogViewer.NLogProvider" Version="3.8.2" />
59-
<PackageReference Include="Analogy.LogViewer.PlainTextParser" Version="3.8.2" />
60-
<PackageReference Include="Analogy.LogViewer.RegexParser" Version="3.8.2" />
61-
<PackageReference Include="Analogy.LogViewer.WindowsEventLogs" Version="3.8.2" />
62-
<PackageReference Include="Analogy.LogViewer.Serilog" Version="3.8.2" />
63-
<PackageReference Include="Analogy.LogViewer.GitHistory" Version="3.8.2" />
64-
<PackageReference Include="Analogy.LogViewer.Github" Version="3.8.2" />
65-
<PackageReference Include="Analogy.LogViewer.gRPC" Version="3.8.2" />
66-
<PackageReference Include="Analogy.LogViewer.JsonParser" Version="3.8.2" />
67-
<PackageReference Include="Analogy.LogViewer.WordsSearch" Version="3.8.2" />
68-
<PackageReference Include="Analogy.LogViewer.Sqlite" Version="0.4.0" />
69-
<PackageReference Include="Analogy.LogViewer.PowerToys" Version="0.11.0" />
51+
<PackageReference Include="Analogy.LogViewer.Interfaces" Version="3.8.3" />
52+
<PackageReference Include="Analogy.LogViewer.Template" Version="3.8.3" />
53+
<PackageReference Include="Analogy.CommonUtilities" Version="3.8.3" />
54+
<PackageReference Include="Analogy.LogViewer.XMLParser" Version="3.8.3" />
55+
<PackageReference Include="Analogy.LogViewer.Example" Version="3.8.3" />
56+
<PackageReference Include="Analogy.LogViewer.IISLogsProvider" Version="3.8.3" />
57+
<PackageReference Include="Analogy.LogViewer.Log4Net" Version="3.8.3" />
58+
<PackageReference Include="Analogy.LogViewer.NLogProvider" Version="3.8.3" />
59+
<PackageReference Include="Analogy.LogViewer.PlainTextParser" Version="3.8.3" />
60+
<PackageReference Include="Analogy.LogViewer.RegexParser" Version="3.8.3" />
61+
<PackageReference Include="Analogy.LogViewer.WindowsEventLogs" Version="3.8.3" />
62+
<PackageReference Include="Analogy.LogViewer.Serilog" Version="3.8.3" />
63+
<PackageReference Include="Analogy.LogViewer.GitHistory" Version="3.8.3" />
64+
<PackageReference Include="Analogy.LogViewer.Github" Version="3.8.3" />
65+
<PackageReference Include="Analogy.LogViewer.gRPC" Version="3.8.3" />
66+
<PackageReference Include="Analogy.LogViewer.JsonParser" Version="3.8.3" />
67+
<PackageReference Include="Analogy.LogViewer.WordsSearch" Version="3.8.3" />
68+
<PackageReference Include="Analogy.LogViewer.Sqlite" Version="0.4.1" />
69+
<PackageReference Include="Analogy.LogViewer.PowerToys" Version="0.12.0" />
7070
<PackageReference Include="Grpc.Core" Version="2.46.6" />
7171
<PackageReference Include="Markdig" Version="0.31.0" />
7272
<PackageReference Include="MessagePack" Version="2.5.108" />

0 commit comments

Comments
 (0)