From bc565cacc831537eed155747d112797f7da86547 Mon Sep 17 00:00:00 2001 From: Hirogen Date: Tue, 3 Mar 2026 16:11:09 +0100 Subject: [PATCH 1/3] cell selection mode persisted per file --- .../Classes/Persister/PersistenceData.cs | 6 ++++++ src/LogExpert.UI/Controls/LogWindow/LogWindow.cs | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/LogExpert.Core/Classes/Persister/PersistenceData.cs b/src/LogExpert.Core/Classes/Persister/PersistenceData.cs index 755085e6..11ceda6b 100644 --- a/src/LogExpert.Core/Classes/Persister/PersistenceData.cs +++ b/src/LogExpert.Core/Classes/Persister/PersistenceData.cs @@ -46,6 +46,12 @@ public class PersistenceData public List FilterTabDataList { get; set; } = []; + /// + /// Selection mode for Cells + /// Default: false (FullRowSelect mode) + /// + public bool CellSelectMode { get; set; } + public int FirstDisplayedLine { get; set; } = -1; public bool FollowTail { get; set; } = true; diff --git a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs index 6b76d7d5..742f78e9 100644 --- a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs +++ b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs @@ -2462,6 +2462,8 @@ private bool LoadPersistenceOptions () AdjustHighlightSplitterWidth(); SetCurrentHighlightGroup(persistenceData.HighlightGroupName); + SetCellSelectionMode(persistenceData.CellSelectMode); + if (persistenceData.MultiFileNames.Count > 0) { //_logger.Info($"Detected MultiFile name list in persistence options"); @@ -2571,6 +2573,8 @@ private void LoadPersistenceData () // FirstDisplayedScrollingRowIndex calculates sometimes the wrong scrolling ranges??? } + SetCellSelectionMode(persistenceData.CellSelectMode, true); + if (Preferences.SaveFilters) { RestoreFilters(persistenceData); @@ -6293,11 +6297,14 @@ public PersistenceData GetPersistenceData () FilterAdvanced = !advancedFilterSplitContainer.Panel1Collapsed, FilterPosition = splitContainerLogWindow.SplitterDistance, FollowTail = _guiStateArgs.FollowTail, + CellSelectMode = _guiStateArgs.CellSelectMode, FileName = FileName, TabName = Text, SessionFileName = SessionFileName, Columnizer = CurrentColumnizer, LineCount = _logFileReader.LineCount + + }; _filterParams.IsFilterTail = filterTailCheckBox.Checked; // this option doesnt need a press on 'search' @@ -7247,7 +7254,7 @@ public void LogWindowActivated () SendProgressBarUpdate(); } - public void SetCellSelectionMode (bool isCellMode) + public void SetCellSelectionMode (bool isCellMode, bool updateGUI = false) { if (isCellMode) { @@ -7260,6 +7267,11 @@ public void SetCellSelectionMode (bool isCellMode) } _guiStateArgs.CellSelectMode = isCellMode; + + if (updateGUI) + { + SendGuiStateUpdate(); + } } public void TimeshiftEnabled (bool isEnabled, string shiftValue) From 45477508a81247ec111a07b619201b0738e5663f Mon Sep 17 00:00:00 2001 From: Hirogen Date: Tue, 3 Mar 2026 16:26:47 +0100 Subject: [PATCH 2/3] update unit tests --- src/LogExpert.Persister.Tests/PersisterTests.cs | 4 +++- src/LogExpert.UI/Controls/LogWindow/LogWindow.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/LogExpert.Persister.Tests/PersisterTests.cs b/src/LogExpert.Persister.Tests/PersisterTests.cs index 549b8f3e..52e0dcb7 100644 --- a/src/LogExpert.Persister.Tests/PersisterTests.cs +++ b/src/LogExpert.Persister.Tests/PersisterTests.cs @@ -357,7 +357,8 @@ public void RoundTrip_WithApplicationStartupDir_PreservesAllData () MultiFile = true, MultiFilePattern = "test*.log", MultiFileMaxDays = 7, - LineCount = 1000 + LineCount = 1000, + CellSelectMode = true }; // Act @@ -377,6 +378,7 @@ public void RoundTrip_WithApplicationStartupDir_PreservesAllData () Assert.That(loadedData.MultiFilePattern, Is.EqualTo(originalData.MultiFilePattern), "MultiFilePattern should match"); Assert.That(loadedData.MultiFileMaxDays, Is.EqualTo(originalData.MultiFileMaxDays), "MultiFileMaxDays should match"); Assert.That(loadedData.LineCount, Is.EqualTo(originalData.LineCount), "LineCount should match"); + Assert.That(loadedData.CellSelectMode, Is.EqualTo(originalData.CellSelectMode), "CellSelectMode should match"); } [Test] diff --git a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs index 742f78e9..0c03c1af 100644 --- a/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs +++ b/src/LogExpert.UI/Controls/LogWindow/LogWindow.cs @@ -2462,7 +2462,7 @@ private bool LoadPersistenceOptions () AdjustHighlightSplitterWidth(); SetCurrentHighlightGroup(persistenceData.HighlightGroupName); - SetCellSelectionMode(persistenceData.CellSelectMode); + SetCellSelectionMode(persistenceData.CellSelectMode, true); if (persistenceData.MultiFileNames.Count > 0) { From edbd208426877246fd7c6476d1586789da7cb866 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Mar 2026 15:31:14 +0000 Subject: [PATCH 3/3] chore: update plugin hashes [skip ci] --- .../PluginHashGenerator.Generated.cs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/PluginRegistry/PluginHashGenerator.Generated.cs b/src/PluginRegistry/PluginHashGenerator.Generated.cs index 921ac921..1ef4ae4c 100644 --- a/src/PluginRegistry/PluginHashGenerator.Generated.cs +++ b/src/PluginRegistry/PluginHashGenerator.Generated.cs @@ -10,7 +10,7 @@ public static partial class PluginValidator { /// /// Gets pre-calculated SHA256 hashes for built-in plugins. - /// Generated: 2026-03-03 14:51:13 UTC + /// Generated: 2026-03-03 15:31:13 UTC /// Configuration: Release /// Plugin count: 22 /// @@ -18,28 +18,28 @@ public static Dictionary GetBuiltInPluginHashes() { return new Dictionary(StringComparer.OrdinalIgnoreCase) { - ["AutoColumnizer.dll"] = "94A2870DD326A4B873BC627AE4BB06963D3B1906C6ADBB94597FE442AFAAA9ED", + ["AutoColumnizer.dll"] = "22B0D8918CE8EC55B60E1C7F600CDE5346E84C850D0F101A708938C0A9D28B84", ["BouncyCastle.Cryptography.dll"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6", ["BouncyCastle.Cryptography.dll (x86)"] = "E5EEAF6D263C493619982FD3638E6135077311D08C961E1FE128F9107D29EBC6", - ["CsvColumnizer.dll"] = "4723E306C5148A3D74FDA1892B1F0EBF8838E08C87E75D7210F566FFE2C76784", - ["CsvColumnizer.dll (x86)"] = "4723E306C5148A3D74FDA1892B1F0EBF8838E08C87E75D7210F566FFE2C76784", - ["DefaultPlugins.dll"] = "19CE5C9F946A3741FFC388BF6FF49346B950B22FD7A78D456ECAD8E87A40AF9F", - ["FlashIconHighlighter.dll"] = "FE12290FE581C9FEA1BA8DC6C8AB2FB5E73B6B3F9F4B2B663C06DEC6B157CDD1", - ["GlassfishColumnizer.dll"] = "4EF6C6D0B0C4A861E87CBC69735B56AA139C4BE474D54AF5B72703E200AA50CA", - ["JsonColumnizer.dll"] = "302C146435BA73D9D0C4DA408D88E5082D1528FF987CDBE54BC7B49EBA7B784D", - ["JsonCompactColumnizer.dll"] = "ED6FF92F711F51B82C0269FF6967E5165AA781CDBFFFE73252840AF6345AF7B5", - ["Log4jXmlColumnizer.dll"] = "FB3142052E4C952497D7340747CAC6CD0F631120C91850C3E27BC94FFD9BF0B4", - ["LogExpert.Core.dll"] = "AFF90A430B5EB9D61B9C88DC7E15597D9407956EA4F926C77F76660BA23E694F", - ["LogExpert.Resources.dll"] = "D629EE9BDDABFDD1C60D75F8EAA56D1CDDE62774BAB6DFB2DE316E53D6373ADC", + ["CsvColumnizer.dll"] = "0F221FD603B46799D489B082715273EB9C3037127F0587EA3C2E64B4A55C79EF", + ["CsvColumnizer.dll (x86)"] = "0F221FD603B46799D489B082715273EB9C3037127F0587EA3C2E64B4A55C79EF", + ["DefaultPlugins.dll"] = "8DAB8BFB8A49F70721C056B528376BF5FA780984E867970D12D37F4ABEFA511D", + ["FlashIconHighlighter.dll"] = "67743542678B2FCC7E640D62D7A37982511C35331A019B5512E3CD130DE36005", + ["GlassfishColumnizer.dll"] = "FE72016523E48DED2AE02A0B8846237126A0EF737447BDE163DE6D7FA09D609A", + ["JsonColumnizer.dll"] = "467AEFF4EF4C7316AD62EDA83EC61CE9D997868C728DAD565036A6DA5924503B", + ["JsonCompactColumnizer.dll"] = "0941BC5EBC513895C4A3614ABF0BCA91C9F7178FEA9BFB456EBA73875E60F52F", + ["Log4jXmlColumnizer.dll"] = "223F858848286A6E813674493DF4C5436DA150A22B3C0F3BDFB9F0C0645C4C2B", + ["LogExpert.Core.dll"] = "1F9EE97286307D8DCAFE86B6CEE57B5E3A78D112CA6EFBD0A40BA9A0D66C7849", + ["LogExpert.Resources.dll"] = "20421EBFAF11D184D7BC838D87376400D7BD2F6F6F6AAB40AA66A28359D27C61", ["Microsoft.Extensions.DependencyInjection.Abstractions.dll"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93", ["Microsoft.Extensions.DependencyInjection.Abstractions.dll (x86)"] = "67FA4325000DB017DC0C35829B416F024F042D24EFB868BCF17A895EE6500A93", ["Microsoft.Extensions.Logging.Abstractions.dll"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D", ["Microsoft.Extensions.Logging.Abstractions.dll (x86)"] = "BB853130F5AFAF335BE7858D661F8212EC653835100F5A4E3AA2C66A4D4F685D", - ["RegexColumnizer.dll"] = "1AF8EF852B060D69EFD9B57BDE155EE70D9682AC220899DE773652BE6E74C2E7", - ["SftpFileSystem.dll"] = "BE8143A21E46FAF8521B865FC4CBDE39D51B2BEB276901E78AE1C10FA6E24BE2", - ["SftpFileSystem.dll (x86)"] = "8EAB50EB4A72A23726063F8935A916E9E96F3BB793A24E5AEB3336B127F7E69F", - ["SftpFileSystem.Resources.dll"] = "54561A5E402D3C020CEB224E9E950208E1F9FC75AC06B421059FE8CC8784785E", - ["SftpFileSystem.Resources.dll (x86)"] = "54561A5E402D3C020CEB224E9E950208E1F9FC75AC06B421059FE8CC8784785E", + ["RegexColumnizer.dll"] = "8B0B6CCD1527203874D9AB3CC8213AFAB002183088478780816DB6A9A7360D69", + ["SftpFileSystem.dll"] = "1D329D6B7CC40D91C3AE630E82A0EE8E3E07F2EC51C131C0B6C6B7D577E8AD93", + ["SftpFileSystem.dll (x86)"] = "979E99CE684AE144605C4BD7E00EFD7D48A61BA82428DEE6F657C9BB0C4AE0CE", + ["SftpFileSystem.Resources.dll"] = "21BB198D10368D23E18D103BC07092730C4231DEA66F2640FABD70E9C8FADFA9", + ["SftpFileSystem.Resources.dll (x86)"] = "21BB198D10368D23E18D103BC07092730C4231DEA66F2640FABD70E9C8FADFA9", }; }