From 3a7286932c500b1d807fb3128695925dbc2e1e03 Mon Sep 17 00:00:00 2001 From: mfkeeq <546357529@qq.com> Date: Fri, 23 Oct 2026 18:43:25 +0800 Subject: [PATCH 1/4] Replace compact mode with F11 detach mode (Log Only View) F11 now detaches the active log window into its own top-level window and hides the main window; F11 or ESC returns to the normal mode. The float window gets min/max buttons, a resizable border, a taskbar button, its own stable icon and a maximizable double-click-title behaviour; dark title bars are re-applied after the style-driven handle recreation. TabController gains GetPlacedWindows/GetNextWindow/GetPreviousWindow and a guarded CloseAllExcept; the View menu offers the toggle as "Log Only View" (en/de/zh-CN) with F11 as a display-only shortcut hint. DetachMode service, message filter and a NativeWindow caption hook live in DetachModeService; 17 controller tests plus 6 filter tests cover it. --- src/LogExpert.Resources/Resources.Designer.cs | 18 + src/LogExpert.Resources/Resources.de.resx | 6 + src/LogExpert.Resources/Resources.resx | 6 + src/LogExpert.Resources/Resources.zh-CN.resx | 6 + .../Services/DetachModeControllerTests.cs | 542 ++++++++++++++++++ .../Services/TabControllerTests.cs | 117 ++++ .../Dialogs/LogTabWindow/LogTabWindow.cs | 100 +++- .../LogTabWindow/LogTabWindow.designer.cs | 20 +- src/LogExpert.UI/Interface/ITabController.cs | 45 +- .../DetachFloatWindowHook.cs | 106 ++++ .../DetachModeService/DetachMessageFilter.cs | 75 +++ .../DetachModeService/DetachModeController.cs | 389 +++++++++++++ .../TabControllerService/TabController.cs | 100 +++- 13 files changed, 1502 insertions(+), 28 deletions(-) create mode 100644 src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs create mode 100644 src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs create mode 100644 src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs create mode 100644 src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs diff --git a/src/LogExpert.Resources/Resources.Designer.cs b/src/LogExpert.Resources/Resources.Designer.cs index 6bf4905df..e7b3db0de 100644 --- a/src/LogExpert.Resources/Resources.Designer.cs +++ b/src/LogExpert.Resources/Resources.Designer.cs @@ -2652,6 +2652,15 @@ public static string LogTabWindow_UI_ToolStripMenuItem_loadProjectToolStripMenuI return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_loadProjectToolStripMenuItem", resourceCulture); } } + + /// + /// Looks up a localized string similar to Log Only View. + /// + public static string LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem { + get { + return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem", resourceCulture); + } + } /// /// Looks up a localized string similar to Lock instance. @@ -2951,6 +2960,15 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolS return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolStripMenuItem", resourceCulture); } } + + /// + /// Looks up a localized string similar to Shows the active log alone in its own window and hides the main window. + /// + public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem { + get { + return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem", resourceCulture); + } + } /// /// Looks up a localized string similar to Treat multiple files as one large file (e.g. data.log, data.log.1, data.log.2,...). diff --git a/src/LogExpert.Resources/Resources.de.resx b/src/LogExpert.Resources/Resources.de.resx index 67ef82bf3..d0f937b79 100644 --- a/src/LogExpert.Resources/Resources.de.resx +++ b/src/LogExpert.Resources/Resources.de.resx @@ -1176,6 +1176,9 @@ Ein ausgewähltes Tool erscheint in der Iconbar. Alle anderen verfügbaren Tools Zu Tab kopieren + + Nur Log-Ansicht + Berechne Zeitstreuungsanzeige... @@ -1369,6 +1372,9 @@ Ein ausgewähltes Tool erscheint in der Iconbar. Alle anderen verfügbaren Tools Kopiert alle selektierten Zeilen in einen neuen Tab + + Zeigt das aktive Protokoll allein in einem eigenen Fenster an und blendet das Hauptfenster aus + Splittet diverse Logdateien in fixierte Spalten diff --git a/src/LogExpert.Resources/Resources.resx b/src/LogExpert.Resources/Resources.resx index bd9b3a535..b0ca8fa6c 100644 --- a/src/LogExpert.Resources/Resources.resx +++ b/src/LogExpert.Resources/Resources.resx @@ -1215,6 +1215,9 @@ Checked tools will appear in the icon bar. All other tools are available in the Copy to Tab + + Log Only View + Options @@ -1380,6 +1383,9 @@ Checked tools will appear in the icon bar. All other tools are available in the Copies all selected lines into a new tab page + + Shows the active log alone in its own window and hides the main window + Splits various kinds of logfiles into fixed columns diff --git a/src/LogExpert.Resources/Resources.zh-CN.resx b/src/LogExpert.Resources/Resources.zh-CN.resx index 9b875814b..a27d2f7e5 100644 --- a/src/LogExpert.Resources/Resources.zh-CN.resx +++ b/src/LogExpert.Resources/Resources.zh-CN.resx @@ -1085,6 +1085,9 @@ 复制到标签页 + + 仅日志视图 + 选项 @@ -1247,6 +1250,9 @@ 将所有选中行复制到新标签页 + + 在独立窗口中仅显示当前日志,并隐藏主窗口 + 将各类日志文件拆分为固定列 diff --git a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs new file mode 100644 index 000000000..0cb5444c7 --- /dev/null +++ b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs @@ -0,0 +1,542 @@ +using System.Runtime.Versioning; + +using LogExpert.Core.Config; +using LogExpert.Core.Entities; +using LogExpert.Core.Interfaces; +using LogExpert.UI.Controls.LogWindow; +using LogExpert.UI.Interface; +using LogExpert.UI.Services.DetachModeService; +using LogExpert.UI.Services.TabControllerService; + +using Moq; + +using NUnit.Framework; + +using WeifenLuo.WinFormsUI.Docking; + +namespace LogExpert.UI.Tests.Services; + +/// +/// Unit tests for DetachModeController. Every test drives a real DockPanel holding real LogWindows, +/// because the behaviour under test is the dock-state bookkeeping and the float-window chrome the +/// DockPanel suite performs. +/// +[TestFixture] +[SupportedOSPlatform("windows")] +[Apartment(ApartmentState.STA)] +internal class DetachModeControllerTests +{ + private Form _form; + private DockPanel _dockPanel; + private TabController _tabController; + private DetachModeController _controller; + + [SetUp] + public void Setup () + { + _form = new Form(); + _dockPanel = new DockPanel + { + Dock = DockStyle.Fill, + DocumentStyle = DocumentStyle.DockingWindow, + Theme = new VS2015LightTheme() + }; + + _form.Controls.Add(_dockPanel); + _form.Show(); + + _tabController = new TabController(_dockPanel); + _controller = new DetachModeController(_form, _dockPanel, _tabController); + } + + [TearDown] + public void TearDown () + { + _controller?.Dispose(); + _tabController?.Dispose(); + _form?.Close(); + _form?.Dispose(); + } + + [Test] + public void Enter_DetachesTheActiveWindowAsAWindowLikeFloat () + { + // Arrange + AddWindows("first.log", "second.log"); + var active = _dockPanel.ActiveContent as LogWindow; + + Assert.That(active, Is.Not.Null, "the dock panel should have an active document"); + + // Act + var entered = _controller.Enter(); + + // Assert + Assert.Multiple(() => + { + Assert.That(entered, Is.True); + Assert.That(_controller.IsActive, Is.True); + Assert.That(active.DockState, Is.EqualTo(DockState.Float)); + Assert.That(_form.Visible, Is.False, "the main window is hidden while detached"); + + var floatWindow = FloatWindowOf(active); + + Assert.That(floatWindow, Is.Not.Null); + Assert.That(floatWindow.Owner, Is.Null, "a hidden owner would take the float down with it"); + Assert.That(floatWindow.FormBorderStyle, Is.EqualTo(FormBorderStyle.Sizable)); + Assert.That(floatWindow.MaximizeBox, Is.True); + Assert.That(floatWindow.MinimizeBox, Is.True); + Assert.That(floatWindow.ShowInTaskbar, Is.True); + }); + } + + [Test] + public void Enter_GivesTheFloatItsOwnIconInsteadOfTheLogWindowSharedOne () + { + // Arrange — the suite's SetText() assigns the log window's icon object to the float, but + // the shell disposes and replaces that object on every tail refresh, which would leave the + // float holding a disposed icon and crash the next handle recreation. + var windows = AddWindows("first.log"); + windows[0].Icon = SystemIcons.Information; + var active = _dockPanel.ActiveContent as LogWindow; + + Assert.That(active, Is.Not.Null); + + // Act + _controller.Enter(); + + // Assert + var floatWindow = FloatWindowOf(active); + + Assert.Multiple(() => + { + Assert.That(floatWindow, Is.Not.Null); + Assert.That(floatWindow.Icon, Is.Not.EqualTo(windows[0].Icon), "the float must not share the log window's icon object"); + }); + } + + [Test] + public void Enter_DoesNothingWhenNoWindowIsOpen () + { + // Arrange — no log windows at all + + // Act + var entered = _controller.Enter(); + + // Assert + Assert.Multiple(() => + { + Assert.That(entered, Is.False); + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + }); + } + + [Test] + public void Exit_RestoresTheWindowAndTheMainForm () + { + // Arrange + var windows = AddWindows("first.log", "second.log"); + var active = _dockPanel.ActiveContent as LogWindow; + _controller.Enter(); + + // Act + _controller.Exit(); + + // Assert — the window is back in the document pane, the others were never touched + Assert.Multiple(() => + { + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + Assert.That(active.DockState, Is.EqualTo(DockState.Document)); + Assert.That(windows.Count(window => window.DockState == DockState.Document), Is.EqualTo(windows.Count)); + }); + } + + [Test] + public void Exit_KeepsAnAlreadyFloatingWindowFloating () + { + // Arrange + var windows = AddWindows("first.log", "floating.log"); + var floating = windows[1]; + + floating.Show(_dockPanel, DockState.Float); + Assert.That(_dockPanel.ActiveContent as LogWindow, Is.EqualTo(floating), "the float should be the active document"); + + _controller.Enter(); + + // Act + _controller.Exit(); + + // Assert — it came from a float, so it goes back to one + Assert.That(floating.DockState, Is.EqualTo(DockState.Float)); + } + + [Test] + public void SwitchWindow_MovesTheDetachedFloatThroughEveryWindow () + { + // Arrange + var windows = AddWindows("first.log", "second.log", "third.log"); + var start = _dockPanel.ActiveContent as LogWindow; + + Assert.That(start, Is.Not.Null, "the dock panel should have an active document"); + + _controller.Enter(); + + // Act & Assert — each switch detaches the next window and puts the previous one back + var visited = new List(); + + for (var turn = 0; turn < windows.Count; turn++) + { + _controller.SwitchWindow(shiftPressed: false); + + var detached = windows.Single(window => window.DockState == DockState.Float); + visited.Add(detached); + + Assert.That(windows.Count(window => window.DockState == DockState.Document), Is.EqualTo(windows.Count - 1)); + Assert.That(_form.Visible, Is.False); + } + + Assert.Multiple(() => + { + Assert.That(visited.Distinct().Count(), Is.EqualTo(windows.Count), "every window is reachable with Ctrl+Tab"); + Assert.That(visited[0], Is.Not.EqualTo(start), "the first switch moves off the window the mode started on"); + Assert.That(visited[^1], Is.EqualTo(start), "the cycle wraps around to where it started"); + }); + } + + [Test] + public void OnWindowDisposed_LastWindow_EndsTheModeAndShowsTheMainForm () + { + // Arrange + var windows = AddWindows("only.log"); + var active = _dockPanel.ActiveContent as LogWindow; + _controller.Enter(); + + // Act — closing the detached window is deferred through BeginInvoke + active.Dispose(); + _controller.OnWindowDisposed(active); + Application.DoEvents(); + + // Assert + Assert.Multiple(() => + { + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True, "the last window is gone, so the main window has to come back"); + }); + } + + [Test] + public void OnWindowDisposed_WithOtherWindows_DetachesTheNextOne () + { + // Arrange + var windows = AddWindows("first.log", "second.log"); + var active = _dockPanel.ActiveContent as LogWindow; + + Assert.That(active, Is.Not.Null, "the dock panel should have an active document"); + + _controller.Enter(); + + // Act + active.Dispose(); + _controller.OnWindowDisposed(active); + Application.DoEvents(); + + // Assert — the surviving window takes the detached float over + var other = windows.Single(window => window != active); + + Assert.Multiple(() => + { + Assert.That(_controller.IsActive, Is.True); + Assert.That(other.DockState, Is.EqualTo(DockState.Float)); + Assert.That(_form.Visible, Is.False); + }); + } + + [Test] + public void OnWindowAdded_MakesTheNewWindowTheDetachedOne () + { + // Arrange + var windows = AddWindows("first.log"); + _controller.Enter(); + var detached = _dockPanel.ActiveContent as LogWindow; + + using var added = CreateLogWindow("added.log"); + _tabController.AddWindow(added, "added.log"); + + // Act + _controller.OnWindowAdded(added); + + // Assert + Assert.Multiple(() => + { + Assert.That(_controller.IsActive, Is.True); + Assert.That(added.DockState, Is.EqualTo(DockState.Float)); + Assert.That(detached.DockState, Is.EqualTo(DockState.Document), "the previous detached window keeps its place in the main window"); + + _controller.Exit(); + + Assert.That(added.DockState, Is.EqualTo(DockState.Document), "the added window is restored like any other"); + }); + } + + [Test] + public void PreFilterMessage_F11WhileDetached_LeavesTheMode () + { + // Arrange + AddWindows("first.log"); + _controller.Enter(); + + var msg = new Message + { + Msg = 0x0100, // WM_KEYDOWN + WParam = (IntPtr)0x7A, // VK_F11 + LParam = 0 // first press, no auto-repeat bit + }; + + // Act + var swallowed = CreateFilter().PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.True); + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + }); + } + + [Test] + public void PreFilterMessage_WhileNotDetached_PassesEveryKeyThrough () + { + // Arrange — mode is off + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x7A, // VK_F11 + LParam = 0 + }; + + // Act + var swallowed = CreateFilter().PreFilterMessage(ref msg); + + // Assert + Assert.That(swallowed, Is.False); + } + + [Test] + public void PreFilterMessage_F11AutoRepeat_IsSwallowedWithoutLeavingTheMode () + { + // Arrange + AddWindows("first.log"); + _controller.Enter(); + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x7A, // VK_F11 + LParam = (IntPtr)(1L << 30) // auto-repeat bit set by Windows while the key is held + }; + + // Act + var swallowed = CreateFilter().PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.True, "the whole key burst is swallowed"); + Assert.That(_controller.IsActive, Is.True, "a repeat must not toggle the mode again"); + }); + } + + [Test] + public void PreFilterMessage_EscWithTextInputFocused_PassesThroughAndStaysInMode () + { + // Arrange — the log window's search box owns the focus + AddWindows("first.log"); + _controller.Enter(); + var filter = CreateFilter(); + filter._isTextInputFocused = () => true; + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x1B, // VK_ESCAPE + LParam = 0 + }; + + // Act + var swallowed = filter.PreFilterMessage(ref msg); + + // Assert — ESC belongs to the text input, e.g. canceling a search + Assert.Multiple(() => + { + Assert.That(swallowed, Is.False); + Assert.That(_controller.IsActive, Is.True); + }); + } + + [Test] + public void PreFilterMessage_EscWithoutTextInput_LeavesTheMode () + { + // Arrange — no text input holds the focus + AddWindows("first.log"); + _controller.Enter(); + var filter = CreateFilter(); + filter._isTextInputFocused = () => false; + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x1B, // VK_ESCAPE + LParam = 0 + }; + + // Act + var swallowed = filter.PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.True); + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + }); + } + + [Test] + public void PreFilterMessage_CtrlTabWhileDetached_SwitchesToTheNextWindow () + { + // Arrange + var windows = AddWindows("first.log", "second.log"); + _controller.Enter(); // detaches the active window, the last added one + var filter = CreateFilter(); + filter._modifierKeys = () => Keys.Control; + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x09, // VK_TAB + LParam = 0 + }; + + // Act + var swallowed = filter.PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.True); + Assert.That(_controller.IsActive, Is.True); + Assert.That(windows[0].DockState, Is.EqualTo(DockState.Float), "the next window takes over"); + Assert.That(windows[1].DockState, Is.EqualTo(DockState.Document), "the previous detached window keeps its place"); + }); + } + + [Test] + public void PreFilterMessage_CtrlShiftTabWhileDetached_SwitchesToThePreviousWindow () + { + // Arrange + var windows = AddWindows("first.log", "second.log", "third.log"); + _controller.Enter(); // detaches the active window, the last added one + var filter = CreateFilter(); + filter._modifierKeys = () => Keys.Control | Keys.Shift; + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x09, // VK_TAB + LParam = 0 + }; + + // Act + var swallowed = filter.PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.True); + Assert.That(_controller.IsActive, Is.True); + Assert.That(windows[1].DockState, Is.EqualTo(DockState.Float), "the previous window takes over"); + Assert.That(windows[2].DockState, Is.EqualTo(DockState.Document), "the previous detached window keeps its place"); + }); + } + + [Test] + public void PreFilterMessage_OtherKeysWhileDetached_PassThrough () + { + // Arrange + AddWindows("first.log"); + _controller.Enter(); + + var msg = new Message + { + Msg = 0x0100, + WParam = (IntPtr)0x41, // 'A' — not one of the detach mode keys + LParam = 0 + }; + + // Act + var swallowed = CreateFilter().PreFilterMessage(ref msg); + + // Assert + Assert.Multiple(() => + { + Assert.That(swallowed, Is.False); + Assert.That(_controller.IsActive, Is.True); + }); + } + + /// + /// A fresh filter wired to the controller, so PreFilterMessage can be driven without a + /// running message pump. + /// + private DetachMessageFilter CreateFilter () => new(_controller); + + private FloatWindow FloatWindowOf (LogWindow content) + { + foreach (FloatWindow floatWindow in _dockPanel.FloatWindows) + { + foreach (DockPane pane in floatWindow.NestedPanes) + { + if (pane.Contents.Contains(content)) + { + return floatWindow; + } + } + } + + return null; + } + + private List AddWindows (params string[] fileNames) + { + var windows = fileNames.Select(CreateLogWindow).ToList(); + + foreach (var (window, fileName) in windows.Zip(fileNames)) + { + _tabController.AddWindow(window, fileName); + } + + return windows; + } + + private static LogWindow CreateLogWindow (string fileName) + { + var coordinatorMock = new Mock(); + _ = coordinatorMock.Setup(c => c.ResolveHighlightGroup(It.IsAny(), It.IsAny())).Returns(new HighlightGroup()); + _ = coordinatorMock.SetupGet(c => c.SearchParams).Returns(new SearchParams()); + + var configManagerMock = new Mock(); + + // Without these stubs the mock returns null and LogWindow's session save on Dispose + // throws ArgumentNullException — surfaced as a modal MessageBox that blocks the test host. + _ = configManagerMock.SetupGet(c => c.ActiveSessionDir).Returns(Path.Combine(Path.GetTempPath(), "LogExpert_DetachModeTests")); + _ = configManagerMock.SetupGet(c => c.ActiveConfigDir).Returns(Path.Combine(Path.GetTempPath(), "LogExpert_DetachModeTests")); + _ = configManagerMock.SetupGet(c => c.Settings).Returns(new Settings()); + + var pluginRegistryMock = new Mock(); + _ = pluginRegistryMock.SetupGet(p => p.RegisteredColumnizers).Returns([new DefaultLogfileColumnizer()]); + + return new LogWindow(coordinatorMock.Object, fileName, false, false, configManagerMock.Object, pluginRegistryMock.Object); + } +} diff --git a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs index 667c694c3..c32d41959 100644 --- a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs @@ -236,6 +236,49 @@ public void GetAllWindows_WhenEmpty_ReturnsEmptyList () #endregion + #region GetPlacedWindows Tests + + [Test] + public void GetPlacedWindows_ExcludesWindowsThatWereNeverPlaced () + { + // Arrange + using var placed = CreateLogWindow("placed.log"); + using var deferred = CreateLogWindow("deferred.log"); + + _tabController.AddWindow(placed, "placed.log"); + _tabController.AddWindow(deferred, "deferred.log", doNotAddToDockPanel: true); + + // Act + var result = _tabController.GetPlacedWindows(); + + // Assert — a window a session layout restore has not placed yet cannot be saved or closed + Assert.That(result, Is.EqualTo([placed])); + } + + [Test] + public void GetPlacedWindows_IncludesHiddenWindowsThatTheDockPanelNoLongerDisplays () + { + // Arrange + using var first = CreateLogWindow("first.log"); + using var second = CreateLogWindow("second.log"); + + _tabController.AddWindow(first, "first.log"); + _tabController.AddWindow(second, "second.log"); + + second.Hide(); + + // Act + var placed = _tabController.GetPlacedWindows(); + var displayed = _tabController.GetAllWindowsFromDockPanel(); + + // Assert — this is why a session save and "close other tabs" cannot use the DockPanel query + // when windows are hidden + Assert.That(placed, Is.EqualTo([first, second])); + Assert.That(displayed, Is.EqualTo([first])); + } + + #endregion + #region GetWindowCount Tests [Test] @@ -413,6 +456,75 @@ public void ActivateWindow_WithNullWindow_DoesNotThrow () #endregion + #region GetNextWindow / GetPreviousWindow Tests + + [Test] + public void GetNextWindow_FromAnyWindow_MovesForwardAndWrapsAround () + { + // Arrange + using var first = CreateLogWindow("first.log"); + using var second = CreateLogWindow("second.log"); + using var third = CreateLogWindow("third.log"); + + _tabController.AddWindow(first, "first.log"); + _tabController.AddWindow(second, "second.log"); + _tabController.AddWindow(third, "third.log"); + + // Act & Assert + Assert.That(_tabController.GetNextWindow(first), Is.EqualTo(second)); + Assert.That(_tabController.GetNextWindow(second), Is.EqualTo(third)); + Assert.That(_tabController.GetNextWindow(third), Is.EqualTo(first)); + } + + [Test] + public void GetPreviousWindow_FromAnyWindow_MovesBackwardAndWrapsAround () + { + // Arrange + using var first = CreateLogWindow("first.log"); + using var second = CreateLogWindow("second.log"); + using var third = CreateLogWindow("third.log"); + + _tabController.AddWindow(first, "first.log"); + _tabController.AddWindow(second, "second.log"); + _tabController.AddWindow(third, "third.log"); + + // Act & Assert + Assert.That(_tabController.GetPreviousWindow(first), Is.EqualTo(third)); + Assert.That(_tabController.GetPreviousWindow(second), Is.EqualTo(first)); + Assert.That(_tabController.GetPreviousWindow(third), Is.EqualTo(second)); + } + + [Test] + public void GetNextWindow_WhenEmpty_ReturnsNull () + { + // Act & Assert + Assert.That(_tabController.GetNextWindow(null), Is.Null); + Assert.That(_tabController.GetPreviousWindow(null), Is.Null); + } + + #endregion + + #region CloseAllExcept Tests + + [Test] + public void CloseAllExcept_WithNullWindow_LeavesEveryWindowOpen () + { + // Arrange + using var first = CreateLogWindow("first.log"); + using var second = CreateLogWindow("second.log"); + + _tabController.AddWindow(first, "first.log"); + _tabController.AddWindow(second, "second.log"); + + // Act + _tabController.CloseAllExcept(null); + + // Assert + Assert.That(_tabController.GetWindowCount(), Is.EqualTo(2)); + } + + #endregion + #region SwitchToNextWindow Tests [Test] @@ -450,6 +562,11 @@ private static LogWindow CreateLogWindow (string fileName) var configManagerMock = new Mock(); _ = configManagerMock.SetupGet(configManager => configManager.Settings).Returns(new Settings()); + // Without these stubs the mock returns null and LogWindow's session save on Dispose + // throws ArgumentNullException — surfaced as a modal MessageBox that blocks the test host. + _ = configManagerMock.SetupGet(configManager => configManager.ActiveSessionDir).Returns(Path.Combine(Path.GetTempPath(), "LogExpert_TabControllerTests")); + _ = configManagerMock.SetupGet(configManager => configManager.ActiveConfigDir).Returns(Path.Combine(Path.GetTempPath(), "LogExpert_TabControllerTests")); + var pluginRegistryMock = new Mock(); _ = pluginRegistryMock.SetupGet(pluginRegistry => pluginRegistry.RegisteredColumnizers).Returns([new DefaultLogfileColumnizer()]); diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs index 5ec992ae2..034bcf327 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs @@ -21,6 +21,7 @@ using LogExpert.UI.Entities; using LogExpert.UI.Extensions; using LogExpert.UI.Extensions.LogWindow; +using LogExpert.UI.Services.DetachModeService; using LogExpert.UI.Services.FileOperationService; using LogExpert.UI.Services.LedService; using LogExpert.UI.Services.LogWindowCoordinatorService; @@ -80,6 +81,12 @@ internal partial class LogTabWindow : Form, ILogTabWindow private bool _wasMaximized; + /// + /// Owns detach mode: F11 hides the main window and turns the active log window's float into a + /// stand-alone viewer window; F11 or ESC brings everything back. + /// + private readonly DetachModeController _detachModeController; + #endregion #region cTor @@ -107,6 +114,8 @@ public LogTabWindow (string[] fileNames, int instanceNumber, bool showInstanceNu _toolWindowCoordinator = new ToolWindowCoordinator(configManager); + _detachModeController = new DetachModeController(this, dockPanel, _tabController); + _ledService = new LedIndicatorService(); _ledService.Initialize(ConfigManager.Settings.Preferences.ShowTailColor); _ledService.IconChanged += OnLedIconChanged; @@ -461,6 +470,7 @@ private void ApplyContextMenuResources () timeshiftToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_timeshiftToolStripMenuItem; timeshiftToolStripTextBox.Text = Resources.LogTabWindow_UI_ToolStripTextBox_timeshiftToolStripTextBox; copyMarkedLinesIntoNewTabToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_copyMarkedLinesIntoNewTabToolStripMenuItem; + logOnlyViewToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem; //Options menu optionToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_optionToolStripMenuItem; @@ -517,6 +527,7 @@ private void ApplyToolTips () saveSessionToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_saveProjectToolStripMenuItem; timeshiftToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStripMenuItem; copyMarkedLinesIntoNewTabToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyMarkedLinesIntoNewTabToolStripMenuItem; + logOnlyViewToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem; columnizerToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_columnizerToolStripMenuItem; cellSelectModeToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_cellSelectModeToolStripMenuItem; lockInstanceToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolStripMenuItem; @@ -836,6 +847,13 @@ private void AddLogWindow (LogWindow.LogWindow logWindow, string title, bool doN if (!doNotAddToPanel) { logWindow.Visible = true; + + if (_detachModeController.IsActive) + { + // While detached the main window is hidden, so the newly opened window is the one + // the user expects to see: it replaces the detached one. + _detachModeController.OnWindowAdded(logWindow); + } } } @@ -1475,6 +1493,10 @@ private void CloseAllTabs () [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0010:Add missing cases", Justification = "no need for the other switch cases")] private void LoadSession (string sessionFileName, bool restoreLayout) { + // Leave detach mode first: the loaded layout must describe the normal window, and the + // windows a session replaces must not be referenced by the mode. + _detachModeController.Exit(); + var outcome = _sessionHandler.LoadSession(sessionFileName); bool openedTabs = false; @@ -1751,6 +1773,18 @@ private void OnLogTabWindowLoad (object sender, EventArgs e) private void OnLogTabWindowFormClosing (object sender, CancelEventArgs e) { + // Leave detach mode first: the saved window position and layout must describe the normal + // window. Guarded on purpose — the panel is already tearing down here, so a failure must not + // abort the shutdown sequence below. + try + { + _detachModeController.Exit(); + } + catch (Exception ex) + { + _logger.Error(ex, "Leaving detach mode while closing failed"); + } + CancelPendingDrop(); try { @@ -1793,6 +1827,10 @@ private void OnLogWindowDisposed (object sender, EventArgs e) RemoveLogWindow(logWindow); logWindow.Tag = null; + + // Closing the detached window through its X button hands the detached float to the next + // window, or ends the mode when it was the last one. + _detachModeController.OnWindowDisposed(logWindow); } private void OnExitToolStripMenuItemClick (object sender, EventArgs e) @@ -2063,6 +2101,58 @@ private void OnFollowTailCheckBoxClick (object sender, EventArgs e) CurrentLogWindow?.FollowTailChanged(checkBoxFollowTail.Checked, false); } + /// + /// Takes F11 for detach mode before the key reaches the log window. While detached the main + /// window is hidden and its key handling is served by 's + /// message filter instead; the mode is left from there. The View menu offers the same toggle + /// as "Log Only View"; it only displays F11 as a hint, the key itself is taken here so there + /// is a single code path. + /// + protected override bool ProcessCmdKey (ref Message msg, Keys keyData) + { + if (keyData == Keys.F11) + { + // Only the key-down of the first press counts: Windows repeats WM_KEYDOWN while F11 is + // held down (lParam bit 30), and honouring those repeats would flip the mode back and + // forth. A second press after release leaves the mode again. + if (!IsAutoRepeat(msg)) + { + ToggleDetachMode(); + } + + return true; + } + + return base.ProcessCmdKey(ref msg, keyData); + } + + /// + /// Tells the repeated WM_KEYDOWN messages Windows sends while a key is held down (lParam bit 30) + /// from the single message of an actual press. + /// + private static bool IsAutoRepeat (Message msg) + { + const int WM_KEYDOWN = 0x0100; + + return msg.Msg == WM_KEYDOWN && ((long)msg.LParam & (1L << 30)) != 0; + } + + [SupportedOSPlatform("windows")] + private void ToggleDetachMode () + { + if (!_detachModeController.IsActive && WindowState == FormWindowState.Minimized) + { + WindowState = FormWindowState.Normal; + } + + _detachModeController.Enter(); + } + + private void OnLogOnlyViewToolStripMenuItemClick (object sender, EventArgs e) + { + ToggleDetachMode(); + } + private void OnLogTabWindowKeyDown (object sender, KeyEventArgs e) { if (e.KeyCode == Keys.W && e.Control) @@ -2372,14 +2462,14 @@ private void OnCloseThisTabToolStripMenuItemClick (object sender, EventArgs e) private void OnCloseOtherTabsToolStripMenuItemClick (object sender, EventArgs e) { var activeWindow = _tabController.GetActiveWindow(); - var closeList = _tabController.GetAllWindowsFromDockPanel() - .Where(window => window != activeWindow) - .ToList(); - foreach (var logWindow in closeList) + // Nothing to keep: without an active window there is no "other" tab to close. + if (activeWindow == null) { - logWindow.Close(); + return; } + + _tabController.CloseAllExcept(activeWindow); } [SupportedOSPlatform("windows")] diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs index 9da5eea6f..77ec16aa1 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs @@ -47,6 +47,8 @@ private void InitializeComponent () lastUsedToolStripMenuItem = new ToolStripMenuItem(); exitToolStripMenuItem = new ToolStripMenuItem(); viewNavigateToolStripMenuItem = new ToolStripMenuItem(); + logOnlyViewToolStripMenuItem = new ToolStripMenuItem(); + ToolStripSeparator12 = new ToolStripSeparator(); goToLineToolStripMenuItem = new ToolStripMenuItem(); searchToolStripMenuItem = new ToolStripMenuItem(); filterToolStripMenuItem = new ToolStripMenuItem(); @@ -333,7 +335,7 @@ private void InitializeComponent () // // viewNavigateToolStripMenuItem // - viewNavigateToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { goToLineToolStripMenuItem, searchToolStripMenuItem, filterToolStripMenuItem, bookmarksToolStripMenuItem, columnFinderToolStripMenuItem, ToolStripSeparator5, encodingToolStripMenuItem, ToolStripSeparator6, timeshiftToolStripMenuItem, timeshiftToolStripTextBox, ToolStripSeparator4, copyMarkedLinesIntoNewTabToolStripMenuItem }); + viewNavigateToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { goToLineToolStripMenuItem, searchToolStripMenuItem, filterToolStripMenuItem, bookmarksToolStripMenuItem, columnFinderToolStripMenuItem, ToolStripSeparator5, encodingToolStripMenuItem, ToolStripSeparator6, timeshiftToolStripMenuItem, timeshiftToolStripTextBox, ToolStripSeparator4, copyMarkedLinesIntoNewTabToolStripMenuItem, ToolStripSeparator12, logOnlyViewToolStripMenuItem }); viewNavigateToolStripMenuItem.Name = "viewNavigateToolStripMenuItem"; viewNavigateToolStripMenuItem.Size = new Size(96, 19); viewNavigateToolStripMenuItem.Text = "View/Navigate"; @@ -471,6 +473,20 @@ private void InitializeComponent () copyMarkedLinesIntoNewTabToolStripMenuItem.Text = "Copy to Tab"; copyMarkedLinesIntoNewTabToolStripMenuItem.ToolTipText = "Copies all selected lines into a new tab page"; copyMarkedLinesIntoNewTabToolStripMenuItem.Click += OnCopyMarkedLinesIntoNewTabToolStripMenuItemClick; + // + // ToolStripSeparator12 + // + ToolStripSeparator12.Name = "ToolStripSeparator12"; + ToolStripSeparator12.Size = new Size(174, 6); + // + // logOnlyViewToolStripMenuItem + // + logOnlyViewToolStripMenuItem.Name = "logOnlyViewToolStripMenuItem"; + logOnlyViewToolStripMenuItem.ShortcutKeyDisplayString = "F11"; + logOnlyViewToolStripMenuItem.Size = new Size(177, 22); + logOnlyViewToolStripMenuItem.Text = "Log Only View"; + logOnlyViewToolStripMenuItem.ToolTipText = "Shows the active log alone in its own window and hides the main window"; + logOnlyViewToolStripMenuItem.Click += OnLogOnlyViewToolStripMenuItemClick; // // optionToolStripMenuItem // @@ -1142,6 +1158,8 @@ private void InitializeComponent () private ToolStripMenuItem columnFinderToolStripMenuItem; private DockPanel dockPanel; private ToolStripMenuItem tabRenameToolStripMenuItem; + private ToolStripMenuItem logOnlyViewToolStripMenuItem; + private ToolStripSeparator ToolStripSeparator12; private ToolStripSeparator lineToolStripSeparatorExtension1; private ToolStripSeparator lineToolStripSeparatorExtension2; private ToolStripSeparator ToolStripSeparator1; diff --git a/src/LogExpert.UI/Interface/ITabController.cs b/src/LogExpert.UI/Interface/ITabController.cs index 496b8749b..05b9491f2 100644 --- a/src/LogExpert.UI/Interface/ITabController.cs +++ b/src/LogExpert.UI/Interface/ITabController.cs @@ -65,6 +65,26 @@ internal interface ITabController : IDisposable /// void SwitchToPreviousWindow (); + /// + /// Resolves the LogWindow that follows in the tab order, without + /// activating it. + /// + /// + /// The window to move on from. Pass null to use the active window. + /// + /// The next LogWindow, or null when no window is tracked. + LogWindow GetNextWindow (LogWindow current = null); + + /// + /// Resolves the LogWindow that precedes in the tab order, without + /// activating it. + /// + /// + /// The window to move back from. Pass null to use the active window. + /// + /// The previous LogWindow, or null when no window is tracked. + LogWindow GetPreviousWindow (LogWindow current = null); + /// /// Finds a LogWindow by its associated file name. /// @@ -78,6 +98,18 @@ internal interface ITabController : IDisposable /// A read-only list of all tracked LogWindows. IReadOnlyList GetAllWindows (); + /// + /// Gets all tracked LogWindows that are (or were) placed in the dock panel, in tracking order. + /// Windows a session layout restore has not placed yet () are + /// excluded. Hidden windows are included. + /// + /// + /// This is the query for operations that must cover every window an ongoing session should + /// keep — saving a session, closing every other tab — even when a window is currently hidden. + /// + /// A read-only list of the placed LogWindows. + IReadOnlyList GetPlacedWindows (); + /// /// Gets all LogWindow instances from the DockPanel's Contents collection. /// This returns windows that are currently displayed in the DockPanel, @@ -85,17 +117,10 @@ internal interface ITabController : IDisposable /// (e.g., windows restored from layout serialization). /// /// - /// Use this method when you need to iterate over all visible LogWindows, - /// particularly for operations like: - /// - Saving project/session data - /// - Saving last open files list - /// - Closing all tabs - /// - Applying settings to all windows - /// - /// For most other operations, prefer which - /// returns only explicitly tracked windows. + /// Only displayed windows are returned: a window hidden with drops + /// out of the result. Use when hidden windows must be included. /// - /// Read-only list of all LogWindows in the DockPanel. + /// Read-only list of all displayed LogWindows in the DockPanel. IReadOnlyList GetAllWindowsFromDockPanel (); /// diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs new file mode 100644 index 000000000..5e858dd45 --- /dev/null +++ b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs @@ -0,0 +1,106 @@ +using System.Runtime.Versioning; + +namespace LogExpert.UI.Services.DetachModeService; + +/// +/// Win32 subclass for a detached . The DockPanel +/// suite handles a caption double click by docking the window back into the panel (and its public +/// DoubleClickTitleBarToDock switch does not disable that), so the message has to be caught +/// before it reaches the suite: this hook turns a caption double click into a maximize/restore +/// toggle instead. +/// +/// +/// Subclassing replaces the window procedure, so every message the hook does not intercept is +/// forwarded to the procedure captured before - that is the +/// WinForms procedure which finally reaches the suite's FloatWindow.WndProc. Messages +/// swallowed here never arrive in the suite. +/// +[SupportedOSPlatform("windows")] +internal sealed class DetachFloatWindowHook : NativeWindow, IDisposable +{ + private const int GWL_WNDPROC = -4; + private const int WM_NCLBUTTONDBLCLK = 0x00A3; + + private readonly WeifenLuo.WinFormsUI.Docking.FloatWindow _floatWindow; + private readonly IntPtr _originalProc; + private bool _disposed; + + /// Raised when the user double clicks the caption of the hooked window. + public event EventHandler CaptionDoubleClicked; + + private DetachFloatWindowHook (WeifenLuo.WinFormsUI.Docking.FloatWindow floatWindow) + { + _floatWindow = floatWindow; + + // Must be captured before AssignHandle replaces the procedure with this hook. + _originalProc = GetWindowProc(floatWindow.Handle); + AssignHandle(floatWindow.Handle); + } + + /// + /// Starts watching the caption of . Call this only after every + /// style-changing property (border style, taskbar flag) has been applied: those recreate the + /// window handle, and the hook would be detached by the recreation. + /// + public static DetachFloatWindowHook Attach (WeifenLuo.WinFormsUI.Docking.FloatWindow floatWindow) + { + ArgumentNullException.ThrowIfNull(floatWindow); + + if (!floatWindow.IsHandleCreated) + { + throw new InvalidOperationException("The float window handle must be created before hooking its caption."); + } + + return new DetachFloatWindowHook(floatWindow); + } + + /// The window this hook is attached to. + public WeifenLuo.WinFormsUI.Docking.FloatWindow FloatWindow => _floatWindow; + + protected override void WndProc (ref Message m) + { + if (m.Msg == WM_NCLBUTTONDBLCLK) + { + // Swallowed on purpose: both the suite (dock back) and plain DefWindowProc (maximize) + // have a fixed idea of what a caption double click means. The controller decides. + CaptionDoubleClicked?.Invoke(this, EventArgs.Empty); + return; + } + + m.Result = CallWindowProc(_originalProc, m.HWnd, (uint)m.Msg, m.WParam, m.LParam); + } + + public void Dispose () + { + if (_disposed) + { + return; + } + + _disposed = true; + + // ReleaseHandle restores the window procedure that AssignHandle replaced. + if (Handle != IntPtr.Zero) + { + ReleaseHandle(); + } + + CaptionDoubleClicked = null; + } + + private static IntPtr GetWindowProc (IntPtr handle) + { + return IntPtr.Size == 8 + ? GetWindowLongPtr64(handle, GWL_WNDPROC) + : new IntPtr(GetWindowLong32(handle, GWL_WNDPROC)); + } + + [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLongPtrW")] + private static extern IntPtr GetWindowLongPtr64 (IntPtr hWnd, int nIndex); + + [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLongW")] + private static extern int GetWindowLong32 (IntPtr hWnd, int nIndex); + + [System.Runtime.InteropServices.DllImport("user32.dll")] + private static extern IntPtr CallWindowProc (IntPtr lpPrevWndFunc, IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); +} diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs b/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs new file mode 100644 index 000000000..5b915e523 --- /dev/null +++ b/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs @@ -0,0 +1,75 @@ +using System.Runtime.Versioning; + +namespace LogExpert.UI.Services.DetachModeService; + +/// +/// Serves the keyboard of detach mode while the main window is hidden. The main form is not in the +/// focus chain then, so its ProcessCmdKey never fires and the keys are taken from the message +/// stream instead: F11 and ESC leave the mode, Ctrl+Tab / Ctrl+Shift+Tab move to the previous or +/// next log window. +/// +[SupportedOSPlatform("windows")] +internal sealed class DetachMessageFilter : IMessageFilter +{ + private const int WM_KEYDOWN = 0x0100; + private const int VK_F11 = 0x7A; + private const int VK_ESCAPE = 0x1B; + private const int VK_TAB = 0x09; + + /// The lParam bit Windows sets on every WM_KEYDOWN but the first while a key is held. + private const long AUTOREPEAT_FLAG = 1L << 30; + + private readonly DetachModeController _controller; + + // Test seams: both read live machine state a unit test cannot control (the keyboard modifiers + // and the input focus), so their source is injectable. Production always uses the defaults. + + internal Func _modifierKeys = static () => Control.ModifierKeys; + + // The detached float window is the active form while the mode lasts, so its active control is + // where the keyboard is. Null when another window holds the focus. + internal Func _isTextInputFocused = static () => Form.ActiveForm?.ActiveControl is TextBoxBase; + + public DetachMessageFilter (DetachModeController controller) + { + _controller = controller; + } + + public bool PreFilterMessage (ref Message m) + { + if (m.Msg != WM_KEYDOWN || !_controller.IsActive) + { + return false; + } + + switch (m.WParam.ToInt32()) + { + case VK_F11: + // Block the whole burst: acting on auto-repeat would flip the mode on every repeat. + if ((m.LParam.ToInt64() & AUTOREPEAT_FLAG) == 0) + { + _controller.Exit(); + } + + return true; + + case VK_ESCAPE: + // The log window uses ESC to cancel a search or clear search highlighting, so leave + // the mode only when the focus is not in a text input. + if (_isTextInputFocused()) + { + return false; + } + + _controller.Exit(); + return true; + + case VK_TAB when _modifierKeys().HasFlag(Keys.Control): + _controller.SwitchWindow(_modifierKeys().HasFlag(Keys.Shift)); + return true; + + default: + return false; + } + } +} diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs new file mode 100644 index 000000000..47dede288 --- /dev/null +++ b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs @@ -0,0 +1,389 @@ +using System.Runtime.Versioning; + +using LogExpert.UI.Controls.LogWindow; +using LogExpert.UI.Interface; + +using WeifenLuo.WinFormsUI.Docking; + +namespace LogExpert.UI.Services.DetachModeService; + +/// +/// Owns detach mode: F11 hides the main window and turns the active log window's float into a +/// stand-alone viewer window; leaving the mode puts the window back where it was and brings the +/// main window back. +/// +/// +/// The detached window stays a regular DockPanel float — no content is moved out of the suite — so +/// layout, session persistence and the close button keep working untouched. Three things are added +/// on top while the mode lasts: the float's owner link to the main form is cut (a hidden owner would +/// hide the float with it, a closing one would take it down), the tool-window chrome is replaced by +/// a normal border with minimize/maximize buttons and a taskbar button, and a caption double click +/// maximizes/restores instead of docking the window back into the panel. +/// +[SupportedOSPlatform("windows")] +internal sealed class DetachModeController : IDisposable +{ + private readonly Form _mainForm; + private readonly DockPanel _dockPanel; + private readonly ITabController _tabController; + private readonly DetachMessageFilter _messageFilter; + + private DetachFloatWindowHook _captionHook; + private bool _filterInstalled; + private bool _disposed; + + /// The window currently detached, or null while the mode is off. + private LogWindow _detachedWindow; + + /// + /// The dock state the detached window came from. Only valid while the mode is on; a window + /// switched away from is put back into this state before the next one is detached, so a single + /// field is enough to restore every window on exit. + /// + private DockState _originalDockState = DockState.Unknown; + + public DetachModeController (Form mainForm, DockPanel dockPanel, ITabController tabController) + { + ArgumentNullException.ThrowIfNull(mainForm); + ArgumentNullException.ThrowIfNull(dockPanel); + ArgumentNullException.ThrowIfNull(tabController); + + _mainForm = mainForm; + _dockPanel = dockPanel; + _tabController = tabController; + _messageFilter = new DetachMessageFilter(this); + } + + /// True while a log window is detached from the main window. + public bool IsActive => _detachedWindow != null; + + /// + /// Detaches the active log window and hides the main window. Does nothing when no log window is + /// open; returns whether the mode was entered. + /// + public bool Enter () + { + if (IsActive) + { + return true; + } + + // The DockPanel's own active content is what is really on screen; the shell's current window + // can lag a step behind it during activation. + var active = _dockPanel.ActiveContent as LogWindow ?? _tabController.GetActiveWindow(); + + if (active == null || active.IsDisposed) + { + return false; + } + + Detach(active); + InstallFilter(); + _mainForm.Hide(); + return true; + } + + /// + /// Ends the mode: the detached window goes back to the dock state it came from and the main + /// window becomes visible again. Safe to call when the detached window is already gone. + /// + public void Exit () + { + if (!IsActive) + { + return; + } + + var window = _detachedWindow; + var originalDockState = _originalDockState; + + _detachedWindow = null; + _originalDockState = DockState.Unknown; + ReleaseFloatWindow(); + UninstallFilter(); + + if (window is { IsDisposed: false } && originalDockState != DockState.Float) + { + window.Show(_dockPanel, ToRestorable(originalDockState)); + } + + RestoreMainForm(); + } + + /// + /// Ctrl+Tab while detached: the tab strip is gone with the main window, so switching means + /// replacing which window the detached float shows. The window that was detached returns to its + /// original dock state (inside the hidden main window) and keeps it for the final restore. + /// + /// True to move backwards in the tab order. + public void SwitchWindow (bool shiftPressed) + { + if (!IsActive) + { + return; + } + + var target = shiftPressed + ? _tabController.GetPreviousWindow(_detachedWindow) + : _tabController.GetNextWindow(_detachedWindow); + + if (target == null || target == _detachedWindow) + { + return; + } + + if (_detachedWindow is { IsDisposed: false } && _originalDockState != DockState.Float) + { + _detachedWindow.Show(_dockPanel, ToRestorable(_originalDockState)); + } + + Detach(target); + } + + /// + /// A window opened while detached (file drop, command line, session) becomes the detached one; + /// the DockPanel has already activated it. + /// + /// The window that was just added. + public void OnWindowAdded (LogWindow window) + { + if (!IsActive || window == null || window.IsDisposed) + { + return; + } + + if (_detachedWindow is { IsDisposed: false } && _originalDockState != DockState.Float) + { + _detachedWindow.Show(_dockPanel, ToRestorable(_originalDockState)); + } + + Detach(window); + } + + /// + /// Reacts to the detached window being closed through the float's X button: another window takes + /// its place, or — when it was the last one — the mode ends and the main window comes back. + /// + /// The window being disposed. + public void OnWindowDisposed (LogWindow window) + { + if (!IsActive || window != _detachedWindow) + { + return; + } + + _detachedWindow = null; + _originalDockState = DockState.Unknown; + ReleaseFloatWindow(); + + var next = _tabController.GetPlacedWindows() + .FirstOrDefault(candidate => candidate != window && !candidate.IsDisposed); + + if (next == null) + { + UninstallFilter(); + RestoreMainForm(); + return; + } + + // The DockPanel is still tearing the closed window down here; detaching the next window + // would re-enter that teardown. + try + { + _mainForm.BeginInvoke(new Action(() => + { + if (!IsActive && !next.IsDisposed) + { + Detach(next); + } + })); + } + catch (InvalidOperationException) + { + // The main window lost its handle while closing; the shutdown sequence owns the rest. + } + } + + /// + /// Turns into the detached one: floats it if needed, upgrades its + /// float window to a normal window and hooks the caption double click. + /// + private void Detach (LogWindow window) + { + ReleaseFloatWindow(); + + // Captured before Show(): afterwards the window reports Float. + _originalDockState = window.DockState; + + if (window.DockState != DockState.Float) + { + window.Show(_dockPanel, DockState.Float); + } + + var floatWindow = FindFloatWindow(window); + + if (floatWindow == null) + { + // The suite refused to float the window (should not happen for a log window); leaving + // _detachedWindow unset keeps the mode off instead of a half-entered state. + _originalDockState = DockState.Unknown; + return; + } + + PatchFloatWindow(floatWindow); + _captionHook = DetachFloatWindowHook.Attach(floatWindow); + _captionHook.CaptionDoubleClicked += ToggleMaximize; + _detachedWindow = window; + window.Activate(); + } + + /// + /// Replaces the tool-window chrome with a normal window chrome. All style-affecting properties + /// are set before the caption hook is attached: changing them recreates the window handle. + /// + private void PatchFloatWindow (FloatWindow floatWindow) + { + // The suite's SetText() makes the float share the detached log window's Icon object, and + // the shell replaces that object on every tail refresh while disposing the old one - the + // float then holds a disposed icon, and the handle recreation from the style changes below + // reads it and throws. The main form's icon lives as long as the process, so use it. + floatWindow.Icon = _mainForm.Icon; + + // A float is an owned window of the main form: a hidden owner hides it, a closing owner + // closes it. Detached mode hides the main window, so the ownership is cut for the time + // being. The suite recreates ownership on the next float anyway. + floatWindow.Owner = null; + floatWindow.FormBorderStyle = FormBorderStyle.Sizable; + floatWindow.MaximizeBox = true; + floatWindow.MinimizeBox = true; + floatWindow.ShowInTaskbar = true; + + // The suite's caption left-button handler would start a dock drag; with end-user docking + // off the caption falls through to the native move-drag and the double click arrives at the + // hook as a normal window's caption message. + floatWindow.AllowEndUserDocking = false; + + // .NET 10 applies the dark title bar once, when the window first becomes visible + // (Control.SetVisibleCore). The style changes above recreated the window handle and the + // DWM flag died with the old one, so it has to be set again here (newer WinForms builds + // restore it themselves on handle recreation). + if (Application.IsDarkModeEnabled && floatWindow.IsHandleCreated) + { + SetImmersiveDarkTitleBar(floatWindow.Handle, dark: true); + } + } + + private void ToggleMaximize (object sender, EventArgs e) + { + if (_captionHook == null || _captionHook.FloatWindow.IsDisposed) + { + return; + } + + _captionHook.FloatWindow.WindowState = _captionHook.FloatWindow.WindowState == FormWindowState.Maximized + ? FormWindowState.Normal + : FormWindowState.Maximized; + } + + private void ReleaseFloatWindow () + { + if (_captionHook == null) + { + return; + } + + _captionHook.CaptionDoubleClicked -= ToggleMaximize; + _captionHook.Dispose(); + _captionHook = null; + } + + private void InstallFilter () + { + if (_filterInstalled) + { + return; + } + + Application.AddMessageFilter(_messageFilter); + _filterInstalled = true; + } + + private void UninstallFilter () + { + if (!_filterInstalled) + { + return; + } + + Application.RemoveMessageFilter(_messageFilter); + _filterInstalled = false; + } + + private void RestoreMainForm () + { + _mainForm.Show(); + _mainForm.Activate(); + } + + private FloatWindow FindFloatWindow (LogWindow content) + { + foreach (FloatWindow floatWindow in _dockPanel.FloatWindows) + { + foreach (DockPane pane in floatWindow.NestedPanes) + { + if (pane.Contents.Contains(content)) + { + return floatWindow; + } + } + } + + return null; + } + + /// + /// Maps a recorded dock state to one + /// accepts. A window recorded while hidden or not yet placed cannot come back that way and lands + /// in the document area instead. + /// + private static DockState ToRestorable (DockState state) + { + return state is DockState.Unknown or DockState.Hidden ? DockState.Document : state; + } + + private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; + + private static void SetImmersiveDarkTitleBar (IntPtr handle, bool dark) + { + int value = dark ? 1 : 0; + _ = DwmSetWindowAttribute(handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, sizeof(int)); + } + + [System.Runtime.InteropServices.DllImport("dwmapi.dll")] + private static extern int DwmSetWindowAttribute (IntPtr hwnd, int attribute, ref int value, int size); + + public void Dispose () + { + if (_disposed) + { + return; + } + + _disposed = true; + + if (IsActive) + { + try + { + Exit(); + } + catch (ObjectDisposedException) + { + // Shutdown races: the panel or the window is already gone, nothing left to restore. + } + } + + ReleaseFloatWindow(); + UninstallFilter(); + } +} diff --git a/src/LogExpert.UI/Services/TabControllerService/TabController.cs b/src/LogExpert.UI/Services/TabControllerService/TabController.cs index ee5147499..bd1cc8bd3 100644 --- a/src/LogExpert.UI/Services/TabControllerService/TabController.cs +++ b/src/LogExpert.UI/Services/TabControllerService/TabController.cs @@ -208,12 +208,18 @@ public void CloseAllWindows () } /// - /// Closes all windows except the specified one + /// Closes every placed window except the specified one. Windows that are not placed in the + /// dock panel yet (see ) are left alone. /// /// Window to keep open public void CloseAllExcept (LogWindow window) { - var windowsToClose = GetAllWindows() + if (window == null) + { + return; + } + + var windowsToClose = GetPlacedWindows() .Where(w => w != window) .ToList(); @@ -263,41 +269,83 @@ public LogWindow GetActiveWindow () /// Switches to the next window in the tab order (Ctrl+Tab behavior) /// public void SwitchToNextWindow () + { + var next = GetNextWindow(); + + if (next != null) + { + next.Activate(); + } + } + + /// + /// Switches to the previous window in the tab order (Ctrl+Shift+Tab behavior) + /// + public void SwitchToPreviousWindow () + { + var previous = GetPreviousWindow(); + + if (previous != null) + { + previous.Activate(); + } + } + + /// + /// Resolves the window that follows in the tracking order, without + /// activating it. Callers that display windows differently from the DockPanel need the target + /// window rather than an Activate(). + /// + /// + /// The window to move on from. Pass null to use the active window. + /// + /// The next window, or null when no window is tracked. + public LogWindow GetNextWindow (LogWindow current = null) { lock (_windowsLock) { if (_windows.Count == 0) { - return; + return null; } var windows = _windows.Keys.ToList(); - var currentIndex = _activeWindow != null - ? windows.IndexOf(_activeWindow) + var anchor = current ?? _activeWindow; + var currentIndex = anchor != null + ? windows.IndexOf(anchor) : -1; // Move forward, wrap around to beginning if at end var nextIndex = (currentIndex + 1) % windows.Count; - windows[nextIndex].Activate(); + return windows[nextIndex]; } } /// - /// Switches to the previous window in the tab order (Ctrl+Shift+Tab behavior) + /// Resolves the window that precedes in the tracking order, without + /// activating it. /// - public void SwitchToPreviousWindow () + /// + /// The window to move back from. Pass null to use the active window. + /// + /// The previous window, or null when no window is tracked. + public LogWindow GetPreviousWindow (LogWindow current = null) { lock (_windowsLock) { if (_windows.Count == 0) { - return; + return null; } var windows = _windows.Keys.ToList(); - var currentIndex = _activeWindow != null - ? windows.IndexOf(_activeWindow) + var anchor = current ?? _activeWindow; + + // Without an anchor the walk starts at the first window, so "previous" wraps to the last + // one ("next" without an anchor lands on the first one the same way). + var currentIndex = anchor != null + ? windows.IndexOf(anchor) : 0; // Move backward, wrap around to end if at beginning @@ -307,7 +355,7 @@ public void SwitchToPreviousWindow () previousIndex = windows.Count - 1; } - windows[previousIndex].Activate(); + return windows[previousIndex]; } } @@ -366,6 +414,28 @@ public IReadOnlyList GetAllWindows () } } + /// + /// Gets all tracked windows that are (or were) placed in the dock panel, in tracking order. + /// A window that a session layout restore has not placed yet reports + /// and is skipped: it cannot be written to a layout, and closing + /// it would abort the restore. + /// + /// + /// Unlike this also returns windows that are currently + /// hidden, which is what a session save and "close other tabs" need when any window is hidden. + /// + /// Read-only list of the placed LogWindows. + public IReadOnlyList GetPlacedWindows () + { + lock (_windowsLock) + { + return _windows.Keys + .Where(window => window.DockState != DockState.Unknown) + .ToList() + .AsReadOnly(); + } + } + /// /// Gets the count of tracked windows /// @@ -458,6 +528,12 @@ protected virtual void Dispose (bool disposing) /// Gets all LogWindow instances currently held by the DockPanel's panes, in the order their tab strips display /// them. Panes of every dock state are enumerated, so floating windows are included. /// + /// + /// Only windows whose pane currently displays them are returned: a window hidden with + /// drops out of the enumeration even though its pane still exists. + /// Use when hidden windows have to be included, as in a session + /// save or "close other tabs". + /// /// Read-only list of all LogWindows in the DockPanel public IReadOnlyList GetAllWindowsFromDockPanel () { From e78c47f14857a9d8e3e5586b70afbcd415a39794 Mon Sep 17 00:00:00 2001 From: mfkeeq <546357529@qq.com> Date: Sat, 24 Oct 2026 12:43:19 +0800 Subject: [PATCH 2/4] Add F11 Detach Mode and address review feedback Adds F11 detach mode: F11 hides the main window and keeps the active log window floating as a stand-alone viewer. F11 brings the main window back and restores the window to its original pane and tab index. Behaviour: - F11 enters and leaves the mode. ESC is not part of detach mode and keeps its normal behaviour (cancelling a search on the grid, editing in text boxes, dismissing dialogs). - Ctrl+Tab / Ctrl+Shift+Tab cycle through log windows while detached. - Opening a file while detached replaces the detached window. - Closing the detached float (X) ends the mode and returns to the main window. - A window that was already floating keeps its original chrome on exit; a docked window is restored to its original pane and tab position. - The keyboard filter only reacts while the detached float is the active form, so modal dialogs keep F11 and Ctrl+Tab for themselves. Review follow-up: - Removed the ESC exit path and the old text-input guard; the mode is left with F11 only. - Restore the original dock pane and content index instead of docking to DockState.Document. - Restore the patched chrome for windows that were already floating on entry. - Make DetachModeController IDisposable and dispose it next to TabController; the message filter is removed in Dispose as well. - Revert the "Close other tabs" change: it was not part of this feature and is now identical to Development. - Clear the new analyzer warnings: remove the unused GetFocus/SetFocus P/Invokes, add DefaultDllImportSearchPaths for the DWM call, and suppress CA1303, CA1031 and CA1001 with justifications. - Share the WM_KEYDOWN and autorepeat constants through NativeMethods and keep a single restore-dock-state block. - Rename ToggleDetachMode to EnterDetachMode, trim comments to the non-obvious "why", and use the concept name "Detach Mode" in code, designer text and all three resource files. - Use constructor injection for the keyboard filter test seams. Tests: 9 controller, 8 filter and 3 TabController tests. Full LogExpert.UI.Tests suite: 391 passed, 0 failed. Note: the previous description said "Replace compact mode", but Development has no compact mode; this change adds F11 Detach Mode. The earlier test count and the Ctrl+Tab, file-replacement and X-button behaviour were missing from the description and are documented above. Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com> --- src/LogExpert.Resources/Resources.Designer.cs | 2 +- src/LogExpert.Resources/Resources.de.resx | 2 +- src/LogExpert.Resources/Resources.resx | 2 +- src/LogExpert.Resources/Resources.zh-CN.resx | 2 +- .../Services/DetachModeControllerTests.cs | 43 ++-- .../Services/TabControllerTests.cs | 64 ------ .../Dialogs/LogTabWindow/LogTabWindow.cs | 48 ++-- .../LogTabWindow/LogTabWindow.designer.cs | 12 +- src/LogExpert.UI/Extensions/NativeMethods.cs | 18 ++ src/LogExpert.UI/Interface/ITabController.cs | 25 +- .../DetachFloatWindowHook.cs | 41 ++-- .../DetachModeService/DetachMessageFilter.cs | 58 ++--- .../DetachModeService/DetachModeController.cs | 217 ++++++++---------- .../TabControllerService/TabController.cs | 34 +-- 14 files changed, 212 insertions(+), 356 deletions(-) diff --git a/src/LogExpert.Resources/Resources.Designer.cs b/src/LogExpert.Resources/Resources.Designer.cs index e46382a0d..44df92258 100644 --- a/src/LogExpert.Resources/Resources.Designer.cs +++ b/src/LogExpert.Resources/Resources.Designer.cs @@ -2663,7 +2663,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_loadProjectToolStripMenuI } /// - /// Looks up a localized string similar to Log Only View. + /// Looks up a localized string similar to Detach Mode. /// public static string LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem { get { diff --git a/src/LogExpert.Resources/Resources.de.resx b/src/LogExpert.Resources/Resources.de.resx index 8bf8e30dd..a5db8d2e8 100644 --- a/src/LogExpert.Resources/Resources.de.resx +++ b/src/LogExpert.Resources/Resources.de.resx @@ -1177,7 +1177,7 @@ Ein ausgewähltes Tool erscheint in der Iconbar. Alle anderen verfügbaren Tools Zu Tab kopieren - Nur Log-Ansicht + Detach-Modus Berechne Zeitstreuungsanzeige... diff --git a/src/LogExpert.Resources/Resources.resx b/src/LogExpert.Resources/Resources.resx index 7a33a3dae..c5dd8c054 100644 --- a/src/LogExpert.Resources/Resources.resx +++ b/src/LogExpert.Resources/Resources.resx @@ -1219,7 +1219,7 @@ Checked tools will appear in the icon bar. All other tools are available in the Copy to Tab - Log Only View + Detach Mode Options diff --git a/src/LogExpert.Resources/Resources.zh-CN.resx b/src/LogExpert.Resources/Resources.zh-CN.resx index 964f5f26d..8fb1eece7 100644 --- a/src/LogExpert.Resources/Resources.zh-CN.resx +++ b/src/LogExpert.Resources/Resources.zh-CN.resx @@ -1089,7 +1089,7 @@ 复制到标签页 - 仅日志视图 + 分离模式 选项 diff --git a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs index 0cb5444c7..0cafa009b 100644 --- a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs @@ -24,6 +24,7 @@ namespace LogExpert.UI.Tests.Services; [TestFixture] [SupportedOSPlatform("windows")] [Apartment(ApartmentState.STA)] +[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1001:Types that own disposable fields should be disposable", Justification = "NUnit disposes the fields in TearDown.")] internal class DetachModeControllerTests { private Form _form; @@ -226,7 +227,7 @@ public void OnWindowDisposed_LastWindow_EndsTheModeAndShowsTheMainForm () } [Test] - public void OnWindowDisposed_WithOtherWindows_DetachesTheNextOne () + public void OnWindowDisposed_WithOtherWindows_EndsTheModeAndRestoresMainForm () { // Arrange var windows = AddWindows("first.log", "second.log"); @@ -241,14 +242,15 @@ public void OnWindowDisposed_WithOtherWindows_DetachesTheNextOne () _controller.OnWindowDisposed(active); Application.DoEvents(); - // Assert — the surviving window takes the detached float over + // Assert — closing the detached window ends detach mode and brings back the main form. + // Other log windows remain where they were. var other = windows.Single(window => window != active); Assert.Multiple(() => { - Assert.That(_controller.IsActive, Is.True); - Assert.That(other.DockState, Is.EqualTo(DockState.Float)); - Assert.That(_form.Visible, Is.False); + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + Assert.That(other.DockState, Is.EqualTo(DockState.Document)); }); } @@ -349,13 +351,12 @@ public void PreFilterMessage_F11AutoRepeat_IsSwallowedWithoutLeavingTheMode () } [Test] - public void PreFilterMessage_EscWithTextInputFocused_PassesThroughAndStaysInMode () + public void PreFilterMessage_Esc_PassesThroughAndStaysInMode () { - // Arrange — the log window's search box owns the focus + // Arrange — ESC is not handled by the filter at all; the grid or text input handles it AddWindows("first.log"); _controller.Enter(); var filter = CreateFilter(); - filter._isTextInputFocused = () => true; var msg = new Message { @@ -367,7 +368,7 @@ public void PreFilterMessage_EscWithTextInputFocused_PassesThroughAndStaysInMode // Act var swallowed = filter.PreFilterMessage(ref msg); - // Assert — ESC belongs to the text input, e.g. canceling a search + // Assert — ESC passes through untouched Assert.Multiple(() => { Assert.That(swallowed, Is.False); @@ -376,18 +377,17 @@ public void PreFilterMessage_EscWithTextInputFocused_PassesThroughAndStaysInMode } [Test] - public void PreFilterMessage_EscWithoutTextInput_LeavesTheMode () + public void PreFilterMessage_F11WhileAnotherFormIsActive_DoesNotLeaveTheMode () { - // Arrange — no text input holds the focus + // Arrange — a modal dialog or any other window holds the focus AddWindows("first.log"); _controller.Enter(); - var filter = CreateFilter(); - filter._isTextInputFocused = () => false; + var filter = CreateFilter(activeFormGetter: () => _form); var msg = new Message { Msg = 0x0100, - WParam = (IntPtr)0x1B, // VK_ESCAPE + WParam = (IntPtr)0x7A, // VK_F11 LParam = 0 }; @@ -397,9 +397,9 @@ public void PreFilterMessage_EscWithoutTextInput_LeavesTheMode () // Assert Assert.Multiple(() => { - Assert.That(swallowed, Is.True); - Assert.That(_controller.IsActive, Is.False); - Assert.That(_form.Visible, Is.True); + Assert.That(swallowed, Is.False); + Assert.That(_controller.IsActive, Is.True, "the key belongs to the form in front"); + Assert.That(_form.Visible, Is.False); }); } @@ -409,8 +409,7 @@ public void PreFilterMessage_CtrlTabWhileDetached_SwitchesToTheNextWindow () // Arrange var windows = AddWindows("first.log", "second.log"); _controller.Enter(); // detaches the active window, the last added one - var filter = CreateFilter(); - filter._modifierKeys = () => Keys.Control; + var filter = CreateFilter(() => Keys.Control); var msg = new Message { @@ -438,8 +437,7 @@ public void PreFilterMessage_CtrlShiftTabWhileDetached_SwitchesToThePreviousWind // Arrange var windows = AddWindows("first.log", "second.log", "third.log"); _controller.Enter(); // detaches the active window, the last added one - var filter = CreateFilter(); - filter._modifierKeys = () => Keys.Control | Keys.Shift; + var filter = CreateFilter(() => Keys.Control | Keys.Shift); var msg = new Message { @@ -490,7 +488,8 @@ public void PreFilterMessage_OtherKeysWhileDetached_PassThrough () /// A fresh filter wired to the controller, so PreFilterMessage can be driven without a /// running message pump. /// - private DetachMessageFilter CreateFilter () => new(_controller); + private DetachMessageFilter CreateFilter (Func? modifierKeysGetter = null, Func
? activeFormGetter = null) + => new(_controller, modifierKeysGetter, activeFormGetter ?? (() => _controller.DetachedFloat)); private FloatWindow FloatWindowOf (LogWindow content) { diff --git a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs index c32d41959..2925ce1c0 100644 --- a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs @@ -236,49 +236,6 @@ public void GetAllWindows_WhenEmpty_ReturnsEmptyList () #endregion - #region GetPlacedWindows Tests - - [Test] - public void GetPlacedWindows_ExcludesWindowsThatWereNeverPlaced () - { - // Arrange - using var placed = CreateLogWindow("placed.log"); - using var deferred = CreateLogWindow("deferred.log"); - - _tabController.AddWindow(placed, "placed.log"); - _tabController.AddWindow(deferred, "deferred.log", doNotAddToDockPanel: true); - - // Act - var result = _tabController.GetPlacedWindows(); - - // Assert — a window a session layout restore has not placed yet cannot be saved or closed - Assert.That(result, Is.EqualTo([placed])); - } - - [Test] - public void GetPlacedWindows_IncludesHiddenWindowsThatTheDockPanelNoLongerDisplays () - { - // Arrange - using var first = CreateLogWindow("first.log"); - using var second = CreateLogWindow("second.log"); - - _tabController.AddWindow(first, "first.log"); - _tabController.AddWindow(second, "second.log"); - - second.Hide(); - - // Act - var placed = _tabController.GetPlacedWindows(); - var displayed = _tabController.GetAllWindowsFromDockPanel(); - - // Assert — this is why a session save and "close other tabs" cannot use the DockPanel query - // when windows are hidden - Assert.That(placed, Is.EqualTo([first, second])); - Assert.That(displayed, Is.EqualTo([first])); - } - - #endregion - #region GetWindowCount Tests [Test] @@ -504,27 +461,6 @@ public void GetNextWindow_WhenEmpty_ReturnsNull () #endregion - #region CloseAllExcept Tests - - [Test] - public void CloseAllExcept_WithNullWindow_LeavesEveryWindowOpen () - { - // Arrange - using var first = CreateLogWindow("first.log"); - using var second = CreateLogWindow("second.log"); - - _tabController.AddWindow(first, "first.log"); - _tabController.AddWindow(second, "second.log"); - - // Act - _tabController.CloseAllExcept(null); - - // Assert - Assert.That(_tabController.GetWindowCount(), Is.EqualTo(2)); - } - - #endregion - #region SwitchToNextWindow Tests [Test] diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs index 420d4a518..235b6bd31 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs @@ -82,8 +82,8 @@ internal partial class LogTabWindow : Form, ILogTabWindow private bool _wasMaximized; /// - /// Owns detach mode: F11 hides the main window and turns the active log window's float into a - /// stand-alone viewer window; F11 or ESC brings everything back. + /// Owns detach mode: F11 hides the main window and keeps the active log window floating; + /// F11 leaves the mode again. /// private readonly DetachModeController _detachModeController; @@ -768,6 +768,7 @@ protected override void Dispose (bool disposing) _tabStringFormat?.Dispose(); _menuToolbarController?.Dispose(); _toolWindowCoordinator?.Dispose(); + _detachModeController?.Dispose(); // Dispose TabController after FileOperationService is no longer reachable. // FileOperationService holds a reference to _tabController but does not own it; // after Dispose(), no caller invokes the service, so stale references are harmless. @@ -1494,8 +1495,7 @@ private void CloseAllTabs () [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0010:Add missing cases", Justification = "no need for the other switch cases")] private void LoadSession (string sessionFileName, bool restoreLayout) { - // Leave detach mode first: the loaded layout must describe the normal window, and the - // windows a session replaces must not be referenced by the mode. + // Leave detach mode first so the loaded layout describes the normal window. _detachModeController.Exit(); var outcome = _sessionHandler.LoadSession(sessionFileName); @@ -1772,11 +1772,10 @@ private void OnLogTabWindowLoad (object sender, EventArgs e) #endif } + [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Shutdown must continue even when detach mode cannot be restored.")] private void OnLogTabWindowFormClosing (object sender, CancelEventArgs e) { - // Leave detach mode first: the saved window position and layout must describe the normal - // window. Guarded on purpose — the panel is already tearing down here, so a failure must not - // abort the shutdown sequence below. + // Leave detach mode first so the saved layout describes the normal main window. try { _detachModeController.Exit(); @@ -1829,8 +1828,7 @@ private void OnLogWindowDisposed (object sender, EventArgs e) logWindow.Tag = null; - // Closing the detached window through its X button hands the detached float to the next - // window, or ends the mode when it was the last one. + // Closing the detached window ends detach mode and brings the main window back. _detachModeController.OnWindowDisposed(logWindow); } @@ -2104,10 +2102,7 @@ private void OnFollowTailCheckBoxClick (object sender, EventArgs e) /// /// Takes F11 for detach mode before the key reaches the log window. While detached the main - /// window is hidden and its key handling is served by 's - /// message filter instead; the mode is left from there. The View menu offers the same toggle - /// as "Log Only View"; it only displays F11 as a hint, the key itself is taken here so there - /// is a single code path. + /// window is hidden and 's message filter serves the key. /// protected override bool ProcessCmdKey (ref Message msg, Keys keyData) { @@ -2118,7 +2113,7 @@ protected override bool ProcessCmdKey (ref Message msg, Keys keyData) // forth. A second press after release leaves the mode again. if (!IsAutoRepeat(msg)) { - ToggleDetachMode(); + EnterDetachMode(); } return true; @@ -2128,18 +2123,17 @@ protected override bool ProcessCmdKey (ref Message msg, Keys keyData) } /// - /// Tells the repeated WM_KEYDOWN messages Windows sends while a key is held down (lParam bit 30) - /// from the single message of an actual press. + /// Tells the repeated WM_KEYDOWN messages Windows sends while a key is held down from the + /// single message of an actual press. /// private static bool IsAutoRepeat (Message msg) { - const int WM_KEYDOWN = 0x0100; - - return msg.Msg == WM_KEYDOWN && ((long)msg.LParam & (1L << 30)) != 0; + return msg.Msg == LogExpert.UI.Extensions.NativeMethods.WM_KEYDOWN + && ((long)msg.LParam & LogExpert.UI.Extensions.NativeMethods.KEYDOWN_AUTOREPEAT_FLAG) != 0; } [SupportedOSPlatform("windows")] - private void ToggleDetachMode () + private void EnterDetachMode () { if (!_detachModeController.IsActive && WindowState == FormWindowState.Minimized) { @@ -2149,9 +2143,9 @@ private void ToggleDetachMode () _detachModeController.Enter(); } - private void OnLogOnlyViewToolStripMenuItemClick (object sender, EventArgs e) + private void OnDetachModeToolStripMenuItemClick (object sender, EventArgs e) { - ToggleDetachMode(); + EnterDetachMode(); } private void OnLogTabWindowKeyDown (object sender, KeyEventArgs e) @@ -2463,14 +2457,14 @@ private void OnCloseThisTabToolStripMenuItemClick (object sender, EventArgs e) private void OnCloseOtherTabsToolStripMenuItemClick (object sender, EventArgs e) { var activeWindow = _tabController.GetActiveWindow(); + var closeList = _tabController.GetAllWindowsFromDockPanel() + .Where(window => window != activeWindow) + .ToList(); - // Nothing to keep: without an active window there is no "other" tab to close. - if (activeWindow == null) + foreach (var logWindow in closeList) { - return; + logWindow.Close(); } - - _tabController.CloseAllExcept(activeWindow); } [SupportedOSPlatform("windows")] diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs index 77ec16aa1..dd59e9334 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs @@ -473,20 +473,20 @@ private void InitializeComponent () copyMarkedLinesIntoNewTabToolStripMenuItem.Text = "Copy to Tab"; copyMarkedLinesIntoNewTabToolStripMenuItem.ToolTipText = "Copies all selected lines into a new tab page"; copyMarkedLinesIntoNewTabToolStripMenuItem.Click += OnCopyMarkedLinesIntoNewTabToolStripMenuItemClick; - // + // // ToolStripSeparator12 - // + // ToolStripSeparator12.Name = "ToolStripSeparator12"; ToolStripSeparator12.Size = new Size(174, 6); - // + // // logOnlyViewToolStripMenuItem - // + // logOnlyViewToolStripMenuItem.Name = "logOnlyViewToolStripMenuItem"; logOnlyViewToolStripMenuItem.ShortcutKeyDisplayString = "F11"; logOnlyViewToolStripMenuItem.Size = new Size(177, 22); - logOnlyViewToolStripMenuItem.Text = "Log Only View"; + logOnlyViewToolStripMenuItem.Text = "Detach Mode"; logOnlyViewToolStripMenuItem.ToolTipText = "Shows the active log alone in its own window and hides the main window"; - logOnlyViewToolStripMenuItem.Click += OnLogOnlyViewToolStripMenuItemClick; + logOnlyViewToolStripMenuItem.Click += OnDetachModeToolStripMenuItemClick; // // optionToolStripMenuItem // diff --git a/src/LogExpert.UI/Extensions/NativeMethods.cs b/src/LogExpert.UI/Extensions/NativeMethods.cs index c6cfd8a2d..e4b772f00 100644 --- a/src/LogExpert.UI/Extensions/NativeMethods.cs +++ b/src/LogExpert.UI/Extensions/NativeMethods.cs @@ -39,6 +39,24 @@ internal static partial class NativeMethods #endregion + #region Win32 constants shared by keyboard handling + + /// Posted to the window with the keyboard focus when a non-system key is pressed. + public const int WM_KEYDOWN = 0x0100; + + /// The lParam bit Windows sets on every but the first while a key is held. + public const long KEYDOWN_AUTOREPEAT_FLAG = 1L << 30; + + #endregion + + #region P/Invoke + + [System.Runtime.InteropServices.DllImport("dwmapi.dll")] + [System.Runtime.InteropServices.DefaultDllImportSearchPaths(System.Runtime.InteropServices.DllImportSearchPath.System32)] + public static extern int DwmSetWindowAttribute (IntPtr hwnd, int attribute, ref int value, int size); + + #endregion + #region Helper methods public static Icon LoadIconFromExe (string fileName, int index) diff --git a/src/LogExpert.UI/Interface/ITabController.cs b/src/LogExpert.UI/Interface/ITabController.cs index 05b9491f2..2ab2fa128 100644 --- a/src/LogExpert.UI/Interface/ITabController.cs +++ b/src/LogExpert.UI/Interface/ITabController.cs @@ -98,18 +98,6 @@ internal interface ITabController : IDisposable /// A read-only list of all tracked LogWindows. IReadOnlyList GetAllWindows (); - /// - /// Gets all tracked LogWindows that are (or were) placed in the dock panel, in tracking order. - /// Windows a session layout restore has not placed yet () are - /// excluded. Hidden windows are included. - /// - /// - /// This is the query for operations that must cover every window an ongoing session should - /// keep — saving a session, closing every other tab — even when a window is currently hidden. - /// - /// A read-only list of the placed LogWindows. - IReadOnlyList GetPlacedWindows (); - /// /// Gets all LogWindow instances from the DockPanel's Contents collection. /// This returns windows that are currently displayed in the DockPanel, @@ -117,10 +105,17 @@ internal interface ITabController : IDisposable /// (e.g., windows restored from layout serialization). /// /// - /// Only displayed windows are returned: a window hidden with drops - /// out of the result. Use when hidden windows must be included. + /// Use this method when you need to iterate over all visible LogWindows, + /// particularly for operations like: + /// - Saving project/session data + /// - Saving last open files list + /// - Closing all tabs + /// - Applying settings to all windows + /// + /// For most other operations, prefer which + /// returns only explicitly tracked windows. /// - /// Read-only list of all displayed LogWindows in the DockPanel. + /// Read-only list of all LogWindows in the DockPanel. IReadOnlyList GetAllWindowsFromDockPanel (); /// diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs index 5e858dd45..919913887 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs @@ -1,24 +1,21 @@ using System.Runtime.Versioning; +using Vanara.PInvoke; + namespace LogExpert.UI.Services.DetachModeService; /// -/// Win32 subclass for a detached . The DockPanel -/// suite handles a caption double click by docking the window back into the panel (and its public -/// DoubleClickTitleBarToDock switch does not disable that), so the message has to be caught -/// before it reaches the suite: this hook turns a caption double click into a maximize/restore -/// toggle instead. +/// Win32 subclass for a detached : it turns a +/// caption double click into a maximize/restore toggle, because the suite docks the window back on +/// that message. /// /// -/// Subclassing replaces the window procedure, so every message the hook does not intercept is -/// forwarded to the procedure captured before - that is the -/// WinForms procedure which finally reaches the suite's FloatWindow.WndProc. Messages -/// swallowed here never arrive in the suite. +/// Messages the hook does not intercept are forwarded to the procedure captured before +/// . /// [SupportedOSPlatform("windows")] internal sealed class DetachFloatWindowHook : NativeWindow, IDisposable { - private const int GWL_WNDPROC = -4; private const int WM_NCLBUTTONDBLCLK = 0x00A3; private readonly WeifenLuo.WinFormsUI.Docking.FloatWindow _floatWindow; @@ -38,10 +35,10 @@ private DetachFloatWindowHook (WeifenLuo.WinFormsUI.Docking.FloatWindow floatWin } /// - /// Starts watching the caption of . Call this only after every - /// style-changing property (border style, taskbar flag) has been applied: those recreate the - /// window handle, and the hook would be detached by the recreation. + /// Starts watching the caption of . Call this after every + /// style-changing property: those recreate the handle and would detach the hook. /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1303:Do not pass literals as localized parameters", Justification = "Internal invariant message, not user-facing.")] public static DetachFloatWindowHook Attach (WeifenLuo.WinFormsUI.Docking.FloatWindow floatWindow) { ArgumentNullException.ThrowIfNull(floatWindow); @@ -61,13 +58,12 @@ protected override void WndProc (ref Message m) { if (m.Msg == WM_NCLBUTTONDBLCLK) { - // Swallowed on purpose: both the suite (dock back) and plain DefWindowProc (maximize) - // have a fixed idea of what a caption double click means. The controller decides. + // Swallowed on purpose: both the suite and DefWindowProc act on a caption double click. CaptionDoubleClicked?.Invoke(this, EventArgs.Empty); return; } - m.Result = CallWindowProc(_originalProc, m.HWnd, (uint)m.Msg, m.WParam, m.LParam); + m.Result = User32.CallWindowProc(_originalProc, m.HWnd, (uint)m.Msg, m.WParam, m.LParam); } public void Dispose () @@ -90,17 +86,6 @@ public void Dispose () private static IntPtr GetWindowProc (IntPtr handle) { - return IntPtr.Size == 8 - ? GetWindowLongPtr64(handle, GWL_WNDPROC) - : new IntPtr(GetWindowLong32(handle, GWL_WNDPROC)); + return User32.GetWindowLongPtr(handle, User32.WindowLongFlags.GWL_WNDPROC); } - - [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLongPtrW")] - private static extern IntPtr GetWindowLongPtr64 (IntPtr hWnd, int nIndex); - - [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLongW")] - private static extern int GetWindowLong32 (IntPtr hWnd, int nIndex); - - [System.Runtime.InteropServices.DllImport("user32.dll")] - private static extern IntPtr CallWindowProc (IntPtr lpPrevWndFunc, IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); } diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs b/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs index 5b915e523..9b94dd123 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachMessageFilter.cs @@ -1,43 +1,46 @@ using System.Runtime.Versioning; +using LogExpert.UI.Extensions; + namespace LogExpert.UI.Services.DetachModeService; /// -/// Serves the keyboard of detach mode while the main window is hidden. The main form is not in the -/// focus chain then, so its ProcessCmdKey never fires and the keys are taken from the message -/// stream instead: F11 and ESC leave the mode, Ctrl+Tab / Ctrl+Shift+Tab move to the previous or +/// Serves the keyboard of detach mode while the main window is hidden. The main form is not in +/// the focus chain then, so its ProcessCmdKey never fires and the keys are taken from the +/// message stream instead: F11 leaves the mode, Ctrl+Tab / Ctrl+Shift+Tab move to the previous or /// next log window. /// [SupportedOSPlatform("windows")] internal sealed class DetachMessageFilter : IMessageFilter { - private const int WM_KEYDOWN = 0x0100; private const int VK_F11 = 0x7A; - private const int VK_ESCAPE = 0x1B; private const int VK_TAB = 0x09; - /// The lParam bit Windows sets on every WM_KEYDOWN but the first while a key is held. - private const long AUTOREPEAT_FLAG = 1L << 30; - private readonly DetachModeController _controller; + private readonly Func _modifierKeysGetter; + private readonly Func _activeFormGetter; - // Test seams: both read live machine state a unit test cannot control (the keyboard modifiers - // and the input focus), so their source is injectable. Production always uses the defaults. - - internal Func _modifierKeys = static () => Control.ModifierKeys; - - // The detached float window is the active form while the mode lasts, so its active control is - // where the keyboard is. Null when another window holds the focus. - internal Func _isTextInputFocused = static () => Form.ActiveForm?.ActiveControl is TextBoxBase; - - public DetachMessageFilter (DetachModeController controller) + public DetachMessageFilter ( + DetachModeController controller, + Func? modifierKeysGetter = null, + Func? activeFormGetter = null) { + ArgumentNullException.ThrowIfNull(controller); _controller = controller; + _modifierKeysGetter = modifierKeysGetter ?? (() => Control.ModifierKeys); + _activeFormGetter = activeFormGetter ?? (() => Form.ActiveForm); } public bool PreFilterMessage (ref Message m) { - if (m.Msg != WM_KEYDOWN || !_controller.IsActive) + if (m.Msg != NativeMethods.WM_KEYDOWN || !_controller.IsActive) + { + return false; + } + + // Only the detached float owns these keys; a modal dialog on top of it must keep F11 and + // Ctrl+Tab for itself. + if (_activeFormGetter() != _controller.DetachedFloat) { return false; } @@ -46,26 +49,15 @@ public bool PreFilterMessage (ref Message m) { case VK_F11: // Block the whole burst: acting on auto-repeat would flip the mode on every repeat. - if ((m.LParam.ToInt64() & AUTOREPEAT_FLAG) == 0) + if ((m.LParam.ToInt64() & NativeMethods.KEYDOWN_AUTOREPEAT_FLAG) == 0) { _controller.Exit(); } return true; - case VK_ESCAPE: - // The log window uses ESC to cancel a search or clear search highlighting, so leave - // the mode only when the focus is not in a text input. - if (_isTextInputFocused()) - { - return false; - } - - _controller.Exit(); - return true; - - case VK_TAB when _modifierKeys().HasFlag(Keys.Control): - _controller.SwitchWindow(_modifierKeys().HasFlag(Keys.Shift)); + case VK_TAB when _modifierKeysGetter().HasFlag(Keys.Control): + _controller.SwitchWindow(_modifierKeysGetter().HasFlag(Keys.Shift)); return true; default: diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs index 47dede288..8b162b2a8 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs @@ -1,6 +1,7 @@ using System.Runtime.Versioning; using LogExpert.UI.Controls.LogWindow; +using LogExpert.UI.Extensions; using LogExpert.UI.Interface; using WeifenLuo.WinFormsUI.Docking; @@ -8,18 +9,9 @@ namespace LogExpert.UI.Services.DetachModeService; /// -/// Owns detach mode: F11 hides the main window and turns the active log window's float into a -/// stand-alone viewer window; leaving the mode puts the window back where it was and brings the -/// main window back. +/// Owns detach mode: F11 hides the main window and keeps the active log window floating; leaving +/// the mode restores its original place and shows the main window again. /// -/// -/// The detached window stays a regular DockPanel float — no content is moved out of the suite — so -/// layout, session persistence and the close button keep working untouched. Three things are added -/// on top while the mode lasts: the float's owner link to the main form is cut (a hidden owner would -/// hide the float with it, a closing one would take it down), the tool-window chrome is replaced by -/// a normal border with minimize/maximize buttons and a taskbar button, and a caption double click -/// maximizes/restores instead of docking the window back into the panel. -/// [SupportedOSPlatform("windows")] internal sealed class DetachModeController : IDisposable { @@ -32,15 +24,13 @@ internal sealed class DetachModeController : IDisposable private bool _filterInstalled; private bool _disposed; - /// The window currently detached, or null while the mode is off. private LogWindow _detachedWindow; - /// - /// The dock state the detached window came from. Only valid while the mode is on; a window - /// switched away from is put back into this state before the next one is detached, so a single - /// field is enough to restore every window on exit. - /// private DockState _originalDockState = DockState.Unknown; + private DockPane _originalPane; + private int _originalContentIndex; + + private ChromeSnapshot _originalChrome; public DetachModeController (Form mainForm, DockPanel dockPanel, ITabController tabController) { @@ -54,13 +44,10 @@ public DetachModeController (Form mainForm, DockPanel dockPanel, ITabController _messageFilter = new DetachMessageFilter(this); } - /// True while a log window is detached from the main window. public bool IsActive => _detachedWindow != null; - /// - /// Detaches the active log window and hides the main window. Does nothing when no log window is - /// open; returns whether the mode was entered. - /// + public FloatWindow DetachedFloat => _captionHook?.FloatWindow; + public bool Enter () { if (IsActive) @@ -68,8 +55,6 @@ public bool Enter () return true; } - // The DockPanel's own active content is what is really on screen; the shell's current window - // can lag a step behind it during activation. var active = _dockPanel.ActiveContent as LogWindow ?? _tabController.GetActiveWindow(); if (active == null || active.IsDisposed) @@ -83,10 +68,6 @@ public bool Enter () return true; } - /// - /// Ends the mode: the detached window goes back to the dock state it came from and the main - /// window becomes visible again. Safe to call when the detached window is already gone. - /// public void Exit () { if (!IsActive) @@ -95,27 +76,15 @@ public void Exit () } var window = _detachedWindow; - var originalDockState = _originalDockState; _detachedWindow = null; - _originalDockState = DockState.Unknown; ReleaseFloatWindow(); UninstallFilter(); - if (window is { IsDisposed: false } && originalDockState != DockState.Float) - { - window.Show(_dockPanel, ToRestorable(originalDockState)); - } - + RestoreWindow(window); RestoreMainForm(); } - /// - /// Ctrl+Tab while detached: the tab strip is gone with the main window, so switching means - /// replacing which window the detached float shows. The window that was detached returns to its - /// original dock state (inside the hidden main window) and keeps it for the final restore. - /// - /// True to move backwards in the tab order. public void SwitchWindow (bool shiftPressed) { if (!IsActive) @@ -132,19 +101,10 @@ public void SwitchWindow (bool shiftPressed) return; } - if (_detachedWindow is { IsDisposed: false } && _originalDockState != DockState.Float) - { - _detachedWindow.Show(_dockPanel, ToRestorable(_originalDockState)); - } - + RestoreWindow(_detachedWindow); Detach(target); } - /// - /// A window opened while detached (file drop, command line, session) becomes the detached one; - /// the DockPanel has already activated it. - /// - /// The window that was just added. public void OnWindowAdded (LogWindow window) { if (!IsActive || window == null || window.IsDisposed) @@ -152,19 +112,10 @@ public void OnWindowAdded (LogWindow window) return; } - if (_detachedWindow is { IsDisposed: false } && _originalDockState != DockState.Float) - { - _detachedWindow.Show(_dockPanel, ToRestorable(_originalDockState)); - } - + RestoreWindow(_detachedWindow); Detach(window); } - /// - /// Reacts to the detached window being closed through the float's X button: another window takes - /// its place, or — when it was the last one — the mode ends and the main window comes back. - /// - /// The window being disposed. public void OnWindowDisposed (LogWindow window) { if (!IsActive || window != _detachedWindow) @@ -172,48 +123,17 @@ public void OnWindowDisposed (LogWindow window) return; } - _detachedWindow = null; - _originalDockState = DockState.Unknown; - ReleaseFloatWindow(); - - var next = _tabController.GetPlacedWindows() - .FirstOrDefault(candidate => candidate != window && !candidate.IsDisposed); - - if (next == null) - { - UninstallFilter(); - RestoreMainForm(); - return; - } - - // The DockPanel is still tearing the closed window down here; detaching the next window - // would re-enter that teardown. - try - { - _mainForm.BeginInvoke(new Action(() => - { - if (!IsActive && !next.IsDisposed) - { - Detach(next); - } - })); - } - catch (InvalidOperationException) - { - // The main window lost its handle while closing; the shutdown sequence owns the rest. - } + Exit(); } - /// - /// Turns into the detached one: floats it if needed, upgrades its - /// float window to a normal window and hooks the caption double click. - /// private void Detach (LogWindow window) { ReleaseFloatWindow(); - // Captured before Show(): afterwards the window reports Float. + // Snapshot before Show(): the window reports Float afterwards. _originalDockState = window.DockState; + _originalPane = window.DockHandler.Pane; + _originalContentIndex = _originalPane?.Contents.IndexOf(window) ?? -1; if (window.DockState != DockState.Float) { @@ -224,12 +144,13 @@ private void Detach (LogWindow window) if (floatWindow == null) { - // The suite refused to float the window (should not happen for a log window); leaving - // _detachedWindow unset keeps the mode off instead of a half-entered state. + // The suite refused to float the window; stay out of the mode instead of half-entering it. _originalDockState = DockState.Unknown; + _originalPane = null; return; } + _originalChrome = CaptureChrome(floatWindow); PatchFloatWindow(floatWindow); _captionHook = DetachFloatWindowHook.Attach(floatWindow); _captionHook.CaptionDoubleClicked += ToggleMaximize; @@ -237,42 +158,80 @@ private void Detach (LogWindow window) window.Activate(); } - /// - /// Replaces the tool-window chrome with a normal window chrome. All style-affecting properties - /// are set before the caption hook is attached: changing them recreates the window handle. - /// + private void RestoreWindow (LogWindow window) + { + if (window == null || window.IsDisposed) + { + return; + } + + if (_originalDockState == DockState.Float) + { + // Was already floating; only the chrome was patched. + return; + } + + if (_originalPane != null && !_originalPane.IsDisposed && _originalPane.DockState == _originalDockState) + { + // Put it back into its original pane and tab index so split panes and tab order survive. + window.Show(_originalPane, null); + + if (_originalContentIndex >= 0 && _originalContentIndex < _originalPane.Contents.Count) + { + _originalPane.SetContentIndex(window, _originalContentIndex); + } + + return; + } + + // Pane disappeared (split closed, session load): fall back to dock-state-only placement. + window.Show(_dockPanel, ToRestorable(_originalDockState)); + } + private void PatchFloatWindow (FloatWindow floatWindow) { - // The suite's SetText() makes the float share the detached log window's Icon object, and - // the shell replaces that object on every tail refresh while disposing the old one - the - // float then holds a disposed icon, and the handle recreation from the style changes below - // reads it and throws. The main form's icon lives as long as the process, so use it. + // The suite shares the log window's Icon, whose handle is replaced on every tail refresh; + // the main form's icon lives as long as the process. floatWindow.Icon = _mainForm.Icon; - // A float is an owned window of the main form: a hidden owner hides it, a closing owner - // closes it. Detached mode hides the main window, so the ownership is cut for the time - // being. The suite recreates ownership on the next float anyway. + // A float is owned by the main form, which is hidden while detached: cut the ownership. floatWindow.Owner = null; floatWindow.FormBorderStyle = FormBorderStyle.Sizable; floatWindow.MaximizeBox = true; floatWindow.MinimizeBox = true; floatWindow.ShowInTaskbar = true; - // The suite's caption left-button handler would start a dock drag; with end-user docking - // off the caption falls through to the native move-drag and the double click arrives at the - // hook as a normal window's caption message. + // The suite's caption handler would start a dock drag; leave the caption to the native move. floatWindow.AllowEndUserDocking = false; - // .NET 10 applies the dark title bar once, when the window first becomes visible - // (Control.SetVisibleCore). The style changes above recreated the window handle and the - // DWM flag died with the old one, so it has to be set again here (newer WinForms builds - // restore it themselves on handle recreation). + // The style changes above recreated the handle, so the dark title bar flag has to be set again. if (Application.IsDarkModeEnabled && floatWindow.IsHandleCreated) { SetImmersiveDarkTitleBar(floatWindow.Handle, dark: true); } } + private static ChromeSnapshot CaptureChrome (FloatWindow floatWindow) + { + return new ChromeSnapshot( + floatWindow.Owner, + floatWindow.FormBorderStyle, + floatWindow.MaximizeBox, + floatWindow.MinimizeBox, + floatWindow.ShowInTaskbar, + floatWindow.AllowEndUserDocking); + } + + private static void RestoreChrome (FloatWindow floatWindow, ChromeSnapshot chrome) + { + floatWindow.Owner = chrome.Owner; + floatWindow.FormBorderStyle = chrome.FormBorderStyle; + floatWindow.MaximizeBox = chrome.MaximizeBox; + floatWindow.MinimizeBox = chrome.MinimizeBox; + floatWindow.ShowInTaskbar = chrome.ShowInTaskbar; + floatWindow.AllowEndUserDocking = chrome.AllowEndUserDocking; + } + private void ToggleMaximize (object sender, EventArgs e) { if (_captionHook == null || _captionHook.FloatWindow.IsDisposed) @@ -292,9 +251,17 @@ private void ReleaseFloatWindow () return; } + var floatWindow = _captionHook.FloatWindow; + _captionHook.CaptionDoubleClicked -= ToggleMaximize; _captionHook.Dispose(); _captionHook = null; + + // Restore the suite's tool-window chrome (owned border, no taskbar button, end-user docking). + if (floatWindow is { IsDisposed: false }) + { + RestoreChrome(floatWindow, _originalChrome); + } } private void InstallFilter () @@ -341,11 +308,6 @@ private FloatWindow FindFloatWindow (LogWindow content) return null; } - /// - /// Maps a recorded dock state to one - /// accepts. A window recorded while hidden or not yet placed cannot come back that way and lands - /// in the document area instead. - /// private static DockState ToRestorable (DockState state) { return state is DockState.Unknown or DockState.Hidden ? DockState.Document : state; @@ -356,12 +318,9 @@ private static DockState ToRestorable (DockState state) private static void SetImmersiveDarkTitleBar (IntPtr handle, bool dark) { int value = dark ? 1 : 0; - _ = DwmSetWindowAttribute(handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, sizeof(int)); + _ = NativeMethods.DwmSetWindowAttribute(handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, sizeof(int)); } - [System.Runtime.InteropServices.DllImport("dwmapi.dll")] - private static extern int DwmSetWindowAttribute (IntPtr hwnd, int attribute, ref int value, int size); - public void Dispose () { if (_disposed) @@ -386,4 +345,12 @@ public void Dispose () ReleaseFloatWindow(); UninstallFilter(); } + + private readonly record struct ChromeSnapshot ( + Form Owner, + FormBorderStyle FormBorderStyle, + bool MaximizeBox, + bool MinimizeBox, + bool ShowInTaskbar, + bool AllowEndUserDocking); } diff --git a/src/LogExpert.UI/Services/TabControllerService/TabController.cs b/src/LogExpert.UI/Services/TabControllerService/TabController.cs index bd1cc8bd3..8dbb36cd7 100644 --- a/src/LogExpert.UI/Services/TabControllerService/TabController.cs +++ b/src/LogExpert.UI/Services/TabControllerService/TabController.cs @@ -208,18 +208,12 @@ public void CloseAllWindows () } /// - /// Closes every placed window except the specified one. Windows that are not placed in the - /// dock panel yet (see ) are left alone. + /// Closes all windows except the specified one /// /// Window to keep open public void CloseAllExcept (LogWindow window) { - if (window == null) - { - return; - } - - var windowsToClose = GetPlacedWindows() + var windowsToClose = GetAllWindows() .Where(w => w != window) .ToList(); @@ -414,28 +408,6 @@ public IReadOnlyList GetAllWindows () } } - /// - /// Gets all tracked windows that are (or were) placed in the dock panel, in tracking order. - /// A window that a session layout restore has not placed yet reports - /// and is skipped: it cannot be written to a layout, and closing - /// it would abort the restore. - /// - /// - /// Unlike this also returns windows that are currently - /// hidden, which is what a session save and "close other tabs" need when any window is hidden. - /// - /// Read-only list of the placed LogWindows. - public IReadOnlyList GetPlacedWindows () - { - lock (_windowsLock) - { - return _windows.Keys - .Where(window => window.DockState != DockState.Unknown) - .ToList() - .AsReadOnly(); - } - } - /// /// Gets the count of tracked windows /// @@ -531,8 +503,6 @@ protected virtual void Dispose (bool disposing) /// /// Only windows whose pane currently displays them are returned: a window hidden with /// drops out of the enumeration even though its pane still exists. - /// Use when hidden windows have to be included, as in a session - /// save or "close other tabs". /// /// Read-only list of all LogWindows in the DockPanel public IReadOnlyList GetAllWindowsFromDockPanel () From 204c4561436dcc3e0f0e90d209b32d99ef7c1bcc Mon Sep 17 00:00:00 2001 From: mfkeeq <546357529@qq.com> Date: Sat, 24 Oct 2026 15:31:40 +0800 Subject: [PATCH 3/4] Fix detach mode float close and dark title bar Two detach mode regressions: - Closing the detached float through its X left an empty, unclosable tab in the main window. OnWindowDisposed fired while LogWindow.IsDisposed was still false, so Exit() re-showed the closing window into its original pane. The close path no longer calls Exit(): it releases the hook without touching the float chrome, clears the captured placement and shows the main window on the message loop after the suite finished closing, which keeps the document panel empty. - In dark mode a detached float kept a light title bar until it was moved or resized. DWM only repaints the caption on a real move/resize, so the immersive dark flag is applied after the float is shown and a one pixel height nudge forces the repaint. A maximized float only gets the flag because the nudge would overwrite its restore bounds. ApplyDarkTitleBar replaces SetImmersiveDarkTitleBar, Exit keeps restoring chrome for the F11 path, and ClearOriginalPlacement is shared by both exit paths. Tests: 18 DetachModeController tests pass, including a regression test that closing the float leaves no document in the panel; LogExpert.UI and LogExpert build without errors. --- .../Services/DetachModeControllerTests.cs | 26 ++++++ .../DetachModeService/DetachModeController.cs | 93 ++++++++++++++++--- 2 files changed, 105 insertions(+), 14 deletions(-) diff --git a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs index 0cafa009b..a3e332af2 100644 --- a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs @@ -226,6 +226,31 @@ public void OnWindowDisposed_LastWindow_EndsTheModeAndShowsTheMainForm () }); } + [Test] + public void OnWindowDisposed_LastWindow_LeavesNoDocumentInThePanel () + { + // Arrange + AddWindows("only.log"); + var active = _dockPanel.ActiveContent as LogWindow; + + Assert.That(active, Is.Not.Null, "the dock panel should have an active document"); + + _controller.Enter(); + + // Act + active.Dispose(); + _controller.OnWindowDisposed(active); + Application.DoEvents(); + + // Assert + Assert.Multiple(() => + { + Assert.That(_controller.IsActive, Is.False); + Assert.That(_form.Visible, Is.True); + Assert.That(_dockPanel.Contents.Count, Is.EqualTo(0), "closing the float must not leave an empty document tab"); + }); + } + [Test] public void OnWindowDisposed_WithOtherWindows_EndsTheModeAndRestoresMainForm () { @@ -513,6 +538,7 @@ private List AddWindows (params string[] fileNames) foreach (var (window, fileName) in windows.Zip(fileNames)) { + window.CloseButton = true; _tabController.AddWindow(window, fileName); } diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs index 8b162b2a8..eb95b78f4 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs @@ -82,9 +82,29 @@ public void Exit () UninstallFilter(); RestoreWindow(window); + ClearOriginalPlacement(); RestoreMainForm(); } + private void ClearOriginalPlacement () + { + _originalDockState = DockState.Unknown; + _originalPane = null; + _originalContentIndex = -1; + } + + private void RestoreMainFormLater () + { + try + { + _mainForm.BeginInvoke(new Action(RestoreMainForm)); + } + catch (InvalidOperationException) + { + RestoreMainForm(); + } + } + public void SwitchWindow (bool shiftPressed) { if (!IsActive) @@ -123,7 +143,11 @@ public void OnWindowDisposed (LogWindow window) return; } - Exit(); + _detachedWindow = null; + ReleaseFloatWindow(restoreChrome: false); + UninstallFilter(); + ClearOriginalPlacement(); + RestoreMainFormLater(); } private void Detach (LogWindow window) @@ -156,6 +180,7 @@ private void Detach (LogWindow window) _captionHook.CaptionDoubleClicked += ToggleMaximize; _detachedWindow = window; window.Activate(); + RepaintCaptionLater(floatWindow); } private void RestoreWindow (LogWindow window) @@ -205,10 +230,7 @@ private void PatchFloatWindow (FloatWindow floatWindow) floatWindow.AllowEndUserDocking = false; // The style changes above recreated the handle, so the dark title bar flag has to be set again. - if (Application.IsDarkModeEnabled && floatWindow.IsHandleCreated) - { - SetImmersiveDarkTitleBar(floatWindow.Handle, dark: true); - } + ApplyDarkTitleBar(floatWindow); } private static ChromeSnapshot CaptureChrome (FloatWindow floatWindow) @@ -230,6 +252,55 @@ private static void RestoreChrome (FloatWindow floatWindow, ChromeSnapshot chrom floatWindow.MinimizeBox = chrome.MinimizeBox; floatWindow.ShowInTaskbar = chrome.ShowInTaskbar; floatWindow.AllowEndUserDocking = chrome.AllowEndUserDocking; + + ApplyDarkTitleBar(floatWindow); + } + + private static void RepaintCaptionLater (FloatWindow floatWindow) + { + if (floatWindow.IsDisposed) + { + return; + } + + try + { + floatWindow.BeginInvoke(new Action(() => RepaintCaption(floatWindow))); + } + catch (InvalidOperationException) + { + } + } + + private static void RepaintCaption (FloatWindow floatWindow) + { + if (floatWindow.IsDisposed) + { + return; + } + + ApplyDarkTitleBar(floatWindow); + + if (floatWindow.WindowState != FormWindowState.Normal) + { + return; + } + + var bounds = floatWindow.Bounds; + + floatWindow.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height + 1); + floatWindow.SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); + } + + private static void ApplyDarkTitleBar (FloatWindow floatWindow) + { + if (!Application.IsDarkModeEnabled || floatWindow is not { IsHandleCreated: true, IsDisposed: false }) + { + return; + } + + int value = 1; + _ = NativeMethods.DwmSetWindowAttribute(floatWindow.Handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, sizeof(int)); } private void ToggleMaximize (object sender, EventArgs e) @@ -244,7 +315,7 @@ private void ToggleMaximize (object sender, EventArgs e) : FormWindowState.Maximized; } - private void ReleaseFloatWindow () + private void ReleaseFloatWindow (bool restoreChrome = true) { if (_captionHook == null) { @@ -257,9 +328,9 @@ private void ReleaseFloatWindow () _captionHook.Dispose(); _captionHook = null; - // Restore the suite's tool-window chrome (owned border, no taskbar button, end-user docking). - if (floatWindow is { IsDisposed: false }) + if (restoreChrome && floatWindow is { IsDisposed: false }) { + // Restore the suite's tool-window chrome (owned border, no taskbar button, end-user docking). RestoreChrome(floatWindow, _originalChrome); } } @@ -315,12 +386,6 @@ private static DockState ToRestorable (DockState state) private const int DWMWA_USE_IMMERSIVE_DARK_MODE = 20; - private static void SetImmersiveDarkTitleBar (IntPtr handle, bool dark) - { - int value = dark ? 1 : 0; - _ = NativeMethods.DwmSetWindowAttribute(handle, DWMWA_USE_IMMERSIVE_DARK_MODE, ref value, sizeof(int)); - } - public void Dispose () { if (_disposed) From 85ab714ef70b1e75029eeeea05a83d1d27a7ff92 Mon Sep 17 00:00:00 2001 From: mfkeeq <546357529@qq.com> Date: Wed, 28 Oct 2026 12:12:22 +0800 Subject: [PATCH 4/4] Address detach mode review feedback and regenerate resources - Restore the window state and dark title bar when leaving detach mode; show the main form before the float gets its owner back and re-dock before walking the tab order on Ctrl+Tab - Keep the main window visible when the suite cannot float a window - Simplify the caption hook to base.WndProc and drop the unused import - Regenerate Resources.Designer.cs from Resources.resx - Rename logOnlyView members and resources to detachMode --- src/LogExpert.Resources/Resources.Designer.cs | 1876 +++++++++-------- src/LogExpert.Resources/Resources.de.resx | 4 +- src/LogExpert.Resources/Resources.resx | 4 +- src/LogExpert.Resources/Resources.zh-CN.resx | 4 +- .../Services/DetachModeControllerTests.cs | 107 +- .../Services/TabControllerTests.cs | 23 + .../Dialogs/LogTabWindow/LogTabWindow.cs | 18 +- .../LogTabWindow/LogTabWindow.designer.cs | 20 +- .../DetachFloatWindowHook.cs | 17 +- .../DetachModeService/DetachModeController.cs | 94 +- .../TabControllerService/TabController.cs | 86 +- 11 files changed, 1183 insertions(+), 1070 deletions(-) diff --git a/src/LogExpert.Resources/Resources.Designer.cs b/src/LogExpert.Resources/Resources.Designer.cs index 44df92258..ee0a3256d 100644 --- a/src/LogExpert.Resources/Resources.Designer.cs +++ b/src/LogExpert.Resources/Resources.Designer.cs @@ -1,10 +1,10 @@ //------------------------------------------------------------------------------ // -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 // -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 // //------------------------------------------------------------------------------ @@ -13,13 +13,13 @@ namespace LogExpert { /// - /// A strongly-typed resource class, for looking up localized strings, etc. + /// 一个强类型的资源类,用于查找本地化的字符串等。 /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -33,7 +33,7 @@ internal Resources() { } /// - /// Returns the cached ResourceManager instance used by this class. + /// 返回此类使用的缓存的 ResourceManager 实例。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Resources.ResourceManager ResourceManager { @@ -47,8 +47,8 @@ internal Resources() { } /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ internal Resources() { } /// - /// Looks up a localized string similar to Copyright. + /// 查找类似 Copyright 的本地化字符串。 /// public static string AboutBox_UI_Label_Copyright { get { @@ -70,7 +70,7 @@ public static string AboutBox_UI_Label_Copyright { } /// - /// Looks up a localized string similar to Product Name. + /// 查找类似 Product Name 的本地化字符串。 /// public static string AboutBox_UI_Label_ProductName { get { @@ -79,7 +79,7 @@ public static string AboutBox_UI_Label_ProductName { } /// - /// Looks up a localized string similar to Version. + /// 查找类似 Version 的本地化字符串。 /// public static string AboutBox_UI_Label_Version { get { @@ -88,7 +88,7 @@ public static string AboutBox_UI_Label_Version { } /// - /// Looks up a localized string similar to https://github.com/LogExperts/LogExpert. + /// 查找类似 https://github.com/LogExperts/LogExpert 的本地化字符串。 /// public static string AboutBox_UI_LinkLabel_URL { get { @@ -97,7 +97,7 @@ public static string AboutBox_UI_LinkLabel_URL { } /// - /// Looks up a localized string similar to AboutBox. + /// 查找类似 AboutBox 的本地化字符串。 /// public static string AboutBox_UI_Text { get { @@ -106,7 +106,7 @@ public static string AboutBox_UI_Text { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Add { get { @@ -116,7 +116,7 @@ public static System.Drawing.Bitmap Add { } /// - /// Looks up a localized string similar to Show this message only once?. + /// 查找类似 Show this message only once? 的本地化字符串。 /// public static string AllowOnlyOneInstanceErrorDialog_UI_CheckBox_checkBoxIgnoreMessage { get { @@ -125,7 +125,7 @@ public static string AllowOnlyOneInstanceErrorDialog_UI_CheckBox_checkBoxIgnoreM } /// - /// Looks up a localized string similar to Only one instance allowed, uncheck "View Settings => Allow only 1 Instances" to start multiple instances!. + /// 查找类似 Only one instance allowed, uncheck "View Settings => Allow only 1 Instances" to start multiple instances! 的本地化字符串。 /// public static string AllowOnlyOneInstanceErrorDialog_UI_Label_labelErrorText { get { @@ -134,7 +134,7 @@ public static string AllowOnlyOneInstanceErrorDialog_UI_Label_labelErrorText { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Arrow_menu_close { get { @@ -144,7 +144,7 @@ public static System.Drawing.Bitmap Arrow_menu_close { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Arrow_menu_open { get { @@ -154,7 +154,7 @@ public static System.Drawing.Bitmap Arrow_menu_open { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap ArrowDown { get { @@ -164,7 +164,7 @@ public static System.Drawing.Bitmap ArrowDown { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap ArrowLeft { get { @@ -174,7 +174,7 @@ public static System.Drawing.Bitmap ArrowLeft { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap ArrowRight { get { @@ -184,7 +184,7 @@ public static System.Drawing.Bitmap ArrowRight { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap ArrowUp { get { @@ -194,7 +194,7 @@ public static System.Drawing.Bitmap ArrowUp { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Bookmark_add { get { @@ -204,7 +204,7 @@ public static System.Drawing.Bitmap Bookmark_add { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Bookmark_added { get { @@ -214,7 +214,7 @@ public static System.Drawing.Bitmap Bookmark_added { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap bookmark_bubbles { get { @@ -224,7 +224,7 @@ public static System.Drawing.Bitmap bookmark_bubbles { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Bookmark_manager { get { @@ -234,7 +234,7 @@ public static System.Drawing.Bitmap Bookmark_manager { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Bookmark_remove { get { @@ -244,7 +244,7 @@ public static System.Drawing.Bitmap Bookmark_remove { } /// - /// Looks up a localized string similar to Bookmark comment. + /// 查找类似 Bookmark comment 的本地化字符串。 /// public static string BookmarkCommentDlg_UI_Title { get { @@ -253,7 +253,7 @@ public static string BookmarkCommentDlg_UI_Title { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Bookmarks { get { @@ -263,7 +263,7 @@ public static System.Drawing.Bitmap Bookmarks { } /// - /// Looks up a localized string similar to Show comment column. + /// 查找类似 Show comment column 的本地化字符串。 /// public static string BookmarkWindow_UI_CheckBox_ShowCommentColumn { get { @@ -272,7 +272,7 @@ public static string BookmarkWindow_UI_CheckBox_ShowCommentColumn { } /// - /// Looks up a localized string similar to Bookmark Comment. + /// 查找类似 Bookmark Comment 的本地化字符串。 /// public static string BookmarkWindow_UI_DataGridColumn_HeaderText { get { @@ -281,7 +281,7 @@ public static string BookmarkWindow_UI_DataGridColumn_HeaderText { } /// - /// Looks up a localized string similar to Source Highlight Trigger. + /// 查找类似 Source Highlight Trigger 的本地化字符串。 /// public static string BookmarkWindow_UI_DataGridColumn_HeaderTextSource { get { @@ -290,7 +290,7 @@ public static string BookmarkWindow_UI_DataGridColumn_HeaderTextSource { } /// - /// Looks up a localized string similar to Bookmark comment:. + /// 查找类似 Bookmark comment: 的本地化字符串。 /// public static string BookmarkWindow_UI_Label_Comment { get { @@ -299,7 +299,7 @@ public static string BookmarkWindow_UI_Label_Comment { } /// - /// Looks up a localized string similar to Delete bookmarks(s). + /// 查找类似 Delete bookmarks(s) 的本地化字符串。 /// public static string BookmarkWindow_UI_MenuItem_DeleteBookmarks { get { @@ -308,7 +308,7 @@ public static string BookmarkWindow_UI_MenuItem_DeleteBookmarks { } /// - /// Looks up a localized string similar to No bookmarks in current file. + /// 查找类似 No bookmarks in current file 的本地化字符串。 /// public static string BookmarkWindow_UI_NoBookmarksInCurrentFile { get { @@ -317,7 +317,7 @@ public static string BookmarkWindow_UI_NoBookmarksInCurrentFile { } /// - /// Looks up a localized string similar to Really remove bookmark comments for selected lines?. + /// 查找类似 Really remove bookmark comments for selected lines? 的本地化字符串。 /// public static string BookmarkWindow_UI_ReallyRemoveBookmarkCommentsForSelectedLines { get { @@ -326,7 +326,7 @@ public static string BookmarkWindow_UI_ReallyRemoveBookmarkCommentsForSelectedLi } /// - /// Looks up a localized string similar to Auto. + /// 查找类似 Auto 的本地化字符串。 /// public static string BookmarkWindow_UI_SourceHighlightText_Auto { get { @@ -335,7 +335,7 @@ public static string BookmarkWindow_UI_SourceHighlightText_Auto { } /// - /// Looks up a localized string similar to Manual. + /// 查找类似 Manual 的本地化字符串。 /// public static string BookmarkWindow_UI_SourceHighlightText_Manual { get { @@ -344,7 +344,7 @@ public static string BookmarkWindow_UI_SourceHighlightText_Manual { } /// - /// Looks up a localized string similar to Bookmarks. + /// 查找类似 Bookmarks 的本地化字符串。 /// public static string BookmarkWindow_UI_Title { get { @@ -353,7 +353,7 @@ public static string BookmarkWindow_UI_Title { } /// - /// Looks up a localized string similar to Remove comment(s). + /// 查找类似 Remove comment(s) 的本地化字符串。 /// public static string BookmarkWindow_UI_ToolStripMenuItem_RemoveComments { get { @@ -362,7 +362,7 @@ public static string BookmarkWindow_UI_ToolStripMenuItem_RemoveComments { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Check_circle { get { @@ -372,7 +372,7 @@ public static System.Drawing.Bitmap Check_circle { } /// - /// Looks up a localized string similar to Icon file.... + /// 查找类似 Icon file... 的本地化字符串。 /// public static string ChooseIconDialog_UI_Button_ChooseIconFile { get { @@ -381,7 +381,7 @@ public static string ChooseIconDialog_UI_Button_ChooseIconFile { } /// - /// Looks up a localized string similar to Choose Icon. + /// 查找类似 Choose Icon 的本地化字符串。 /// public static string ChooseIconDialog_UI_Text { get { @@ -390,7 +390,7 @@ public static string ChooseIconDialog_UI_Text { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Close { get { @@ -400,7 +400,7 @@ public static System.Drawing.Bitmap Close { } /// - /// Looks up a localized string similar to Custom. + /// 查找类似 Custom 的本地化字符串。 /// public static string ColorComboBox_UI_ColorComboBox_Text_Custom { get { @@ -409,16 +409,16 @@ public static string ColorComboBox_UI_ColorComboBox_Text_Custom { } /// - /// Looks up a localized string similar to Could not create a parsing snapshot for columnizer '{0}'.. + /// 查找类似 Could not create a parsing snapshot for columnizer '{0}'. 的本地化字符串。 /// public static string Columnizer_SnapshotUnavailable { get { return ResourceManager.GetString("Columnizer_SnapshotUnavailable", resourceCulture); } } - + /// - /// Looks up a localized string similar to Timestamp selector. + /// 查找类似 Timestamp selector 的本地化字符串。 /// public static string DateTimeDragControl_UI_ContextMenuStrip_TimestampSelector { get { @@ -427,7 +427,7 @@ public static string DateTimeDragControl_UI_ContextMenuStrip_TimestampSelector { } /// - /// Looks up a localized string similar to Drag horizontal. + /// 查找类似 Drag horizontal 的本地化字符串。 /// public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemHorizontalDrag { get { @@ -436,7 +436,7 @@ public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemHorizonta } /// - /// Looks up a localized string similar to Drag vertical inverted. + /// 查找类似 Drag vertical inverted 的本地化字符串。 /// public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemInvertedDrag { get { @@ -445,7 +445,7 @@ public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemInvertedD } /// - /// Looks up a localized string similar to Drag vertical. + /// 查找类似 Drag vertical 的本地化字符串。 /// public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemVerticalDrag { get { @@ -454,7 +454,7 @@ public static string DateTimeDragControl_UI_ToolStripItem_toolStripItemVerticalD } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Deceased { get { @@ -464,7 +464,7 @@ public static System.Drawing.Bitmap Deceased { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Delete { get { @@ -474,7 +474,7 @@ public static System.Drawing.Bitmap Delete { } /// - /// Looks up a localized string similar to Cannot parse Java stack trace line. + /// 查找类似 Cannot parse Java stack trace line 的本地化字符串。 /// public static string Eminus_UI_CannotParseJavaStackTraceLine { get { @@ -483,7 +483,7 @@ public static string Eminus_UI_CannotParseJavaStackTraceLine { } /// - /// Looks up a localized string similar to {0}Load class in Eclipse. + /// 查找类似 {0}Load class in Eclipse 的本地化字符串。 /// public static string Eminus_UI_GetMenuText_DISABLEDLoadClassInEclipse { get { @@ -492,7 +492,7 @@ public static string Eminus_UI_GetMenuText_DISABLEDLoadClassInEclipse { } /// - /// Looks up a localized string similar to Load class in Eclipse. + /// 查找类似 Load class in Eclipse 的本地化字符串。 /// public static string Eminus_UI_GetMenuText_LoadClassInEclipse { get { @@ -501,7 +501,7 @@ public static string Eminus_UI_GetMenuText_LoadClassInEclipse { } /// - /// Looks up a localized string similar to Enter the host and the port where the Eclipse plugin is listening to. If a password is configured, enter the password too.. + /// 查找类似 Enter the host and the port where the Eclipse plugin is listening to. If a password is configured, enter the password too. 的本地化字符串。 /// public static string EminusConfigDlg_UI_Label_Description { get { @@ -510,7 +510,7 @@ public static string EminusConfigDlg_UI_Label_Description { } /// - /// Looks up a localized string similar to Host. + /// 查找类似 Host 的本地化字符串。 /// public static string EminusConfigDlg_UI_Label_Host { get { @@ -519,7 +519,7 @@ public static string EminusConfigDlg_UI_Label_Host { } /// - /// Looks up a localized string similar to Password. + /// 查找类似 Password 的本地化字符串。 /// public static string EminusConfigDlg_UI_Label_Password { get { @@ -528,7 +528,7 @@ public static string EminusConfigDlg_UI_Label_Password { } /// - /// Looks up a localized string similar to Port. + /// 查找类似 Port 的本地化字符串。 /// public static string EminusConfigDlg_UI_Label_Port { get { @@ -537,7 +537,7 @@ public static string EminusConfigDlg_UI_Label_Port { } /// - /// Looks up a localized string similar to Eclipse Remote Navigation. + /// 查找类似 Eclipse Remote Navigation 的本地化字符串。 /// public static string EminusConfigDlg_UI_Text { get { @@ -546,7 +546,7 @@ public static string EminusConfigDlg_UI_Text { } /// - /// Looks up a localized string similar to Copy to clipboard. + /// 查找类似 Copy to clipboard 的本地化字符串。 /// public static string ExceptionWindow_UI_Button_CopyToClipboard { get { @@ -555,7 +555,7 @@ public static string ExceptionWindow_UI_Button_CopyToClipboard { } /// - /// Looks up a localized string similar to An unhandled error has occurred. Please report to the developer.. + /// 查找类似 An unhandled error has occurred. Please report to the developer. 的本地化字符串。 /// public static string ExceptionWindow_UI_Label_ErrorMessage { get { @@ -564,7 +564,7 @@ public static string ExceptionWindow_UI_Label_ErrorMessage { } /// - /// Looks up a localized string similar to LogExpert Error. + /// 查找类似 LogExpert Error 的本地化字符串。 /// public static string ExceptionWindow_UI_Title { get { @@ -573,7 +573,7 @@ public static string ExceptionWindow_UI_Title { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Exit { get { @@ -583,7 +583,7 @@ public static System.Drawing.Bitmap Exit { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Favorite { get { @@ -593,7 +593,7 @@ public static System.Drawing.Bitmap Favorite { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap File_open { get { @@ -603,7 +603,7 @@ public static System.Drawing.Bitmap File_open { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Filter { get { @@ -613,7 +613,7 @@ public static System.Drawing.Bitmap Filter { } /// - /// Looks up a localized string similar to Exact match. + /// 查找类似 Exact match 的本地化字符串。 /// public static string FilterColumnChooser_UI_CheckBox_ExactMatch { get { @@ -622,7 +622,7 @@ public static string FilterColumnChooser_UI_CheckBox_ExactMatch { } /// - /// Looks up a localized string similar to On empty columns. + /// 查找类似 On empty columns 的本地化字符串。 /// public static string FilterColumnChooser_UI_GroupBox_OnEmptyColumns { get { @@ -631,7 +631,7 @@ public static string FilterColumnChooser_UI_GroupBox_OnEmptyColumns { } /// - /// Looks up a localized string similar to No hit. + /// 查找类似 No hit 的本地化字符串。 /// public static string FilterColumnChooser_UI_RadioButton_NoHit { get { @@ -640,7 +640,7 @@ public static string FilterColumnChooser_UI_RadioButton_NoHit { } /// - /// Looks up a localized string similar to Search hit. + /// 查找类似 Search hit 的本地化字符串。 /// public static string FilterColumnChooser_UI_RadioButton_SearchHit { get { @@ -649,7 +649,7 @@ public static string FilterColumnChooser_UI_RadioButton_SearchHit { } /// - /// Looks up a localized string similar to Use prev content. + /// 查找类似 Use prev content 的本地化字符串。 /// public static string FilterColumnChooser_UI_RadioButton_UsePrevContent { get { @@ -658,7 +658,7 @@ public static string FilterColumnChooser_UI_RadioButton_UsePrevContent { } /// - /// Looks up a localized string similar to Columns. + /// 查找类似 Columns 的本地化字符串。 /// public static string FilterColumnChooser_UI_Title { get { @@ -667,7 +667,7 @@ public static string FilterColumnChooser_UI_Title { } /// - /// Looks up a localized string similar to Choose one ore more columns to restrict the search operations to the selected columns.. + /// 查找类似 Choose one ore more columns to restrict the search operations to the selected columns. 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_ColumnListBox { get { @@ -676,7 +676,7 @@ public static string FilterColumnChooser_UI_ToolTip_ColumnListBox { } /// - /// Looks up a localized string similar to If selected, the search string must match exactly (no substring search). + /// 查找类似 If selected, the search string must match exactly (no substring search) 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_ExactMatch { get { @@ -685,7 +685,7 @@ public static string FilterColumnChooser_UI_ToolTip_ExactMatch { } /// - /// Looks up a localized string similar to No search hit on empty columns. + /// 查找类似 No search hit on empty columns 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_NoHit { get { @@ -694,7 +694,7 @@ public static string FilterColumnChooser_UI_ToolTip_NoHit { } /// - /// Looks up a localized string similar to An empty column will always be a search hit. + /// 查找类似 An empty column will always be a search hit 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_SearchHit { get { @@ -703,7 +703,7 @@ public static string FilterColumnChooser_UI_ToolTip_SearchHit { } /// - /// Looks up a localized string similar to Columns. + /// 查找类似 Columns 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_Title_Columns { get { @@ -712,7 +712,7 @@ public static string FilterColumnChooser_UI_ToolTip_Title_Columns { } /// - /// Looks up a localized string similar to An empty column will be a search hit if the previous non-empty column was a search hit. + /// 查找类似 An empty column will be a search hit if the previous non-empty column was a search hit 的本地化字符串。 /// public static string FilterColumnChooser_UI_ToolTip_UsePrevContent { get { @@ -721,7 +721,7 @@ public static string FilterColumnChooser_UI_ToolTip_UsePrevContent { } /// - /// Looks up a localized string similar to Config.... + /// 查找类似 Config... 的本地化字符串。 /// public static string FilterSelectorForm_UI_Button_Config { get { @@ -730,7 +730,7 @@ public static string FilterSelectorForm_UI_Button_Config { } /// - /// Looks up a localized string similar to Apply to all open files. + /// 查找类似 Apply to all open files 的本地化字符串。 /// public static string FilterSelectorForm_UI_CheckBox_ApplyToAll { get { @@ -739,7 +739,7 @@ public static string FilterSelectorForm_UI_CheckBox_ApplyToAll { } /// - /// Looks up a localized string similar to Choose a columnizer:. + /// 查找类似 Choose a columnizer: 的本地化字符串。 /// public static string FilterSelectorForm_UI_Label_ChooseColumnizer { get { @@ -748,7 +748,7 @@ public static string FilterSelectorForm_UI_Label_ChooseColumnizer { } /// - /// Looks up a localized string similar to Supports timeshift: {0}. + /// 查找类似 Supports timeshift: {0} 的本地化字符串。 /// public static string FilterSelectorForm_UI_Text_SupportsTimeshift_Format { get { @@ -757,7 +757,7 @@ public static string FilterSelectorForm_UI_Text_SupportsTimeshift_Format { } /// - /// Looks up a localized string similar to No. + /// 查找类似 No 的本地化字符串。 /// public static string FilterSelectorForm_UI_Text_SupportsTimeshift_No { get { @@ -766,7 +766,7 @@ public static string FilterSelectorForm_UI_Text_SupportsTimeshift_No { } /// - /// Looks up a localized string similar to Yes. + /// 查找类似 Yes 的本地化字符串。 /// public static string FilterSelectorForm_UI_Text_SupportsTimeshift_Yes { get { @@ -775,7 +775,7 @@ public static string FilterSelectorForm_UI_Text_SupportsTimeshift_Yes { } /// - /// Looks up a localized string similar to Columnizer. + /// 查找类似 Columnizer 的本地化字符串。 /// public static string FilterSelectorForm_UI_Title { get { @@ -784,7 +784,7 @@ public static string FilterSelectorForm_UI_Title { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Folder_open { get { @@ -794,7 +794,7 @@ public static System.Drawing.Bitmap Folder_open { } /// - /// Looks up a localized string similar to Cancel. + /// 查找类似 Cancel 的本地化字符串。 /// public static string FolderDrop_Cancel { get { @@ -803,7 +803,7 @@ public static string FolderDrop_Cancel { } /// - /// Looks up a localized string similar to Directory link skipped (junction or symbolic link).. + /// 查找类似 Directory link skipped (junction or symbolic link). 的本地化字符串。 /// public static string FolderDrop_DirectoryLink { get { @@ -812,7 +812,7 @@ public static string FolderDrop_DirectoryLink { } /// - /// Looks up a localized string similar to Discovering files… Cancel to open nothing.. + /// 查找类似 Discovering files… Cancel to open nothing. 的本地化字符串。 /// public static string FolderDrop_Discovering { get { @@ -821,7 +821,7 @@ public static string FolderDrop_Discovering { } /// - /// Looks up a localized string similar to No eligible files were found. Automatically discovered .lxp and .lxj files are excluded.. + /// 查找类似 No eligible files were found. Automatically discovered .lxp and .lxj files are excluded. 的本地化字符串。 /// public static string FolderDrop_Empty { get { @@ -830,7 +830,7 @@ public static string FolderDrop_Empty { } /// - /// Looks up a localized string similar to Could not prepare the dropped files: {0}. + /// 查找类似 Could not prepare the dropped files: {0} 的本地化字符串。 /// public static string FolderDrop_Failed { get { @@ -839,7 +839,7 @@ public static string FolderDrop_Failed { } /// - /// Looks up a localized string similar to Filter paths:. + /// 查找类似 Filter paths: 的本地化字符串。 /// public static string FolderDrop_Filter { get { @@ -848,7 +848,7 @@ public static string FolderDrop_Filter { } /// - /// Looks up a localized string similar to Select the files to open. No files are selected automatically.. + /// 查找类似 Select the files to open. No files are selected automatically. 的本地化字符串。 /// public static string FolderDrop_Instructions { get { @@ -857,7 +857,7 @@ public static string FolderDrop_Instructions { } /// - /// Looks up a localized string similar to Next. + /// 查找类似 Next 的本地化字符串。 /// public static string FolderDrop_Next { get { @@ -866,7 +866,7 @@ public static string FolderDrop_Next { } /// - /// Looks up a localized string similar to Open selected. + /// 查找类似 Open selected 的本地化字符串。 /// public static string FolderDrop_Open { get { @@ -875,7 +875,7 @@ public static string FolderDrop_Open { } /// - /// Looks up a localized string similar to {0:N0}–{1:N0} of {2:N0} matches. + /// 查找类似 {0:N0}–{1:N0} of {2:N0} matches 的本地化字符串。 /// public static string FolderDrop_Page { get { @@ -884,7 +884,7 @@ public static string FolderDrop_Page { } /// - /// Looks up a localized string similar to Full path. + /// 查找类似 Full path 的本地化字符串。 /// public static string FolderDrop_Path { get { @@ -893,7 +893,7 @@ public static string FolderDrop_Path { } /// - /// Looks up a localized string similar to Previous. + /// 查找类似 Previous 的本地化字符串。 /// public static string FolderDrop_Previous { get { @@ -902,7 +902,7 @@ public static string FolderDrop_Previous { } /// - /// Looks up a localized string similar to Open. + /// 查找类似 Open 的本地化字符串。 /// public static string FolderDrop_Select { get { @@ -911,7 +911,7 @@ public static string FolderDrop_Select { } /// - /// Looks up a localized string similar to Select all matching. + /// 查找类似 Select all matching 的本地化字符串。 /// public static string FolderDrop_SelectAll { get { @@ -920,7 +920,7 @@ public static string FolderDrop_SelectAll { } /// - /// Looks up a localized string similar to Select none. + /// 查找类似 Select none 的本地化字符串。 /// public static string FolderDrop_SelectNone { get { @@ -929,7 +929,7 @@ public static string FolderDrop_SelectNone { } /// - /// Looks up a localized string similar to {0:N0} locations were skipped:. + /// 查找类似 {0:N0} locations were skipped: 的本地化字符串。 /// public static string FolderDrop_Skipped { get { @@ -938,7 +938,7 @@ public static string FolderDrop_Skipped { } /// - /// Looks up a localized string similar to {0:N0} files; {1:N0} matching; {2:N0} selected.. + /// 查找类似 {0:N0} files; {1:N0} matching; {2:N0} selected. 的本地化字符串。 /// public static string FolderDrop_Summary { get { @@ -947,7 +947,7 @@ public static string FolderDrop_Summary { } /// - /// Looks up a localized string similar to Open files from folders. + /// 查找类似 Open files from folders 的本地化字符串。 /// public static string FolderDrop_Title { get { @@ -956,7 +956,7 @@ public static string FolderDrop_Title { } /// - /// Looks up a localized string similar to Line number:. + /// 查找类似 Line number: 的本地化字符串。 /// public static string GotoLineDialog_UI_Label_LineNumber { get { @@ -965,7 +965,7 @@ public static string GotoLineDialog_UI_Label_LineNumber { } /// - /// Looks up a localized string similar to Go to line. + /// 查找类似 Go to line 的本地化字符串。 /// public static string GotoLineDialog_UI_Title { get { @@ -974,7 +974,7 @@ public static string GotoLineDialog_UI_Title { } /// - /// Looks up a localized string similar to Regex value is null or whitespace. + /// 查找类似 Regex value is null or whitespace 的本地化字符串。 /// public static string HighlightDialog_RegexError { get { @@ -983,7 +983,7 @@ public static string HighlightDialog_RegexError { } /// - /// Looks up a localized string similar to Bookmark comment. + /// 查找类似 Bookmark comment 的本地化字符串。 /// public static string HighlightDialog_UI_Button_BookmarkComment { get { @@ -992,7 +992,7 @@ public static string HighlightDialog_UI_Button_BookmarkComment { } /// - /// Looks up a localized string similar to Browse.... + /// 查找类似 Browse... 的本地化字符串。 /// public static string HighlightDialog_UI_Button_BrowseSoundFile { get { @@ -1001,7 +1001,7 @@ public static string HighlightDialog_UI_Button_BrowseSoundFile { } /// - /// Looks up a localized string similar to &Copy. + /// 查找类似 &Copy 的本地化字符串。 /// public static string HighlightDialog_UI_Button_Copy { get { @@ -1010,7 +1010,7 @@ public static string HighlightDialog_UI_Button_Copy { } /// - /// Looks up a localized string similar to Co&py. + /// 查找类似 Co&py 的本地化字符串。 /// public static string HighlightDialog_UI_Button_CopyEntry { get { @@ -1019,7 +1019,7 @@ public static string HighlightDialog_UI_Button_CopyEntry { } /// - /// Looks up a localized string similar to Background color. + /// 查找类似 Background color 的本地化字符串。 /// public static string HighlightDialog_UI_Button_CustomBackColor { get { @@ -1028,7 +1028,7 @@ public static string HighlightDialog_UI_Button_CustomBackColor { } /// - /// Looks up a localized string similar to Foreground color. + /// 查找类似 Foreground color 的本地化字符串。 /// public static string HighlightDialog_UI_Button_CustomForeColor { get { @@ -1037,7 +1037,7 @@ public static string HighlightDialog_UI_Button_CustomForeColor { } /// - /// Looks up a localized string similar to Delete group. + /// 查找类似 Delete group 的本地化字符串。 /// public static string HighlightDialog_UI_Button_DeleteGroup { get { @@ -1046,7 +1046,7 @@ public static string HighlightDialog_UI_Button_DeleteGroup { } /// - /// Looks up a localized string similar to Down. + /// 查找类似 Down 的本地化字符串。 /// public static string HighlightDialog_UI_Button_GroupDown { get { @@ -1055,7 +1055,7 @@ public static string HighlightDialog_UI_Button_GroupDown { } /// - /// Looks up a localized string similar to Up. + /// 查找类似 Up 的本地化字符串。 /// public static string HighlightDialog_UI_Button_GroupUp { get { @@ -1064,7 +1064,7 @@ public static string HighlightDialog_UI_Button_GroupUp { } /// - /// Looks up a localized string similar to New group. + /// 查找类似 New group 的本地化字符串。 /// public static string HighlightDialog_UI_Button_NewGroup { get { @@ -1073,7 +1073,7 @@ public static string HighlightDialog_UI_Button_NewGroup { } /// - /// Looks up a localized string similar to Select.... + /// 查找类似 Select... 的本地化字符串。 /// public static string HighlightDialog_UI_Button_SelectPlugin { get { @@ -1082,7 +1082,124 @@ public static string HighlightDialog_UI_Button_SelectPlugin { } /// - /// Looks up a localized string similar to Change selection highlight color.... + /// 查找类似 Create a new highlight item (opens the editor dialog) 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnAdd { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnAdd", resourceCulture); + } + } + + /// + /// 查找类似 Copy the selected highlight into a new one (opens the editor dialog) 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnCopy { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnCopy", resourceCulture); + } + } + + /// + /// 查找类似 Copy the current highlight group into a new one 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnCopyGroup { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnCopyGroup", resourceCulture); + } + } + + /// + /// 查找类似 Delete the current highlight 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnDelete { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnDelete", resourceCulture); + } + } + + /// + /// 查找类似 Delete the current highlight group 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnDeleteGroup { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnDeleteGroup", resourceCulture); + } + } + + /// + /// 查找类似 Edit the selected highlight in the editor dialog 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnEdit { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnEdit", resourceCulture); + } + } + + /// + /// 查找类似 Export highlight groups 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnExportGroup { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnExportGroup", resourceCulture); + } + } + + /// + /// 查找类似 Import highlight groups 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnImportGroup { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnImportGroup", resourceCulture); + } + } + + /// + /// 查找类似 Move the current highlight one position down 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnMoveDown { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveDown", resourceCulture); + } + } + + /// + /// 查找类似 Move the current highlight group one position down 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnMoveGroupDown { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveGroupDown", resourceCulture); + } + } + + /// + /// 查找类似 Move the current highlight group one position up 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnMoveGroupUp { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveGroupUp", resourceCulture); + } + } + + /// + /// 查找类似 Move the current highlight one position up 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnMoveUp { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveUp", resourceCulture); + } + } + + /// + /// 查找类似 Create a new empty highlight group 的本地化字符串。 + /// + public static string HighlightDialog_UI_Button_ToolTip_btnNewGroup { + get { + return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnNewGroup", resourceCulture); + } + } + + /// + /// 查找类似 Change selection highlight color... 的本地化字符串。 /// public static string HighlightDialog_UI_ChangeSelectionColor { get { @@ -1091,7 +1208,7 @@ public static string HighlightDialog_UI_ChangeSelectionColor { } /// - /// Looks up a localized string similar to Alert on hit. + /// 查找类似 Alert on hit 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_AlertOnHit { get { @@ -1100,7 +1217,7 @@ public static string HighlightDialog_UI_CheckBox_AlertOnHit { } /// - /// Looks up a localized string similar to Bold. + /// 查找类似 Bold 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_Bold { get { @@ -1109,7 +1226,7 @@ public static string HighlightDialog_UI_CheckBox_Bold { } /// - /// Looks up a localized string similar to Set bookmark. + /// 查找类似 Set bookmark 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_Bookmark { get { @@ -1118,7 +1235,7 @@ public static string HighlightDialog_UI_CheckBox_Bookmark { } /// - /// Looks up a localized string similar to Case sensitive. + /// 查找类似 Case sensitive 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_CaseSensitive { get { @@ -1127,7 +1244,7 @@ public static string HighlightDialog_UI_CheckBox_CaseSensitive { } /// - /// Looks up a localized string similar to Don't lit dirty LED. + /// 查找类似 Don't lit dirty LED 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_DontDirtyLed { get { @@ -1136,7 +1253,7 @@ public static string HighlightDialog_UI_CheckBox_DontDirtyLed { } /// - /// Looks up a localized string similar to Hide line. + /// 查找类似 Hide line 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_HideLine { get { @@ -1145,7 +1262,7 @@ public static string HighlightDialog_UI_CheckBox_HideLine { } /// - /// Looks up a localized string similar to No Background. + /// 查找类似 No Background 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_NoBackground { get { @@ -1154,7 +1271,7 @@ public static string HighlightDialog_UI_CheckBox_NoBackground { } /// - /// Looks up a localized string similar to Plugin. + /// 查找类似 Plugin 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_Plugin { get { @@ -1163,7 +1280,7 @@ public static string HighlightDialog_UI_CheckBox_Plugin { } /// - /// Looks up a localized string similar to RegEx. + /// 查找类似 RegEx 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_RegEx { get { @@ -1172,7 +1289,7 @@ public static string HighlightDialog_UI_CheckBox_RegEx { } /// - /// Looks up a localized string similar to Stop Follow Tail. + /// 查找类似 Stop Follow Tail 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_StopTail { get { @@ -1181,7 +1298,7 @@ public static string HighlightDialog_UI_CheckBox_StopTail { } /// - /// Looks up a localized string similar to Word mode. + /// 查找类似 Word mode 的本地化字符串。 /// public static string HighlightDialog_UI_CheckBox_WordMatch { get { @@ -1190,7 +1307,16 @@ public static string HighlightDialog_UI_CheckBox_WordMatch { } /// - /// Looks up a localized string similar to [Default]. + /// 查找类似 Choose a group to create different highlight settings. Type in a name to change the name of a group. 的本地化字符串。 + /// + public static string HighlightDialog_UI_ComboBox_ToolTip_comboBoxGroups { + get { + return ResourceManager.GetString("HighlightDialog_UI_ComboBox_ToolTip_comboBoxGroups", resourceCulture); + } + } + + /// + /// 查找类似 [Default] 的本地化字符串。 /// public static string HighlightDialog_UI_DefaultGroupName { get { @@ -1199,8 +1325,8 @@ public static string HighlightDialog_UI_DefaultGroupName { } /// - /// Looks up a localized string similar to Error during add of entry. - ///{0}. + /// 查找类似 Error during add of entry. + ///{0} 的本地化字符串。 /// public static string HighlightDialog_UI_ErrorDuringAddOfHighLightEntry { get { @@ -1209,7 +1335,7 @@ public static string HighlightDialog_UI_ErrorDuringAddOfHighLightEntry { } /// - /// Looks up a localized string similar to Error during save of entry. {0}. + /// 查找类似 Error during save of entry. {0} 的本地化字符串。 /// public static string HighlightDialog_UI_ErrorDuringSavingOfHighlightEntry { get { @@ -1218,7 +1344,7 @@ public static string HighlightDialog_UI_ErrorDuringSavingOfHighlightEntry { } /// - /// Looks up a localized string similar to Settings (*.json)|*.json|All files (*.*)|*.*. + /// 查找类似 Settings (*.json)|*.json|All files (*.*)|*.* 的本地化字符串。 /// public static string HighlightDialog_UI_Export_Filter { get { @@ -1227,7 +1353,7 @@ public static string HighlightDialog_UI_Export_Filter { } /// - /// Looks up a localized string similar to Actions. + /// 查找类似 Actions 的本地化字符串。 /// public static string HighlightDialog_UI_GroupBox_Actions { get { @@ -1236,7 +1362,7 @@ public static string HighlightDialog_UI_GroupBox_Actions { } /// - /// Looks up a localized string similar to Coloring. + /// 查找类似 Coloring 的本地化字符串。 /// public static string HighlightDialog_UI_GroupBox_Coloring { get { @@ -1245,7 +1371,7 @@ public static string HighlightDialog_UI_GroupBox_Coloring { } /// - /// Looks up a localized string similar to Groups. + /// 查找类似 Groups 的本地化字符串。 /// public static string HighlightDialog_UI_GroupBox_Groups { get { @@ -1254,7 +1380,7 @@ public static string HighlightDialog_UI_GroupBox_Groups { } /// - /// Looks up a localized string similar to Line match criteria. + /// 查找类似 Line match criteria 的本地化字符串。 /// public static string HighlightDialog_UI_GroupBox_LineMatchCriteria { get { @@ -1263,7 +1389,7 @@ public static string HighlightDialog_UI_GroupBox_LineMatchCriteria { } /// - /// Looks up a localized string similar to You can assign groups to file names in the settings.. + /// 查找类似 You can assign groups to file names in the settings. 的本地化字符串。 /// public static string HighlightDialog_UI_Label_AssignNamesToGroups { get { @@ -1272,7 +1398,7 @@ public static string HighlightDialog_UI_Label_AssignNamesToGroups { } /// - /// Looks up a localized string similar to Background color. + /// 查找类似 Background color 的本地化字符串。 /// public static string HighlightDialog_UI_Label_BackgroundColor { get { @@ -1281,7 +1407,7 @@ public static string HighlightDialog_UI_Label_BackgroundColor { } /// - /// Looks up a localized string similar to Cooldown:. + /// 查找类似 Cooldown: 的本地化字符串。 /// public static string HighlightDialog_UI_Label_Cooldown { get { @@ -1290,7 +1416,7 @@ public static string HighlightDialog_UI_Label_Cooldown { } /// - /// Looks up a localized string similar to Foreground color. + /// 查找类似 Foreground color 的本地化字符串。 /// public static string HighlightDialog_UI_Label_ForegroundColor { get { @@ -1299,7 +1425,7 @@ public static string HighlightDialog_UI_Label_ForegroundColor { } /// - /// Looks up a localized string similar to Search string:. + /// 查找类似 Search string: 的本地化字符串。 /// public static string HighlightDialog_UI_Label_SearchString { get { @@ -1308,7 +1434,7 @@ public static string HighlightDialog_UI_Label_SearchString { } /// - /// Looks up a localized string similar to seconds. + /// 查找类似 seconds 的本地化字符串。 /// public static string HighlightDialog_UI_Label_Seconds { get { @@ -1317,7 +1443,7 @@ public static string HighlightDialog_UI_Label_Seconds { } /// - /// Looks up a localized string similar to Sound file:. + /// 查找类似 Sound file: 的本地化字符串。 /// public static string HighlightDialog_UI_Label_SoundFile { get { @@ -1326,7 +1452,7 @@ public static string HighlightDialog_UI_Label_SoundFile { } /// - /// Looks up a localized string similar to New group. + /// 查找类似 New group 的本地化字符串。 /// public static string HighlightDialog_UI_NewGroup_BaseName { get { @@ -1335,7 +1461,7 @@ public static string HighlightDialog_UI_NewGroup_BaseName { } /// - /// Looks up a localized string similar to Audio files (*.wav;*.mp3;*.wma;*.aiff;*.aif)|*.wav;*.mp3;*.wma;*.aiff;*.aif|All files (*.*)|*.*. + /// 查找类似 Audio files (*.wav;*.mp3;*.wma;*.aiff;*.aif)|*.wav;*.mp3;*.wma;*.aiff;*.aif|All files (*.*)|*.* 的本地化字符串。 /// public static string HighlightDialog_UI_OpenFileFilter_Audio { get { @@ -1344,7 +1470,7 @@ public static string HighlightDialog_UI_OpenFileFilter_Audio { } /// - /// Looks up a localized string similar to Outline selected blocks. + /// 查找类似 Outline selected blocks 的本地化字符串。 /// public static string HighlightDialog_UI_OutlineSelectedBlocks { get { @@ -1353,7 +1479,7 @@ public static string HighlightDialog_UI_OutlineSelectedBlocks { } /// - /// Looks up a localized string similar to Use system color. + /// 查找类似 Use system color 的本地化字符串。 /// public static string HighlightDialog_UI_ResetSelectionColor { get { @@ -1362,7 +1488,7 @@ public static string HighlightDialog_UI_ResetSelectionColor { } /// - /// Looks up a localized string similar to Selection highlight (all groups). + /// 查找类似 Selection highlight (all groups) 的本地化字符串。 /// public static string HighlightDialog_UI_SelectionHighlight { get { @@ -1371,7 +1497,7 @@ public static string HighlightDialog_UI_SelectionHighlight { } /// - /// Looks up a localized string similar to Settings could not be imported: {0}. + /// 查找类似 Settings could not be imported: {0} 的本地化字符串。 /// public static string HighlightDialog_UI_SettingsCouldNotBeImported { get { @@ -1380,7 +1506,7 @@ public static string HighlightDialog_UI_SettingsCouldNotBeImported { } /// - /// Looks up a localized string similar to Settings imported. + /// 查找类似 Settings imported 的本地化字符串。 /// public static string HighlightDialog_UI_SettingsImported { get { @@ -1389,7 +1515,7 @@ public static string HighlightDialog_UI_SettingsImported { } /// - /// Looks up a localized string similar to Copy of. + /// 查找类似 Copy of 的本地化字符串。 /// public static string HighlightDialog_UI_Snippet_CopyOf { get { @@ -1398,7 +1524,7 @@ public static string HighlightDialog_UI_Snippet_CopyOf { } /// - /// Looks up a localized string similar to Highlighting and action triggers. + /// 查找类似 Highlighting and action triggers 的本地化字符串。 /// public static string HighlightDialog_UI_Title { get { @@ -1407,7 +1533,7 @@ public static string HighlightDialog_UI_Title { } /// - /// Looks up a localized string similar to Export Settings to file. + /// 查找类似 Export Settings to file 的本地化字符串。 /// public static string HighlightDialog_UI_Title_ExportSettings { get { @@ -1416,7 +1542,7 @@ public static string HighlightDialog_UI_Title_ExportSettings { } /// - /// Looks up a localized string similar to (preview). + /// 查找类似 (preview) 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Preview_Placeholder { get { @@ -1425,7 +1551,7 @@ public static string HighlightEntryEditDialog_UI_Preview_Placeholder { } /// - /// Looks up a localized string similar to Actions. + /// 查找类似 Actions 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Tab_Actions { get { @@ -1434,7 +1560,7 @@ public static string HighlightEntryEditDialog_UI_Tab_Actions { } /// - /// Looks up a localized string similar to Coloring. + /// 查找类似 Coloring 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Tab_Coloring { get { @@ -1443,7 +1569,7 @@ public static string HighlightEntryEditDialog_UI_Tab_Coloring { } /// - /// Looks up a localized string similar to Line Match Criteria. + /// 查找类似 Line Match Criteria 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Tab_LineMatchCriteria { get { @@ -1452,7 +1578,7 @@ public static string HighlightEntryEditDialog_UI_Tab_LineMatchCriteria { } /// - /// Looks up a localized string similar to Add Highlight. + /// 查找类似 Add Highlight 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Title_Add { get { @@ -1461,7 +1587,7 @@ public static string HighlightEntryEditDialog_UI_Title_Add { } /// - /// Looks up a localized string similar to Edit Highlight — "{0}". + /// 查找类似 Edit Highlight — "{0}" 的本地化字符串。 /// public static string HighlightEntryEditDialog_UI_Title_EditFormat { get { @@ -1470,7 +1596,7 @@ public static string HighlightEntryEditDialog_UI_Title_EditFormat { } /// - /// Looks up a localized string similar to Choose file.... + /// 查找类似 Choose file... 的本地化字符串。 /// public static string ImportSettingsDialog_UI_Button_ChooseFile { get { @@ -1479,7 +1605,7 @@ public static string ImportSettingsDialog_UI_Button_ChooseFile { } /// - /// Looks up a localized string similar to Columnizer file masks. + /// 查找类似 Columnizer file masks 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_ColumnizerFileMasks { get { @@ -1488,7 +1614,7 @@ public static string ImportSettingsDialog_UI_CheckBox_ColumnizerFileMasks { } /// - /// Looks up a localized string similar to External tools. + /// 查找类似 External tools 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_ExternalTools { get { @@ -1497,7 +1623,7 @@ public static string ImportSettingsDialog_UI_CheckBox_ExternalTools { } /// - /// Looks up a localized string similar to Highlight file masks. + /// 查找类似 Highlight file masks 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_HighlightFileMasks { get { @@ -1506,7 +1632,7 @@ public static string ImportSettingsDialog_UI_CheckBox_HighlightFileMasks { } /// - /// Looks up a localized string similar to Highlight settings. + /// 查找类似 Highlight settings 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_HighlightSettings { get { @@ -1515,7 +1641,7 @@ public static string ImportSettingsDialog_UI_CheckBox_HighlightSettings { } /// - /// Looks up a localized string similar to Keep existing settings. + /// 查找类似 Keep existing settings 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_KeepExistingSettings { get { @@ -1524,7 +1650,7 @@ public static string ImportSettingsDialog_UI_CheckBox_KeepExistingSettings { } /// - /// Looks up a localized string similar to Other. + /// 查找类似 Other 的本地化字符串。 /// public static string ImportSettingsDialog_UI_CheckBox_Other { get { @@ -1533,7 +1659,7 @@ public static string ImportSettingsDialog_UI_CheckBox_Other { } /// - /// Looks up a localized string similar to Import options. + /// 查找类似 Import options 的本地化字符串。 /// public static string ImportSettingsDialog_UI_GroupBox_ImportOptions { get { @@ -1542,7 +1668,7 @@ public static string ImportSettingsDialog_UI_GroupBox_ImportOptions { } /// - /// Looks up a localized string similar to Settings file to import:. + /// 查找类似 Settings file to import: 的本地化字符串。 /// public static string ImportSettingsDialog_UI_Label_SettingsFileToImport { get { @@ -1551,7 +1677,7 @@ public static string ImportSettingsDialog_UI_Label_SettingsFileToImport { } /// - /// Looks up a localized string similar to Settings (*.json)|*.json|All files (*.*)|*.*. + /// 查找类似 Settings (*.json)|*.json|All files (*.*)|*.* 的本地化字符串。 /// public static string ImportSettingsDialog_UI_OpenFileDialog_Filter { get { @@ -1560,7 +1686,7 @@ public static string ImportSettingsDialog_UI_OpenFileDialog_Filter { } /// - /// Looks up a localized string similar to Load Settings from file. + /// 查找类似 Load Settings from file 的本地化字符串。 /// public static string ImportSettingsDialog_UI_OpenFileDialog_Title { get { @@ -1569,7 +1695,7 @@ public static string ImportSettingsDialog_UI_OpenFileDialog_Title { } /// - /// Looks up a localized string similar to Import Settings. + /// 查找类似 Import Settings 的本地化字符串。 /// public static string ImportSettingsDialog_UI_Title { get { @@ -1578,7 +1704,7 @@ public static string ImportSettingsDialog_UI_Title { } /// - /// Looks up a localized string similar to Keyword action plugin:. + /// 查找类似 Keyword action plugin: 的本地化字符串。 /// public static string KeywordActionDlg_UI_Label_KeywordActionPlugin { get { @@ -1587,7 +1713,7 @@ public static string KeywordActionDlg_UI_Label_KeywordActionPlugin { } /// - /// Looks up a localized string similar to Parameter. + /// 查找类似 Parameter 的本地化字符串。 /// public static string KeywordActionDlg_UI_Label_Parameter { get { @@ -1596,7 +1722,7 @@ public static string KeywordActionDlg_UI_Label_Parameter { } /// - /// Looks up a localized string similar to Keyword Action. + /// 查找类似 Keyword Action 的本地化字符串。 /// public static string KeywordActionDlg_UI_Title { get { @@ -1605,7 +1731,7 @@ public static string KeywordActionDlg_UI_Title { } /// - /// Looks up a localized string similar to Error loading session. The file may be corrupted or inaccessible.. + /// 查找类似 Error loading session. The file may be corrupted or inaccessible. 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_FileMaybeCorruptedOrInaccessible { get { @@ -1614,7 +1740,7 @@ public static string LoadSession_UI_Message_Error_FileMaybeCorruptedOrInaccessib } /// - /// Looks up a localized string similar to Failed to update session file: {0}. + /// 查找类似 Failed to update session file: {0} 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_Message_FailedToUpdateSessionFile { get { @@ -1623,7 +1749,7 @@ public static string LoadSession_UI_Message_Error_Message_FailedToUpdateSessionF } /// - /// Looks up a localized string similar to Session file has been updated with the new file paths.. + /// 查找类似 Session file has been updated with the new file paths. 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_Message_UpdateSessionFile { get { @@ -1632,7 +1758,7 @@ public static string LoadSession_UI_Message_Error_Message_UpdateSessionFile { } /// - /// Looks up a localized string similar to Session Update Failed. + /// 查找类似 Session Update Failed 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_Title_FailedToUpdateSessionFile { get { @@ -1641,7 +1767,7 @@ public static string LoadSession_UI_Message_Error_Title_FailedToUpdateSessionFil } /// - /// Looks up a localized string similar to Session Load Failed. + /// 查找类似 Session Load Failed 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_Title_SessionLoadFailed { get { @@ -1650,7 +1776,7 @@ public static string LoadSession_UI_Message_Error_Title_SessionLoadFailed { } /// - /// Looks up a localized string similar to Session Updated. + /// 查找类似 Session Updated 的本地化字符串。 /// public static string LoadSession_UI_Message_Error_Title_UpdateSessionFile { get { @@ -1659,7 +1785,7 @@ public static string LoadSession_UI_Message_Error_Title_UpdateSessionFile { } /// - /// Looks up a localized string similar to None of the files in this session could be found. The session cannot be loaded.. + /// 查找类似 None of the files in this session could be found. The session cannot be loaded. 的本地化字符串。 /// public static string LoadSession_UI_Message_Message_FilesForSessionCouldNotBeFound { get { @@ -1668,7 +1794,7 @@ public static string LoadSession_UI_Message_Message_FilesForSessionCouldNotBeFou } /// - /// Looks up a localized string similar to Could not begin restart session. Unable to determine file locker.. + /// 查找类似 Could not begin restart session. Unable to determine file locker. 的本地化字符串。 /// public static string Lockfinder_Exception_CouldNotBeginRestartSessionUnableToDetermineFileLocker { get { @@ -1677,7 +1803,7 @@ public static string Lockfinder_Exception_CouldNotBeginRestartSessionUnableToDet } /// - /// Looks up a localized string similar to Could not list processes locking resource. + /// 查找类似 Could not list processes locking resource 的本地化字符串。 /// public static string Lockfinder_Exception_CouldNotListProcessesLockingResource { get { @@ -1686,7 +1812,7 @@ public static string Lockfinder_Exception_CouldNotListProcessesLockingResource { } /// - /// Looks up a localized string similar to Could not list processes locking resource. Failed to get size of result.. + /// 查找类似 Could not list processes locking resource. Failed to get size of result. 的本地化字符串。 /// public static string Lockfinder_Exception_CouldNotListProcessesLockingResourceFailedToGetSizeOfResult { get { @@ -1695,7 +1821,7 @@ public static string Lockfinder_Exception_CouldNotListProcessesLockingResourceFa } /// - /// Looks up a localized string similar to Could not register resource.. + /// 查找类似 Could not register resource. 的本地化字符串。 /// public static string Lockfinder_Exception_CouldNotRegisterResource { get { @@ -1704,7 +1830,7 @@ public static string Lockfinder_Exception_CouldNotRegisterResource { } /// - /// Looks up a localized string similar to No processes are locking the path specified. + /// 查找类似 No processes are locking the path specified 的本地化字符串。 /// public static string Lockfinder_Exception_NoProcessesAreLockingThePathSpecified { get { @@ -1713,7 +1839,7 @@ public static string Lockfinder_Exception_NoProcessesAreLockingThePathSpecified } /// - /// Looks up a localized string similar to RmEndSession: {0}. + /// 查找类似 RmEndSession: {0} 的本地化字符串。 /// public static string Lockfinder_Trace_RmEndSessionNativeMethodsRmEndSessionHandle { get { @@ -1722,7 +1848,7 @@ public static string Lockfinder_Trace_RmEndSessionNativeMethodsRmEndSessionHandl } /// - /// Looks up a localized string similar to Error during value {0}, min {1}, max {2}, visible {3}: {4}. + /// 查找类似 Error during value {0}, min {1}, max {2}, visible {3}: {4} 的本地化字符串。 /// public static string LogExpert_Common_Error_5Parameters_ErrorDuring0Value1Min2Max3Visible45 { get { @@ -1731,7 +1857,7 @@ public static string LogExpert_Common_Error_5Parameters_ErrorDuring0Value1Min2Ma } /// - /// Looks up a localized string similar to Insufficient rights {0}: {1}. + /// 查找类似 Insufficient rights {0}: {1} 的本地化字符串。 /// public static string LogExpert_Common_Error_InsufficientRights_For_Parameter_ErrorMessage { get { @@ -1740,7 +1866,7 @@ public static string LogExpert_Common_Error_InsufficientRights_For_Parameter_Err } /// - /// Looks up a localized string similar to {0} is already initialized. + /// 查找类似 {0} is already initialized 的本地化字符串。 /// public static string LogExpert_Common_Error_Message_ServiceIsAlreadyInitialized { get { @@ -1749,7 +1875,7 @@ public static string LogExpert_Common_Error_Message_ServiceIsAlreadyInitialized } /// - /// Looks up a localized string similar to {0} must be created on UI thread. + /// 查找类似 {0} must be created on UI thread 的本地化字符串。 /// public static string LogExpert_Common_Error_Message_ServiceMustBeCreatedOnUIThread { get { @@ -1758,7 +1884,7 @@ public static string LogExpert_Common_Error_Message_ServiceMustBeCreatedOnUIThre } /// - /// Looks up a localized string similar to {0} not initialized. + /// 查找类似 {0} not initialized 的本地化字符串。 /// public static string LogExpert_Common_Error_Message_ServiceNotInitialized { get { @@ -1767,7 +1893,7 @@ public static string LogExpert_Common_Error_Message_ServiceNotInitialized { } /// - /// Looks up a localized string similar to &Add. + /// 查找类似 &Add 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Add { get { @@ -1776,7 +1902,7 @@ public static string LogExpert_Common_UI_Button_Add { } /// - /// Looks up a localized string similar to A&pply. + /// 查找类似 A&pply 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Apply { get { @@ -1785,7 +1911,7 @@ public static string LogExpert_Common_UI_Button_Apply { } /// - /// Looks up a localized string similar to &Cancel. + /// 查找类似 &Cancel 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Cancel { get { @@ -1794,7 +1920,7 @@ public static string LogExpert_Common_UI_Button_Cancel { } /// - /// Looks up a localized string similar to &Delete. + /// 查找类似 &Delete 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Delete { get { @@ -1803,7 +1929,7 @@ public static string LogExpert_Common_UI_Button_Delete { } /// - /// Looks up a localized string similar to &Edit. + /// 查找类似 &Edit 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Edit { get { @@ -1812,7 +1938,7 @@ public static string LogExpert_Common_UI_Button_Edit { } /// - /// Looks up a localized string similar to Export.... + /// 查找类似 Export... 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Export { get { @@ -1821,7 +1947,7 @@ public static string LogExpert_Common_UI_Button_Export { } /// - /// Looks up a localized string similar to &Help. + /// 查找类似 &Help 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Help { get { @@ -1830,7 +1956,7 @@ public static string LogExpert_Common_UI_Button_Help { } /// - /// Looks up a localized string similar to &Import.... + /// 查找类似 &Import... 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Import { get { @@ -1839,7 +1965,7 @@ public static string LogExpert_Common_UI_Button_Import { } /// - /// Looks up a localized string similar to Down. + /// 查找类似 Down 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_MoveDown { get { @@ -1848,7 +1974,7 @@ public static string LogExpert_Common_UI_Button_MoveDown { } /// - /// Looks up a localized string similar to Up. + /// 查找类似 Up 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_MoveUp { get { @@ -1857,7 +1983,7 @@ public static string LogExpert_Common_UI_Button_MoveUp { } /// - /// Looks up a localized string similar to &OK. + /// 查找类似 &OK 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_OK { get { @@ -1866,7 +1992,7 @@ public static string LogExpert_Common_UI_Button_OK { } /// - /// Looks up a localized string similar to &Save. + /// 查找类似 &Save 的本地化字符串。 /// public static string LogExpert_Common_UI_Button_Save { get { @@ -1875,7 +2001,7 @@ public static string LogExpert_Common_UI_Button_Save { } /// - /// Looks up a localized string similar to Could not copy to the clipboard. It is in use by another application. Please try again.. + /// 查找类似 Could not copy to the clipboard. It is in use by another application. Please try again. 的本地化字符串。 /// public static string LogExpert_Common_UI_Message_ClipboardInUse { get { @@ -1884,7 +2010,7 @@ public static string LogExpert_Common_UI_Message_ClipboardInUse { } /// - /// Looks up a localized string similar to Deserialize. + /// 查找类似 Deserialize 的本地化字符串。 /// public static string LogExpert_Common_UI_Title_Deserialize { get { @@ -1893,7 +2019,7 @@ public static string LogExpert_Common_UI_Title_Deserialize { } /// - /// Looks up a localized string similar to LogExpert Error. + /// 查找类似 LogExpert Error 的本地化字符串。 /// public static string LogExpert_Common_UI_Title_Error { get { @@ -1902,7 +2028,7 @@ public static string LogExpert_Common_UI_Title_Error { } /// - /// Looks up a localized string similar to LogExpert. + /// 查找类似 LogExpert 的本地化字符串。 /// public static string LogExpert_Common_UI_Title_LogExpert { get { @@ -1911,7 +2037,7 @@ public static string LogExpert_Common_UI_Title_LogExpert { } /// - /// Looks up a localized string similar to No column splitting. The whole line is displayed in a single column.. + /// 查找类似 No column splitting. The whole line is displayed in a single column. 的本地化字符串。 /// public static string LogExpert_DefaultLogfileColumnicer_Description { get { @@ -1920,7 +2046,7 @@ public static string LogExpert_DefaultLogfileColumnicer_Description { } /// - /// Looks up a localized string similar to Default (single line). + /// 查找类似 Default (single line) 的本地化字符串。 /// public static string LogExpert_DefaultLogfileColumnicer_Name { get { @@ -1929,7 +2055,7 @@ public static string LogExpert_DefaultLogfileColumnicer_Name { } /// - /// Looks up a localized string similar to Must provide at least one file.. + /// 查找类似 Must provide at least one file. 的本地化字符串。 /// public static string LogfileReader_Error_Message_MustProvideAtLeastOneFile { get { @@ -1938,7 +2064,7 @@ public static string LogfileReader_Error_Message_MustProvideAtLeastOneFile { } /// - /// Looks up a localized string similar to Error in {0}: {1}. + /// 查找类似 Error in {0}: {1} 的本地化字符串。 /// public static string Logger_Error_In_Function { get { @@ -1947,7 +2073,7 @@ public static string Logger_Error_In_Function { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap LogLover { get { @@ -1957,7 +2083,7 @@ public static System.Drawing.Bitmap LogLover { } /// - /// Looks up a localized string similar to LogExpert.chm. + /// 查找类似 LogExpert.chm 的本地化字符串。 /// public static string LogTabWindow_HelpFile { get { @@ -1966,7 +2092,7 @@ public static string LogTabWindow_HelpFile { } /// - /// Looks up a localized string similar to This is a test exception thrown by the GUI thread. + /// 查找类似 This is a test exception thrown by the GUI thread 的本地化字符串。 /// public static string LogTabWindow_OnThrowTestExceptionGUIThread_ThisIsATestExceptionThrownByTheGUIThread { get { @@ -1976,7 +2102,7 @@ public static string LogTabWindow_OnThrowTestExceptionGUIThread_ThisIsATestExcep } /// - /// Looks up a localized string similar to lines. + /// 查找类似 lines 的本地化字符串。 /// public static string LogTabWindow_StatusLineText_lowerCase_Lines { get { @@ -1985,7 +2111,7 @@ public static string LogTabWindow_StatusLineText_lowerCase_Lines { } /// - /// Looks up a localized string similar to Line:. + /// 查找类似 Line: 的本地化字符串。 /// public static string LogTabWindow_StatusLineText_UpperCase_Lines { get { @@ -1994,7 +2120,7 @@ public static string LogTabWindow_StatusLineText_UpperCase_Lines { } /// - /// Looks up a localized string similar to This is a test exception thrown by an async delegate. + /// 查找类似 This is a test exception thrown by an async delegate 的本地化字符串。 /// public static string LogTabWindow_ThrowTestException_ThisIsATestExceptionThrownByAnAsyncDelegate { get { @@ -2003,7 +2129,7 @@ public static string LogTabWindow_ThrowTestException_ThisIsATestExceptionThrownB } /// - /// Looks up a localized string similar to This is a test exception thrown by a background thread. + /// 查找类似 This is a test exception thrown by a background thread 的本地化字符串。 /// public static string LogTabWindow_ThrowTestExceptionThread_ThisIsATestExceptionThrownByABackgroundThread { get { @@ -2013,7 +2139,7 @@ public static string LogTabWindow_ThrowTestExceptionThread_ThisIsATestExceptionT } /// - /// Looks up a localized string similar to Follow tail. + /// 查找类似 Follow tail 的本地化字符串。 /// public static string LogTabWindow_UI_CheckBox_checkBoxFollowTail { get { @@ -2022,7 +2148,7 @@ public static string LogTabWindow_UI_CheckBox_checkBoxFollowTail { } /// - /// Looks up a localized string similar to Follow tail. + /// 查找类似 Follow tail 的本地化字符串。 /// public static string LogTabWindow_UI_CheckBox_Host { get { @@ -2031,7 +2157,7 @@ public static string LogTabWindow_UI_CheckBox_Host { } /// - /// Looks up a localized string similar to host. + /// 查找类似 host 的本地化字符串。 /// public static string LogTabWindow_UI_CheckBox_ToolTip_checkBoxHost { get { @@ -2040,7 +2166,7 @@ public static string LogTabWindow_UI_CheckBox_ToolTip_checkBoxHost { } /// - /// Looks up a localized string similar to L:. + /// 查找类似 L: 的本地化字符串。 /// public static string LogTabWindow_UI_Label_labelCurrentLine { get { @@ -2049,7 +2175,7 @@ public static string LogTabWindow_UI_Label_labelCurrentLine { } /// - /// Looks up a localized string similar to 0. + /// 查找类似 0 的本地化字符串。 /// public static string LogTabWindow_UI_Label_labelLines { get { @@ -2058,7 +2184,7 @@ public static string LogTabWindow_UI_Label_labelLines { } /// - /// Looks up a localized string similar to 0. + /// 查找类似 0 的本地化字符串。 /// public static string LogTabWindow_UI_Label_labelSize { get { @@ -2067,7 +2193,7 @@ public static string LogTabWindow_UI_Label_labelSize { } /// - /// Looks up a localized string similar to Ready. + /// 查找类似 Ready 的本地化字符串。 /// public static string LogTabWindow_UI_Label_labelStatus { get { @@ -2076,7 +2202,7 @@ public static string LogTabWindow_UI_Label_labelStatus { } /// - /// Looks up a localized string similar to ->E. + /// 查找类似 ->E 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_Title_ExternalStartTool_Suffix { get { @@ -2085,7 +2211,7 @@ public static string LogTabWindow_UI_LogWindow_Title_ExternalStartTool_Suffix { } /// - /// Looks up a localized string similar to Clipboard. + /// 查找类似 Clipboard 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_Title_Text_From_Clipboard { get { @@ -2094,7 +2220,7 @@ public static string LogTabWindow_UI_LogWindow_Title_Text_From_Clipboard { } /// - /// Looks up a localized string similar to Pasted on {0}. + /// 查找类似 Pasted on {0} 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_Title_ToolTip_PastedOn { get { @@ -2103,7 +2229,7 @@ public static string LogTabWindow_UI_LogWindow_Title_ToolTip_PastedOn { } /// - /// Looks up a localized string similar to Column restrict. + /// 查找类似 Column restrict 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_Tooltip_ColumnRestrict { get { @@ -2112,7 +2238,7 @@ public static string LogTabWindow_UI_LogWindow_Tooltip_ColumnRestrict { } /// - /// Looks up a localized string similar to Filter: {0} {1}{2}. + /// 查找类似 Filter: {0} {1}{2} 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_ToolTip_Filter { get { @@ -2121,7 +2247,7 @@ public static string LogTabWindow_UI_LogWindow_ToolTip_Filter { } /// - /// Looks up a localized string similar to (Invert match). + /// 查找类似 (Invert match) 的本地化字符串。 /// public static string LogTabWindow_UI_LogWindow_ToolTip_InvertMatch { get { @@ -2130,7 +2256,7 @@ public static string LogTabWindow_UI_LogWindow_ToolTip_InvertMatch { } /// - /// Looks up a localized string similar to Main Menu. + /// 查找类似 Main Menu 的本地化字符串。 /// public static string LogTabWindow_UI_MenuStrip_MainMenu { get { @@ -2139,7 +2265,7 @@ public static string LogTabWindow_UI_MenuStrip_MainMenu { } /// - /// Looks up a localized string similar to menuStrip1. + /// 查找类似 menuStrip1 的本地化字符串。 /// public static string LogTabWindow_UI_MenuStrip_mainMenuStrip { get { @@ -2148,7 +2274,7 @@ public static string LogTabWindow_UI_MenuStrip_mainMenuStrip { } /// - /// Looks up a localized string similar to Sysout for the Tool was configured, but there is no active logfile the Tool will be started without the Sysout Pipe. + /// 查找类似 Sysout for the Tool was configured, but there is no active logfile the Tool will be started without the Sysout Pipe 的本地化字符串。 /// public static string LogTabWindow_UI_Message_NoLogfileWithSysOutPipeToolConfigured { get { @@ -2157,9 +2283,9 @@ public static string LogTabWindow_UI_Message_NoLogfileWithSysOutPipeToolConfigur } /// - /// Looks up a localized string similar to Plugin trust configuration updated. + /// 查找类似 Plugin trust configuration updated. /// - ///Restart LogExpert to apply changes?. + ///Restart LogExpert to apply changes? 的本地化字符串。 /// public static string LogTabWindow_UI_Message_PluginTrustConfigurationUpdate { get { @@ -2168,7 +2294,7 @@ public static string LogTabWindow_UI_Message_PluginTrustConfigurationUpdate { } /// - /// Looks up a localized string similar to LogExpert session {0}. + /// 查找类似 LogExpert session {0} 的本地化字符串。 /// public static string LogTabWindow_UI_Session_Default_Filter { get { @@ -2177,7 +2303,7 @@ public static string LogTabWindow_UI_Session_Default_Filter { } /// - /// Looks up a localized string similar to statusStrip1. + /// 查找类似 statusStrip1 的本地化字符串。 /// public static string LogTabWindow_UI_StatusStrip_StatusStrip { get { @@ -2186,7 +2312,7 @@ public static string LogTabWindow_UI_StatusStrip_StatusStrip { } /// - /// Looks up a localized string similar to Enable MultiFile. + /// 查找类似 Enable MultiFile 的本地化字符串。 /// public static string LogTabWindow_UI_StripMenuItem_multiFileEnabledStripMenuItem { get { @@ -2195,7 +2321,7 @@ public static string LogTabWindow_UI_StripMenuItem_multiFileEnabledStripMenuItem } /// - /// Looks up a localized string similar to Restart Recommended. + /// 查找类似 Restart Recommended 的本地化字符串。 /// public static string LogTabWindow_UI_Title_RestartRecommended { get { @@ -2204,7 +2330,7 @@ public static string LogTabWindow_UI_Title_RestartRecommended { } /// - /// Looks up a localized string similar to Toggle Bookmark. + /// 查找类似 Toggle Bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonBookmark { get { @@ -2213,7 +2339,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonBookmark { } /// - /// Looks up a localized string similar to Show bookmark bubbles. + /// 查找类似 Show bookmark bubbles 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonBubbles { get { @@ -2222,7 +2348,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonBubbles { } /// - /// Looks up a localized string similar to Next Bookmark. + /// 查找类似 Next Bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonDown { get { @@ -2231,7 +2357,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonDown { } /// - /// Looks up a localized string similar to Filter. + /// 查找类似 Filter 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonFilter { get { @@ -2240,7 +2366,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonFilter { } /// - /// Looks up a localized string similar to Open File. + /// 查找类似 Open File 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonOpen { get { @@ -2249,7 +2375,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonOpen { } /// - /// Looks up a localized string similar to Search. + /// 查找类似 Search 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonSearch { get { @@ -2258,7 +2384,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonSearch { } /// - /// Looks up a localized string similar to tail. + /// 查找类似 tail 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonTail { get { @@ -2267,7 +2393,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonTail { } /// - /// Looks up a localized string similar to Previous Bookmark. + /// 查找类似 Previous Bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_toolStripButtonUp { get { @@ -2276,7 +2402,7 @@ public static string LogTabWindow_UI_ToolStripButton_toolStripButtonUp { } /// - /// Looks up a localized string similar to Toggle bookmark. + /// 查找类似 Toggle bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonBookmark { get { @@ -2285,7 +2411,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonBook } /// - /// Looks up a localized string similar to Go to next bookmark. + /// 查找类似 Go to next bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonDown { get { @@ -2294,7 +2420,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonDown } /// - /// Looks up a localized string similar to Filter window. + /// 查找类似 Filter window 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonFilter { get { @@ -2303,7 +2429,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonFilt } /// - /// Looks up a localized string similar to Open file. + /// 查找类似 Open file 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonOpen { get { @@ -2312,7 +2438,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonOpen } /// - /// Looks up a localized string similar to Search. + /// 查找类似 Search 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonSearch { get { @@ -2321,7 +2447,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonSear } /// - /// Looks up a localized string similar to Go to previous bookmark. + /// 查找类似 Go to previous bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonUp { get { @@ -2330,7 +2456,7 @@ public static string LogTabWindow_UI_ToolStripButton_ToolTip_toolStripButtonUp { } /// - /// Looks up a localized string similar to Select the current highlight settings for the log file (right-click to open highlight settings). + /// 查找类似 Select the current highlight settings for the log file (right-click to open highlight settings) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripComboBox_ToolTip_highlightGroupsToolStripComboBox { get { @@ -2339,7 +2465,7 @@ public static string LogTabWindow_UI_ToolStripComboBox_ToolTip_highlightGroupsTo } /// - /// Looks up a localized string similar to toolStripContainer1. + /// 查找类似 toolStripContainer1 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripContainer_toolStripContainer { get { @@ -2348,7 +2474,7 @@ public static string LogTabWindow_UI_ToolStripContainer_toolStripContainer { } /// - /// Looks up a localized string similar to About. + /// 查找类似 About 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_aboutToolStripMenuItem { get { @@ -2357,7 +2483,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_aboutToolStripMenuItem { } /// - /// Looks up a localized string similar to Always on top. + /// 查找类似 Always on top 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_alwaysOnTopToolStripMenuItem { get { @@ -2366,7 +2492,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_alwaysOnTopToolStripMenuI } /// - /// Looks up a localized string similar to Bookmarks. + /// 查找类似 Bookmarks 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_bookmarksToolStripMenuItem { get { @@ -2375,7 +2501,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_bookmarksToolStripMenuIte } /// - /// Looks up a localized string similar to Cell select mode. + /// 查找类似 Cell select mode 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_cellSelectModeToolStripMenuItem { get { @@ -2384,7 +2510,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_cellSelectModeToolStripMe } /// - /// Looks up a localized string similar to Clear recently used. + /// 查找类似 Clear recently used 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_clearFileHistoryToolStripMenuItem { get { @@ -2393,7 +2519,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_clearFileHistoryToolStrip } /// - /// Looks up a localized string similar to Close all tabs. + /// 查找类似 Close all tabs 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_closeAllTabsToolStripMenuItem { get { @@ -2402,7 +2528,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_closeAllTabsToolStripMenu } /// - /// Looks up a localized string similar to Close File. + /// 查找类似 Close File 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_closeFileToolStripMenuItem { get { @@ -2411,7 +2537,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_closeFileToolStripMenuIte } /// - /// Looks up a localized string similar to Close other tabs. + /// 查找类似 Close other tabs 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_closeOtherTabsToolStripMenuItem { get { @@ -2420,7 +2546,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_closeOtherTabsToolStripMe } /// - /// Looks up a localized string similar to Close this tab. + /// 查找类似 Close this tab 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_closeThisTabToolStripMenuItem { get { @@ -2429,7 +2555,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_closeThisTabToolStripMenu } /// - /// Looks up a localized string similar to Column finder. + /// 查找类似 Column finder 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_columnFinderToolStripMenuItem { get { @@ -2438,7 +2564,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_columnFinderToolStripMenu } /// - /// Looks up a localized string similar to Columnizer.... + /// 查找类似 Columnizer... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_columnizerToolStripMenuItem { get { @@ -2447,7 +2573,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_columnizerToolStripMenuIt } /// - /// Looks up a localized string similar to Configure.... + /// 查找类似 Configure... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_configureToolStripMenuItem { get { @@ -2456,7 +2582,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_configureToolStripMenuIte } /// - /// Looks up a localized string similar to Copy to Tab. + /// 查找类似 Copy to Tab 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_copyMarkedLinesIntoNewTabToolStripMenuItem { get { @@ -2465,7 +2591,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_copyMarkedLinesIntoNewTab } /// - /// Looks up a localized string similar to Copy path to clipboard. + /// 查找类似 Copy path to clipboard 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_copyPathToClipboardToolStripMenuItem { get { @@ -2474,7 +2600,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_copyPathToClipboardToolSt } /// - /// Looks up a localized string similar to Debug. + /// 查找类似 Debug 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_debugLogLevelToolStripMenuItem { get { @@ -2483,7 +2609,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_debugLogLevelToolStripMen } /// - /// Looks up a localized string similar to Debug. + /// 查找类似 Debug 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem { get { @@ -2492,7 +2618,16 @@ public static string LogTabWindow_UI_ToolStripMenuItem_debugToolStripMenuItem { } /// - /// Looks up a localized string similar to Disable word highlight mode. + /// 查找类似 Detach Mode 的本地化字符串。 + /// + public static string LogTabWindow_UI_ToolStripMenuItem_detachModeToolStripMenuItem { + get { + return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_detachModeToolStripMenuItem", resourceCulture); + } + } + + /// + /// 查找类似 Disable word highlight mode 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_disableWordHighlightModeToolStripMenuItem { get { @@ -2501,7 +2636,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_disableWordHighlightModeT } /// - /// Looks up a localized string similar to Dump buffer diagnostic. + /// 查找类似 Dump buffer diagnostic 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_dumpBufferDiagnosticToolStripMenuItem { get { @@ -2510,7 +2645,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_dumpBufferDiagnosticToolS } /// - /// Looks up a localized string similar to Dump LogBuffer info. + /// 查找类似 Dump LogBuffer info 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_dumpLogBufferInfoToolStripMenuItem { get { @@ -2519,7 +2654,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_dumpLogBufferInfoToolStri } /// - /// Looks up a localized string similar to Encoding. + /// 查找类似 Encoding 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_encodingToolStripMenuItem { get { @@ -2528,7 +2663,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_encodingToolStripMenuItem } /// - /// Looks up a localized string similar to Exit. + /// 查找类似 Exit 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_exitToolStripMenuItem { get { @@ -2537,7 +2672,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_exitToolStripMenuItem { } /// - /// Looks up a localized string similar to Export bookmarks.... + /// 查找类似 Export bookmarks... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_exportBookmarksToolStripMenuItem { get { @@ -2546,7 +2681,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_exportBookmarksToolStripM } /// - /// Looks up a localized string similar to File. + /// 查找类似 File 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_fileToolStripMenuItem { get { @@ -2555,7 +2690,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_fileToolStripMenuItem { } /// - /// Looks up a localized string similar to Filter. + /// 查找类似 Filter 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_filterToolStripMenuItem { get { @@ -2564,7 +2699,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_filterToolStripMenuItem { } /// - /// Looks up a localized string similar to Find in Explorer. + /// 查找类似 Find in Explorer 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_findInExplorerToolStripMenuItem { get { @@ -2573,7 +2708,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_findInExplorerToolStripMe } /// - /// Looks up a localized string similar to Dump GC info. + /// 查找类似 Dump GC info 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_gCInfoToolStripMenuItem { get { @@ -2582,7 +2717,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_gCInfoToolStripMenuItem { } /// - /// Looks up a localized string similar to Go to line.... + /// 查找类似 Go to line... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_goToLineToolStripMenuItem { get { @@ -2591,7 +2726,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_goToLineToolStripMenuItem } /// - /// Looks up a localized string similar to Help. + /// 查找类似 Help 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_helpToolStripMenuItem { get { @@ -2600,7 +2735,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_helpToolStripMenuItem { } /// - /// Looks up a localized string similar to Hide line column. + /// 查找类似 Hide line column 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_hideLineColumnToolStripMenuItem { get { @@ -2609,7 +2744,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_hideLineColumnToolStripMe } /// - /// Looks up a localized string similar to Highlighting and triggers.... + /// 查找类似 Highlighting and triggers... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_hilightingToolStripMenuItem { get { @@ -2618,7 +2753,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_hilightingToolStripMenuIt } /// - /// Looks up a localized string similar to Info. + /// 查找类似 Info 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_infoToolStripMenuItem { get { @@ -2627,7 +2762,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_infoToolStripMenuItem { } /// - /// Looks up a localized string similar to Jump to next. + /// 查找类似 Jump to next 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_jumpToNextToolStripMenuItem { get { @@ -2636,7 +2771,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_jumpToNextToolStripMenuIt } /// - /// Looks up a localized string similar to Jump to prev. + /// 查找类似 Jump to prev 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_jumpToPrevToolStripMenuItem { get { @@ -2645,7 +2780,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_jumpToPrevToolStripMenuIt } /// - /// Looks up a localized string similar to Last used. + /// 查找类似 Last used 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_lastUsedToolStripMenuItem { get { @@ -2654,25 +2789,16 @@ public static string LogTabWindow_UI_ToolStripMenuItem_lastUsedToolStripMenuItem } /// - /// Looks up a localized string similar to Load session.... + /// 查找类似 Load session... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_loadProjectToolStripMenuItem { get { return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_loadProjectToolStripMenuItem", resourceCulture); } } - - /// - /// Looks up a localized string similar to Detach Mode. - /// - public static string LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem { - get { - return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem", resourceCulture); - } - } /// - /// Looks up a localized string similar to Lock instance. + /// 查找类似 Lock instance 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_lockInstanceToolStripMenuItem { get { @@ -2681,7 +2807,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_lockInstanceToolStripMenu } /// - /// Looks up a localized string similar to Loglevel. + /// 查找类似 Loglevel 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_loglevelToolStripMenuItem { get { @@ -2690,7 +2816,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_loglevelToolStripMenuItem } /// - /// Looks up a localized string similar to File name mask.... + /// 查找类似 File name mask... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_multifileMaskToolStripMenuItem { get { @@ -2699,7 +2825,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_multifileMaskToolStripMen } /// - /// Looks up a localized string similar to MultiFile. + /// 查找类似 MultiFile 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_multiFileToolStripMenuItem { get { @@ -2708,7 +2834,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_multiFileToolStripMenuIte } /// - /// Looks up a localized string similar to New tab from clipboard. + /// 查找类似 New tab from clipboard 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_newFromClipboardToolStripMenuItem { get { @@ -2717,7 +2843,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_newFromClipboardToolStrip } /// - /// Looks up a localized string similar to Open.... + /// 查找类似 Open... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_openToolStripMenuItem { get { @@ -2726,7 +2852,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_openToolStripMenuItem { } /// - /// Looks up a localized string similar to Open URL.... + /// 查找类似 Open URL... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_openURIToolStripMenuItem { get { @@ -2735,7 +2861,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_openURIToolStripMenuItem } /// - /// Looks up a localized string similar to Options. + /// 查找类似 Options 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_optionToolStripMenuItem { get { @@ -2744,7 +2870,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_optionToolStripMenuItem { } /// - /// Looks up a localized string similar to Reload. + /// 查找类似 Reload 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_reloadToolStripMenuItem { get { @@ -2753,7 +2879,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_reloadToolStripMenuItem { } /// - /// Looks up a localized string similar to Run GC. + /// 查找类似 Run GC 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_runGCToolStripMenuItem { get { @@ -2762,7 +2888,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_runGCToolStripMenuItem { } /// - /// Looks up a localized string similar to Save session.... + /// 查找类似 Save session... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_saveProjectToolStripMenuItem { get { @@ -2771,7 +2897,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_saveProjectToolStripMenuI } /// - /// Looks up a localized string similar to Search.... + /// 查找类似 Search... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_searchToolStripMenuItem { get { @@ -2780,7 +2906,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_searchToolStripMenuItem { } /// - /// Looks up a localized string similar to Settings.... + /// 查找类似 Settings... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_settingsToolStripMenuItem { get { @@ -2789,7 +2915,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_settingsToolStripMenuItem } /// - /// Looks up a localized string similar to Bookmark list. + /// 查找类似 Bookmark list 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_showBookmarkListToolStripMenuItem { get { @@ -2798,7 +2924,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_showBookmarkListToolStrip } /// - /// Looks up a localized string similar to Show help. + /// 查找类似 Show help 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_showHelpToolStripMenuItem { get { @@ -2807,7 +2933,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_showHelpToolStripMenuItem } /// - /// Looks up a localized string similar to Tab color.... + /// 查找类似 Tab color... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_tabColorToolStripMenuItem { get { @@ -2816,7 +2942,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_tabColorToolStripMenuItem } /// - /// Looks up a localized string similar to Tab rename.... + /// 查找类似 Tab rename... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_tabRenameToolStripMenuItem { get { @@ -2825,7 +2951,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_tabRenameToolStripMenuIte } /// - /// Looks up a localized string similar to Plugin &Trust Management.... + /// 查找类似 Plugin &Trust Management... 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_Text_PluginTrustManagement { get { @@ -2834,7 +2960,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_Text_PluginTrustManagemen } /// - /// Looks up a localized string similar to Throw exception (background thread). + /// 查找类似 Throw exception (background thread) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionBackgroundThreadToolStripMenuItem { get { @@ -2844,7 +2970,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionBackgroundT } /// - /// Looks up a localized string similar to Throw exception (Async delegate). + /// 查找类似 Throw exception (Async delegate) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionbackgroundThToolStripMenuItem { get { @@ -2853,7 +2979,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionbackgroundT } /// - /// Looks up a localized string similar to Throw exception (GUI Thread). + /// 查找类似 Throw exception (GUI Thread) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionGUIThreadToolStripMenuItem { get { @@ -2862,7 +2988,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_throwExceptionGUIThreadTo } /// - /// Looks up a localized string similar to Timeshift. + /// 查找类似 Timeshift 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_timeshiftToolStripMenuItem { get { @@ -2871,7 +2997,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_timeshiftToolStripMenuIte } /// - /// Looks up a localized string similar to Toggle Bookmark. + /// 查找类似 Toggle Bookmark 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_toggleBookmarkToolStripMenuItem { get { @@ -2880,7 +3006,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_toggleBookmarkToolStripMe } /// - /// Looks up a localized string similar to Tools. + /// 查找类似 Tools 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_toolsToolStripMenuItem { get { @@ -2889,7 +3015,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_toolsToolStripMenuItem { } /// - /// Looks up a localized string similar to Switches between foll row selection and single cell selection mode. + /// 查找类似 Switches between foll row selection and single cell selection mode 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_cellSelectModeToolStripMenuItem { get { @@ -2898,7 +3024,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_cellSelectModeToo } /// - /// Looks up a localized string similar to Close all tabs. + /// 查找类似 Close all tabs 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_closeAllTabsToolStripMenuItem { get { @@ -2907,7 +3033,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_closeAllTabsToolS } /// - /// Looks up a localized string similar to Close all tabs except of this one. + /// 查找类似 Close all tabs except of this one 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_closeOtherTabsToolStripMenuItem { get { @@ -2916,7 +3042,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_closeOtherTabsToo } /// - /// Looks up a localized string similar to Splits various kinds of logfiles into fixed columns. + /// 查找类似 Splits various kinds of logfiles into fixed columns 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_columnizerToolStripMenuItem { get { @@ -2925,7 +3051,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_columnizerToolStr } /// - /// Looks up a localized string similar to Copies all selected lines into a new tab page. + /// 查找类似 Copies all selected lines into a new tab page 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyMarkedLinesIntoNewTabToolStripMenuItem { get { @@ -2935,7 +3061,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyMarkedLinesIn } /// - /// Looks up a localized string similar to The complete file name (incl. path) is copied to clipboard. + /// 查找类似 The complete file name (incl. path) is copied to clipboard 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyPathToClipboardToolStripMenuItem { get { @@ -2944,7 +3070,16 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyPathToClipboa } /// - /// Looks up a localized string similar to Opens an Explorer window and selects the log file. + /// 查找类似 Shows the active log alone in its own window and hides the main window 的本地化字符串。 + /// + public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_detachModeToolStripMenuItem { + get { + return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_detachModeToolStripMenuItem", resourceCulture); + } + } + + /// + /// 查找类似 Opens an Explorer window and selects the log file 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_findInExplorerToolStripMenuItem { get { @@ -2953,7 +3088,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_findInExplorerToo } /// - /// Looks up a localized string similar to Load a saved session (list of log files). + /// 查找类似 Load a saved session (list of log files) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_loadProjectToolStripMenuItem { get { @@ -2962,25 +3097,16 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_loadProjectToolSt } /// - /// Looks up a localized string similar to When enabled all new launched LogExpert instances will redirect to this window. + /// 查找类似 When enabled all new launched LogExpert instances will redirect to this window 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolStripMenuItem { get { return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolStripMenuItem", resourceCulture); } } - - /// - /// Looks up a localized string similar to Shows the active log alone in its own window and hides the main window. - /// - public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem { - get { - return ResourceManager.GetString("LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem", resourceCulture); - } - } /// - /// Looks up a localized string similar to Treat multiple files as one large file (e.g. data.log, data.log.1, data.log.2,...). + /// 查找类似 Treat multiple files as one large file (e.g. data.log, data.log.1, data.log.2,...) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_multiFileToolStripMenuItem { get { @@ -2989,7 +3115,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_multiFileToolStri } /// - /// Looks up a localized string similar to Creates a new tab with content from clipboard. + /// 查找类似 Creates a new tab with content from clipboard 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_newFromClipboardToolStripMenuItem { get { @@ -2998,7 +3124,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_newFromClipboardT } /// - /// Looks up a localized string similar to Opens a file by entering a URL which is supported by a file system plugin. + /// 查找类似 Opens a file by entering a URL which is supported by a file system plugin 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_openURIToolStripMenuItem { get { @@ -3007,7 +3133,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_openURIToolStripM } /// - /// Looks up a localized string similar to Manage trusted plugins and view plugin hashes. + /// 查找类似 Manage trusted plugins and view plugin hashes 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_PluginTrustManagement { get { @@ -3016,7 +3142,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_PluginTrustManage } /// - /// Looks up a localized string similar to Save a session (all open tabs). + /// 查找类似 Save a session (all open tabs) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_saveProjectToolStripMenuItem { get { @@ -3025,7 +3151,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_saveProjectToolSt } /// - /// Looks up a localized string similar to Sets the tab color. + /// 查找类似 Sets the tab color 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_tabColorToolStripMenuItem { get { @@ -3034,7 +3160,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_tabColorToolStrip } /// - /// Looks up a localized string similar to Set the text which is shown on the tab. + /// 查找类似 Set the text which is shown on the tab 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_tabRenameToolStripMenuItem { get { @@ -3043,7 +3169,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_tabRenameToolStri } /// - /// Looks up a localized string similar to If supported by the columnizer, you can set an offset to the displayed log time. + /// 查找类似 If supported by the columnizer, you can set an offset to the displayed log time 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStripMenuItem { get { @@ -3052,7 +3178,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStri } /// - /// Looks up a localized string similar to Time offset (hh:mm:ss.fff). + /// 查找类似 Time offset (hh:mm:ss.fff) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStripTextBox { get { @@ -3061,7 +3187,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStri } /// - /// Looks up a localized string similar to Launch external tools (configure in the settings). + /// 查找类似 Launch external tools (configure in the settings) 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_toolsToolStripMenuItem { get { @@ -3070,7 +3196,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_toolsToolStripMen } /// - /// Looks up a localized string similar to Try to truncate the file opened in tab. + /// 查找类似 Try to truncate the file opened in tab 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_truncateFileToolStripMenuItem { get { @@ -3079,7 +3205,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_ToolTip_truncateFileToolS } /// - /// Looks up a localized string similar to Truncate File. + /// 查找类似 Truncate File 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_truncateFileToolStripMenuItem { get { @@ -3088,7 +3214,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_truncateFileToolStripMenu } /// - /// Looks up a localized string similar to View/Navigate. + /// 查找类似 View/Navigate 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_viewNavigateToolStripMenuItem { get { @@ -3097,7 +3223,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_viewNavigateToolStripMenu } /// - /// Looks up a localized string similar to Warn. + /// 查找类似 Warn 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripMenuItem_warnToolStripMenuItem { get { @@ -3106,7 +3232,7 @@ public static string LogTabWindow_UI_ToolStripMenuItem_warnToolStripMenuItem { } /// - /// Looks up a localized string similar to +00:00:00.000. + /// 查找类似 +00:00:00.000 的本地化字符串。 /// public static string LogTabWindow_UI_ToolStripTextBox_timeshiftToolStripTextBox { get { @@ -3115,7 +3241,7 @@ public static string LogTabWindow_UI_ToolStripTextBox_timeshiftToolStripTextBox } /// - /// Looks up a localized string similar to Columns.... + /// 查找类似 Columns... 的本地化字符串。 /// public static string LogWindow_UI_Button_Column { get { @@ -3124,7 +3250,7 @@ public static string LogWindow_UI_Button_Column { } /// - /// Looks up a localized string similar to Delete. + /// 查找类似 Delete 的本地化字符串。 /// public static string LogWindow_UI_Button_Delete { get { @@ -3133,7 +3259,7 @@ public static string LogWindow_UI_Button_Delete { } /// - /// Looks up a localized string similar to Filter to Tab. + /// 查找类似 Filter to Tab 的本地化字符串。 /// public static string LogWindow_UI_Button_FilterToTab { get { @@ -3142,7 +3268,7 @@ public static string LogWindow_UI_Button_FilterToTab { } /// - /// Looks up a localized string similar to Save filter. + /// 查找类似 Save filter 的本地化字符串。 /// public static string LogWindow_UI_Button_SaveFilter { get { @@ -3151,7 +3277,7 @@ public static string LogWindow_UI_Button_SaveFilter { } /// - /// Looks up a localized string similar to Search. + /// 查找类似 Search 的本地化字符串。 /// public static string LogWindow_UI_Button_Search { get { @@ -3160,7 +3286,7 @@ public static string LogWindow_UI_Button_Search { } /// - /// Looks up a localized string similar to Show advanced.... + /// 查找类似 Show advanced... 的本地化字符串。 /// public static string LogWindow_UI_Button_ShowAdvanced { get { @@ -3169,7 +3295,7 @@ public static string LogWindow_UI_Button_ShowAdvanced { } /// - /// Looks up a localized string similar to Choose columns for 'Column restrict'. + /// 查找类似 Choose columns for 'Column restrict' 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_Column { get { @@ -3178,7 +3304,7 @@ public static string LogWindow_UI_Button_ToolTip_Column { } /// - /// Looks up a localized string similar to Move the selected entry down in the list. + /// 查找类似 Move the selected entry down in the list 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_FilterDown { get { @@ -3187,7 +3313,7 @@ public static string LogWindow_UI_Button_ToolTip_FilterDown { } /// - /// Looks up a localized string similar to Launch a new tab with filtered content. + /// 查找类似 Launch a new tab with filtered content 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_FilterToTab { get { @@ -3196,7 +3322,7 @@ public static string LogWindow_UI_Button_ToolTip_FilterToTab { } /// - /// Looks up a localized string similar to Move the selected entry up in the list. + /// 查找类似 Move the selected entry up in the list 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_FilterUp { get { @@ -3205,7 +3331,7 @@ public static string LogWindow_UI_Button_ToolTip_FilterUp { } /// - /// Looks up a localized string similar to Start the filter search. + /// 查找类似 Start the filter search 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_Search { get { @@ -3214,7 +3340,7 @@ public static string LogWindow_UI_Button_ToolTip_Search { } /// - /// Looks up a localized string similar to Toggel the advanced filter options panel. + /// 查找类似 Toggel the advanced filter options panel 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_ShowAdvanced { get { @@ -3223,7 +3349,7 @@ public static string LogWindow_UI_Button_ToolTip_ShowAdvanced { } /// - /// Looks up a localized string similar to Open or close a list with saved filters. + /// 查找类似 Open or close a list with saved filters 的本地化字符串。 /// public static string LogWindow_UI_Button_ToolTip_ToggleHighlightPanel { get { @@ -3232,7 +3358,7 @@ public static string LogWindow_UI_Button_ToolTip_ToggleHighlightPanel { } /// - /// Looks up a localized string similar to Auto hide. + /// 查找类似 Auto hide 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_AutoHide { get { @@ -3241,7 +3367,7 @@ public static string LogWindow_UI_CheckBox_AutoHide { } /// - /// Looks up a localized string similar to Column restrict. + /// 查找类似 Column restrict 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ColumnRestrict { get { @@ -3250,7 +3376,7 @@ public static string LogWindow_UI_CheckBox_ColumnRestrict { } /// - /// Looks up a localized string similar to Case sensitive. + /// 查找类似 Case sensitive 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_FilterCaseSensitive { get { @@ -3259,7 +3385,7 @@ public static string LogWindow_UI_CheckBox_FilterCaseSensitive { } /// - /// Looks up a localized string similar to Auto start. + /// 查找类似 Auto start 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_FilterOnLoad { get { @@ -3268,7 +3394,7 @@ public static string LogWindow_UI_CheckBox_FilterOnLoad { } /// - /// Looks up a localized string similar to Regex. + /// 查找类似 Regex 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_FilterRegex { get { @@ -3277,7 +3403,7 @@ public static string LogWindow_UI_CheckBox_FilterRegex { } /// - /// Looks up a localized string similar to Sync. + /// 查找类似 Sync 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_FilterSync { get { @@ -3286,7 +3412,7 @@ public static string LogWindow_UI_CheckBox_FilterSync { } /// - /// Looks up a localized string similar to Filter tail. + /// 查找类似 Filter tail 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_FilterTail { get { @@ -3295,7 +3421,7 @@ public static string LogWindow_UI_CheckBox_FilterTail { } /// - /// Looks up a localized string similar to Invert Match. + /// 查找类似 Invert Match 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_InvertMatch { get { @@ -3304,7 +3430,7 @@ public static string LogWindow_UI_CheckBox_InvertMatch { } /// - /// Looks up a localized string similar to Range search. + /// 查找类似 Range search 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_RangeSearch { get { @@ -3313,7 +3439,7 @@ public static string LogWindow_UI_CheckBox_RangeSearch { } /// - /// Looks up a localized string similar to Show hidden lines. + /// 查找类似 Show hidden lines 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ShowHiddenLines { get { @@ -3322,7 +3448,7 @@ public static string LogWindow_UI_CheckBox_ShowHiddenLines { } /// - /// Looks up a localized string similar to Hides the filter list after loading a filter. + /// 查找类似 Hides the filter list after loading a filter 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_AutoHide { get { @@ -3331,7 +3457,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_AutoHide { } /// - /// Looks up a localized string similar to Restrict search to columns. + /// 查找类似 Restrict search to columns 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_ColumnRestrict { get { @@ -3340,7 +3466,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_ColumnRestrict { } /// - /// Looks up a localized string similar to Makes the filter case sensitive. + /// 查找类似 Makes the filter case sensitive 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_FilterCaseSensitive { get { @@ -3349,7 +3475,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_FilterCaseSensitive { } /// - /// Looks up a localized string similar to Start immediate filtering after loading a saved filter. + /// 查找类似 Start immediate filtering after loading a saved filter 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_FilterOnLoad { get { @@ -3358,7 +3484,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_FilterOnLoad { } /// - /// Looks up a localized string similar to Use regular expressions. (right-click for RegEx helper window). + /// 查找类似 Use regular expressions. (right-click for RegEx helper window) 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_FilterRegex { get { @@ -3367,7 +3493,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_FilterRegex { } /// - /// Looks up a localized string similar to Sync the current selected line in the filter view to the selection in the log file view. + /// 查找类似 Sync the current selected line in the filter view to the selection in the log file view 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_FilterSync { get { @@ -3376,7 +3502,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_FilterSync { } /// - /// Looks up a localized string similar to Filter tailed file content (keeps filter view up to date on file changes). + /// 查找类似 Filter tailed file content (keeps filter view up to date on file changes) 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_FilterTail { get { @@ -3385,7 +3511,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_FilterTail { } /// - /// Looks up a localized string similar to Invert the search result. + /// 查找类似 Invert the search result 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_InvertMatch { get { @@ -3394,7 +3520,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_InvertMatch { } /// - /// Looks up a localized string similar to Enable a special search mode which filters all content between the 2 given search terms.. + /// 查找类似 Enable a special search mode which filters all content between the 2 given search terms. 的本地化字符串。 /// public static string LogWindow_UI_CheckBox_ToolTip_RangeSearch { get { @@ -3403,7 +3529,7 @@ public static string LogWindow_UI_CheckBox_ToolTip_RangeSearch { } /// - /// Looks up a localized string similar to Select column to scroll to. + /// 查找类似 Select column to scroll to 的本地化字符串。 /// public static string LogWindow_UI_ColumnComboBox_ToolTip { get { @@ -3412,7 +3538,7 @@ public static string LogWindow_UI_ColumnComboBox_ToolTip { } /// - /// Looks up a localized string similar to Search string for the filter. + /// 查找类似 Search string for the filter 的本地化字符串。 /// public static string LogWindow_UI_ComboBox_ToolTip_Filter { get { @@ -3421,7 +3547,7 @@ public static string LogWindow_UI_ComboBox_ToolTip_Filter { } /// - /// Looks up a localized string similar to 2nd search string ('end string') when using the range search. + /// 查找类似 2nd search string ('end string') when using the range search 的本地化字符串。 /// public static string LogWindow_UI_ComboBox_ToolTip_FilterRange { get { @@ -3430,7 +3556,7 @@ public static string LogWindow_UI_ComboBox_ToolTip_FilterRange { } /// - /// Looks up a localized string similar to 0. + /// 查找类似 0 的本地化字符串。 /// public static string LogWindow_UI_Common_ZeroValue { get { @@ -3439,7 +3565,7 @@ public static string LogWindow_UI_Common_ZeroValue { } /// - /// Looks up a localized string similar to {0}->Clip. + /// 查找类似 {0}->Clip 的本地化字符串。 /// public static string LogWindow_UI_CopyMarkedLinesToTab_Clip { get { @@ -3448,7 +3574,7 @@ public static string LogWindow_UI_CopyMarkedLinesToTab_Clip { } /// - /// Looks up a localized string similar to {0}->C. + /// 查找类似 {0}->C 的本地化字符串。 /// public static string LogWindow_UI_CopyMarkedLinesToTab_Copy { get { @@ -3457,7 +3583,7 @@ public static string LogWindow_UI_CopyMarkedLinesToTab_Copy { } /// - /// Looks up a localized string similar to Error occured while clearing filter list: {0}. + /// 查找类似 Error occured while clearing filter list: {0} 的本地化字符串。 /// public static string LogWindow_UI_Error_ClearFilterList_WhileClearingFilterList { get { @@ -3466,7 +3592,7 @@ public static string LogWindow_UI_Error_ClearFilterList_WhileClearingFilterList } /// - /// Looks up a localized string similar to Error while exporting bookmark list: {0}. + /// 查找类似 Error while exporting bookmark list: {0} 的本地化字符串。 /// public static string LogWindow_UI_ErrorWhileExportingBookmarkList { get { @@ -3475,7 +3601,7 @@ public static string LogWindow_UI_ErrorWhileExportingBookmarkList { } /// - /// Looks up a localized string similar to Error while importing bookmark list: {0}. + /// 查找类似 Error while importing bookmark list: {0} 的本地化字符串。 /// public static string LogWindow_UI_ErrorWhileImportingBookmarkList { get { @@ -3484,9 +3610,9 @@ public static string LogWindow_UI_ErrorWhileImportingBookmarkList { } /// - /// Looks up a localized string similar to Exception while filtering. Please report to developer: + /// 查找类似 Exception while filtering. Please report to developer: ///{0} - ///{1}. + ///{1} 的本地化字符串。 /// public static string LogWindow_UI_Filter_ExceptionWhileFiltering { get { @@ -3495,7 +3621,7 @@ public static string LogWindow_UI_Filter_ExceptionWhileFiltering { } /// - /// Looks up a localized string similar to CSV file (*.csv)|*.csv|Bookmark file (*.bmk)|*.bmk. + /// 查找类似 CSV file (*.csv)|*.csv|Bookmark file (*.bmk)|*.bmk 的本地化字符串。 /// public static string LogWindow_UI_ImportExportBookmarkList_Filter { get { @@ -3504,7 +3630,7 @@ public static string LogWindow_UI_ImportExportBookmarkList_Filter { } /// - /// Looks up a localized string similar to Add preceding lines to search result (Drag up/down, press Shift for finer pitch). + /// 查找类似 Add preceding lines to search result (Drag up/down, press Shift for finer pitch) 的本地化字符串。 /// public static string LogWindow_UI_KnobControl_FilterBackSpread { get { @@ -3513,7 +3639,7 @@ public static string LogWindow_UI_KnobControl_FilterBackSpread { } /// - /// Looks up a localized string similar to Add following lines to search result (Drag up/down, press Shift for finer pitch). + /// 查找类似 Add following lines to search result (Drag up/down, press Shift for finer pitch) 的本地化字符串。 /// public static string LogWindow_UI_KnobControl_FilterForeSpread { get { @@ -3522,7 +3648,7 @@ public static string LogWindow_UI_KnobControl_FilterForeSpread { } /// - /// Looks up a localized string similar to Fuzzy search level (0 = fuzzy off). + /// 查找类似 Fuzzy search level (0 = fuzzy off) 的本地化字符串。 /// public static string LogWindow_UI_KnobControl_Fuzzy { get { @@ -3531,7 +3657,7 @@ public static string LogWindow_UI_KnobControl_Fuzzy { } /// - /// Looks up a localized string similar to Back Spread. + /// 查找类似 Back Spread 的本地化字符串。 /// public static string LogWindow_UI_Label_BackSpread { get { @@ -3540,7 +3666,7 @@ public static string LogWindow_UI_Label_BackSpread { } /// - /// Looks up a localized string similar to Column name:. + /// 查找类似 Column name: 的本地化字符串。 /// public static string LogWindow_UI_Label_ColumnName { get { @@ -3549,7 +3675,7 @@ public static string LogWindow_UI_Label_ColumnName { } /// - /// Looks up a localized string similar to column names. + /// 查找类似 column names 的本地化字符串。 /// public static string LogWindow_UI_Label_ColumnNames { get { @@ -3558,7 +3684,7 @@ public static string LogWindow_UI_Label_ColumnNames { } /// - /// Looks up a localized string similar to Fore Spread. + /// 查找类似 Fore Spread 的本地化字符串。 /// public static string LogWindow_UI_Label_ForeSpread { get { @@ -3567,7 +3693,7 @@ public static string LogWindow_UI_Label_ForeSpread { } /// - /// Looks up a localized string similar to Fuzzyness. + /// 查找类似 Fuzzyness 的本地化字符串。 /// public static string LogWindow_UI_Label_Fuzzyness { get { @@ -3576,7 +3702,7 @@ public static string LogWindow_UI_Label_Fuzzyness { } /// - /// Looks up a localized string similar to {0:N0} lines hidden by highlight rules. + /// 查找类似 {0:N0} lines hidden by highlight rules 的本地化字符串。 /// public static string LogWindow_UI_Label_HiddenLines { get { @@ -3585,7 +3711,7 @@ public static string LogWindow_UI_Label_HiddenLines { } /// - /// Looks up a localized string similar to Text &filter:. + /// 查找类似 Text &filter: 的本地化字符串。 /// public static string LogWindow_UI_Label_TextFilter { get { @@ -3594,7 +3720,7 @@ public static string LogWindow_UI_Label_TextFilter { } /// - /// Looks up a localized string similar to Doubleclick to load a saved filter. + /// 查找类似 Doubleclick to load a saved filter 的本地化字符串。 /// public static string LogWindow_UI_ListBox_ToolTip_Filter { get { @@ -3603,8 +3729,8 @@ public static string LogWindow_UI_ListBox_ToolTip_Filter { } /// - /// Looks up a localized string similar to Cannot load file - ///{0}. + /// 查找类似 Cannot load file + ///{0} 的本地化字符串。 /// public static string LogWindow_UI_LoadFile_CannotLoadFile { get { @@ -3613,7 +3739,7 @@ public static string LogWindow_UI_LoadFile_CannotLoadFile { } /// - /// Looks up a localized string similar to Unexpected error while saving persistence: {0}. + /// 查找类似 Unexpected error while saving persistence: {0} 的本地化字符串。 /// public static string LogWindow_UI_SavePersistenceData_ErrorWhileSaving { get { @@ -3622,7 +3748,7 @@ public static string LogWindow_UI_SavePersistenceData_ErrorWhileSaving { } /// - /// Looks up a localized string similar to Search result not found. + /// 查找类似 Search result not found 的本地化字符串。 /// public static string LogWindow_UI_SelectLine_SearchResultNotFound { get { @@ -3631,7 +3757,7 @@ public static string LogWindow_UI_SelectLine_SearchResultNotFound { } /// - /// Looks up a localized string similar to Filter failed: {0}. + /// 查找类似 Filter failed: {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_FilterFailed { get { @@ -3640,7 +3766,7 @@ public static string LogWindow_UI_StatusLineError_FilterFailed { } /// - /// Looks up a localized string similar to Hide rules could not be applied, all lines are shown: {0}. + /// 查找类似 Hide rules could not be applied, all lines are shown: {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_HideRulesFailed { get { @@ -3649,7 +3775,7 @@ public static string LogWindow_UI_StatusLineError_HideRulesFailed { } /// - /// Looks up a localized string similar to Invalid regular expression. + /// 查找类似 Invalid regular expression 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_InvalidRegularExpression { get { @@ -3658,7 +3784,7 @@ public static string LogWindow_UI_StatusLineError_InvalidRegularExpression { } /// - /// Looks up a localized string similar to Not found: {0}. + /// 查找类似 Not found: {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_NotFound { get { @@ -3667,7 +3793,7 @@ public static string LogWindow_UI_StatusLineError_NotFound { } /// - /// Looks up a localized string similar to Started from beginning of file. + /// 查找类似 Started from beginning of file 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_StartedFromBeginningOfFile { get { @@ -3676,7 +3802,7 @@ public static string LogWindow_UI_StatusLineError_StartedFromBeginningOfFile { } /// - /// Looks up a localized string similar to Started from end of file. + /// 查找类似 Started from end of file 的本地化字符串。 /// public static string LogWindow_UI_StatusLineError_StartedFromEndOfFile { get { @@ -3685,7 +3811,7 @@ public static string LogWindow_UI_StatusLineError_StartedFromEndOfFile { } /// - /// Looks up a localized string similar to File not found. + /// 查找类似 File not found 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_FileNotFound { get { @@ -3694,7 +3820,7 @@ public static string LogWindow_UI_StatusLineText_FileNotFound { } /// - /// Looks up a localized string similar to Filter duration: {0} ms.. + /// 查找类似 Filter duration: {0} ms. 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_Filter_FilterDurationMs { get { @@ -3703,7 +3829,7 @@ public static string LogWindow_UI_StatusLineText_Filter_FilterDurationMs { } /// - /// Looks up a localized string similar to Filtering... Press ESC to cancel.. + /// 查找类似 Filtering... Press ESC to cancel. 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_FilterSearch_Filtering { get { @@ -3712,7 +3838,7 @@ public static string LogWindow_UI_StatusLineText_FilterSearch_Filtering { } /// - /// Looks up a localized string similar to Scanning bookmarks.... + /// 查找类似 Scanning bookmarks... 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_ScanningBookmarks { get { @@ -3721,7 +3847,7 @@ public static string LogWindow_UI_StatusLineText_ScanningBookmarks { } /// - /// Looks up a localized string similar to Scanning bookmarks finished / canceled!. + /// 查找类似 Scanning bookmarks finished / canceled! 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_ScanningBookmarksEnded { get { @@ -3730,7 +3856,7 @@ public static string LogWindow_UI_StatusLineText_ScanningBookmarksEnded { } /// - /// Looks up a localized string similar to Scanning bookmarks... {0}%. + /// 查找类似 Scanning bookmarks... {0}% 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_ScanningBookmarksPct { get { @@ -3739,7 +3865,7 @@ public static string LogWindow_UI_StatusLineText_ScanningBookmarksPct { } /// - /// Looks up a localized string similar to Searching... Press ESC to cancel.. + /// 查找类似 Searching... Press ESC to cancel. 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_SearchingPressESCToCancel { get { @@ -3748,7 +3874,7 @@ public static string LogWindow_UI_StatusLineText_SearchingPressESCToCancel { } /// - /// Looks up a localized string similar to {0} selected lines. + /// 查找类似 {0} selected lines 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_SelCountSelectedLines { get { @@ -3757,7 +3883,7 @@ public static string LogWindow_UI_StatusLineText_SelCountSelectedLines { } /// - /// Looks up a localized string similar to Time diff is {0}. + /// 查找类似 Time diff is {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_TimeDiff { get { @@ -3766,7 +3892,7 @@ public static string LogWindow_UI_StatusLineText_TimeDiff { } /// - /// Looks up a localized string similar to Truncate failed: file is locked by {0}. + /// 查找类似 Truncate failed: file is locked by {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_TruncateFailedFileIsLockedByName { get { @@ -3775,7 +3901,7 @@ public static string LogWindow_UI_StatusLineText_TruncateFailedFileIsLockedByNam } /// - /// Looks up a localized string similar to Unexpected issue truncating file. + /// 查找类似 Unexpected issue truncating file 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_UnexpectedIssueTruncatingFile { get { @@ -3784,7 +3910,7 @@ public static string LogWindow_UI_StatusLineText_UnexpectedIssueTruncatingFile { } /// - /// Looks up a localized string similar to {0}. + /// 查找类似 {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_UpdateEditColumnDisplay { get { @@ -3793,7 +3919,7 @@ public static string LogWindow_UI_StatusLineText_UpdateEditColumnDisplay { } /// - /// Looks up a localized string similar to Writing to temp file... Press ESC to cancel.. + /// 查找类似 Writing to temp file... Press ESC to cancel. 的本地化字符串。 /// public static string LogWindow_UI_StatusLineText_WritePipeToTab_WritingToTempFile { get { @@ -3802,7 +3928,7 @@ public static string LogWindow_UI_StatusLineText_WritePipeToTab_WritingToTempFil } /// - /// Looks up a localized string similar to Loading file.... + /// 查找类似 Loading file... 的本地化字符串。 /// public static string LogWindow_UI_StatusText_LoadingFile { get { @@ -3811,7 +3937,7 @@ public static string LogWindow_UI_StatusText_LoadingFile { } /// - /// Looks up a localized string similar to Loading {0}. + /// 查找类似 Loading {0} 的本地化字符串。 /// public static string LogWindow_UI_StatusText_LoadingWithParameter { get { @@ -3820,7 +3946,7 @@ public static string LogWindow_UI_StatusText_LoadingWithParameter { } /// - /// Looks up a localized string similar to Sure to close?. + /// 查找类似 Sure to close? 的本地化字符串。 /// public static string LogWindow_UI_SureToClose { get { @@ -3829,7 +3955,7 @@ public static string LogWindow_UI_SureToClose { } /// - /// Looks up a localized string similar to Freeze left columns until here ({0}). + /// 查找类似 Freeze left columns until here ({0}) 的本地化字符串。 /// public static string LogWindow_UI_Text_FreezeLeftColumnsUntilHereGridViewColumns_selectedColHeaderText { get { @@ -3839,7 +3965,7 @@ public static string LogWindow_UI_Text_FreezeLeftColumnsUntilHereGridViewColumns } /// - /// Looks up a localized string similar to Frozen. + /// 查找类似 Frozen 的本地化字符串。 /// public static string LogWindow_UI_Text_Frozen { get { @@ -3848,7 +3974,7 @@ public static string LogWindow_UI_Text_Frozen { } /// - /// Looks up a localized string similar to Hide advanced.... + /// 查找类似 Hide advanced... 的本地化字符串。 /// public static string LogWindow_UI_Text_ShowAdvancedFilterPanel_HideAdvanced { get { @@ -3857,7 +3983,7 @@ public static string LogWindow_UI_Text_ShowAdvancedFilterPanel_HideAdvanced { } /// - /// Looks up a localized string similar to Show advanced.... + /// 查找类似 Show advanced... 的本地化字符串。 /// public static string LogWindow_UI_Text_ShowAdvancedFilterPanel_ShowAdvanced { get { @@ -3866,7 +3992,7 @@ public static string LogWindow_UI_Text_ShowAdvancedFilterPanel_ShowAdvanced { } /// - /// Looks up a localized string similar to There are some comments in the bookmarks. Really remove bookmarks?. + /// 查找类似 There are some comments in the bookmarks. Really remove bookmarks? 的本地化字符串。 /// public static string LogWindow_UI_ThereAreSomeCommentsInTheBookmarksReallyRemoveBookmarks { get { @@ -3875,9 +4001,9 @@ public static string LogWindow_UI_ThereAreSomeCommentsInTheBookmarksReallyRemove } /// - /// Looks up a localized string similar to Files are now time synced. + /// 查找类似 Files are now time synced. /// - ///To sync the other windows while you select lines (mouse click or arrow keys), enable "Show timestamp control" under Settings > Timestamp features. Without it, only "Scroll all tabs to current timestamp" moves the other windows.. + ///To sync the other windows while you select lines (mouse click or arrow keys), enable "Show timestamp control" under Settings > Timestamp features. Without it, only "Scroll all tabs to current timestamp" moves the other windows. 的本地化字符串。 /// public static string LogWindow_UI_TimeSync_TimestampControlHint { get { @@ -3886,7 +4012,7 @@ public static string LogWindow_UI_TimeSync_TimestampControlHint { } /// - /// Looks up a localized string similar to Choose a file to save bookmarks into. + /// 查找类似 Choose a file to save bookmarks into 的本地化字符串。 /// public static string LogWindow_UI_Title_ExportBookMarkList { get { @@ -3895,7 +4021,7 @@ public static string LogWindow_UI_Title_ExportBookMarkList { } /// - /// Looks up a localized string similar to Choose a file to load bookmarks from. + /// 查找类似 Choose a file to load bookmarks from 的本地化字符串。 /// public static string LogWindow_UI_Title_ImportBookmarkList { get { @@ -3904,7 +4030,7 @@ public static string LogWindow_UI_Title_ImportBookmarkList { } /// - /// Looks up a localized string similar to There's a comment attached to the bookmark. Really remove the bookmark?. + /// 查找类似 There's a comment attached to the bookmark. Really remove the bookmark? 的本地化字符串。 /// public static string LogWindow_UI_ToggleBookmark_ThereCommentAttachedRemoveIt { get { @@ -3913,7 +4039,7 @@ public static string LogWindow_UI_ToggleBookmark_ThereCommentAttachedRemoveIt { } /// - /// Looks up a localized string similar to Bookmark comment.... + /// 查找类似 Bookmark comment... 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_BookmarkComment { get { @@ -3922,7 +4048,7 @@ public static string LogWindow_UI_ToolStripMenuItem_BookmarkComment { } /// - /// Looks up a localized string similar to Color.... + /// 查找类似 Color... 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_Color { get { @@ -3931,7 +4057,7 @@ public static string LogWindow_UI_ToolStripMenuItem_Color { } /// - /// Looks up a localized string similar to Copy. + /// 查找类似 Copy 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_Copy { get { @@ -3940,7 +4066,7 @@ public static string LogWindow_UI_ToolStripMenuItem_Copy { } /// - /// Looks up a localized string similar to Copy to clipboard. + /// 查找类似 Copy to clipboard 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_CopyToClipboard { get { @@ -3949,7 +4075,7 @@ public static string LogWindow_UI_ToolStripMenuItem_CopyToClipboard { } /// - /// Looks up a localized string similar to Copy to new tab. + /// 查找类似 Copy to new tab 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_CopyToNewTab { get { @@ -3958,7 +4084,7 @@ public static string LogWindow_UI_ToolStripMenuItem_CopyToNewTab { } /// - /// Looks up a localized string similar to Filter for selection. + /// 查找类似 Filter for selection 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_FilterForSelection { get { @@ -3967,7 +4093,7 @@ public static string LogWindow_UI_ToolStripMenuItem_FilterForSelection { } /// - /// Looks up a localized string similar to Filter to new tab. + /// 查找类似 Filter to new tab 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_FilterToNewTab { get { @@ -3976,7 +4102,7 @@ public static string LogWindow_UI_ToolStripMenuItem_FilterToNewTab { } /// - /// Looks up a localized string similar to Free this window from time sync. + /// 查找类似 Free this window from time sync 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_FreeThisWindowFromTimeSync { get { @@ -3985,7 +4111,7 @@ public static string LogWindow_UI_ToolStripMenuItem_FreeThisWindowFromTimeSync { } /// - /// Looks up a localized string similar to Freeze left columns until here. + /// 查找类似 Freeze left columns until here 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_FreezeLeftColumnsUntilHere { get { @@ -3994,7 +4120,7 @@ public static string LogWindow_UI_ToolStripMenuItem_FreezeLeftColumnsUntilHere { } /// - /// Looks up a localized string similar to Hide column. + /// 查找类似 Hide column 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_HideColumn { get { @@ -4003,7 +4129,7 @@ public static string LogWindow_UI_ToolStripMenuItem_HideColumn { } /// - /// Looks up a localized string similar to Highlight selection in log file (full line). + /// 查找类似 Highlight selection in log file (full line) 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_HighlightSelectionInLogFileFullLine { get { @@ -4012,7 +4138,7 @@ public static string LogWindow_UI_ToolStripMenuItem_HighlightSelectionInLogFileF } /// - /// Looks up a localized string similar to Highlight selection in log file (word mode). + /// 查找类似 Highlight selection in log file (word mode) 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_HighlightSelectionInLogFileWordMode { get { @@ -4021,7 +4147,7 @@ public static string LogWindow_UI_ToolStripMenuItem_HighlightSelectionInLogFileW } /// - /// Looks up a localized string similar to Locate filtered line in original file. + /// 查找类似 Locate filtered line in original file 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_LocateFilteredLineInOriginalFile { get { @@ -4030,7 +4156,7 @@ public static string LogWindow_UI_ToolStripMenuItem_LocateFilteredLineInOriginal } /// - /// Looks up a localized string similar to Make all permanent. + /// 查找类似 Make all permanent 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MakeAllPermanent { get { @@ -4039,7 +4165,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MakeAllPermanent { } /// - /// Looks up a localized string similar to Mark current filter range. + /// 查找类似 Mark current filter range 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MarkCurrentFilterRange { get { @@ -4048,7 +4174,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MarkCurrentFilterRange { } /// - /// Looks up a localized string similar to Mark/Edit-Mode. + /// 查找类似 Mark/Edit-Mode 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MarkEditMode { get { @@ -4057,7 +4183,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MarkEditMode { } /// - /// Looks up a localized string similar to Mark filter hits in log view. + /// 查找类似 Mark filter hits in log view 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MarkFilterHitsInLogView { get { @@ -4066,7 +4192,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MarkFilterHitsInLogView { } /// - /// Looks up a localized string similar to Move left. + /// 查找类似 Move left 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MoveLeft { get { @@ -4075,7 +4201,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MoveLeft { } /// - /// Looks up a localized string similar to Move right. + /// 查找类似 Move right 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MoveRight { get { @@ -4084,7 +4210,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MoveRight { } /// - /// Looks up a localized string similar to Move to last column. + /// 查找类似 Move to last column 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_MoveToLastColumn { get { @@ -4093,7 +4219,7 @@ public static string LogWindow_UI_ToolStripMenuItem_MoveToLastColumn { } /// - /// Looks up a localized string similar to Remove all. + /// 查找类似 Remove all 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_RemoveAll { get { @@ -4102,7 +4228,7 @@ public static string LogWindow_UI_ToolStripMenuItem_RemoveAll { } /// - /// Looks up a localized string similar to Restore columns. + /// 查找类似 Restore columns 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_RestoreColumns { get { @@ -4111,7 +4237,7 @@ public static string LogWindow_UI_ToolStripMenuItem_RestoreColumns { } /// - /// Looks up a localized string similar to Scroll all tabs to current timestamp. + /// 查找类似 Scroll all tabs to current timestamp 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ScrollAllTabsToCurrentTimestamp { get { @@ -4120,7 +4246,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ScrollAllTabsToCurrentTimest } /// - /// Looks up a localized string similar to Scroll to column.... + /// 查找类似 Scroll to column... 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ScrollToColumn { get { @@ -4129,7 +4255,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ScrollToColumn { } /// - /// Looks up a localized string similar to Set bookmarks on selected lines. + /// 查找类似 Set bookmarks on selected lines 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_SetBookmarksOnSelectedLines { get { @@ -4138,7 +4264,7 @@ public static string LogWindow_UI_ToolStripMenuItem_SetBookmarksOnSelectedLines } /// - /// Looks up a localized string similar to Set selected text as bookmark comment. + /// 查找类似 Set selected text as bookmark comment 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_SetSelectedTextAsBookmarkComment { get { @@ -4147,7 +4273,7 @@ public static string LogWindow_UI_ToolStripMenuItem_SetSelectedTextAsBookmarkCom } /// - /// Looks up a localized string similar to Temp Highlights. + /// 查找类似 Temp Highlights 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_TempHighlights { get { @@ -4156,7 +4282,7 @@ public static string LogWindow_UI_ToolStripMenuItem_TempHighlights { } /// - /// Looks up a localized string similar to Time synced files. + /// 查找类似 Time synced files 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_TimeSyncedFiles { get { @@ -4165,7 +4291,7 @@ public static string LogWindow_UI_ToolStripMenuItem_TimeSyncedFiles { } /// - /// Looks up a localized string similar to Toggle Boomark. + /// 查找类似 Toggle Boomark 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToggleBoomark { get { @@ -4174,7 +4300,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToggleBoomark { } /// - /// Looks up a localized string similar to Edit the comment for a bookmark. + /// 查找类似 Edit the comment for a bookmark 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToolTip_BookmarkComment { get { @@ -4183,7 +4309,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToolTip_BookmarkComment { } /// - /// Looks up a localized string similar to Copy marked lines into a new tab window. + /// 查找类似 Copy marked lines into a new tab window 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToolTip_CopyToNewTab { get { @@ -4192,7 +4318,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToolTip_CopyToNewTab { } /// - /// Looks up a localized string similar to Hide this column. + /// 查找类似 Hide this column 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToolTip_HideColumn { get { @@ -4201,7 +4327,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToolTip_HideColumn { } /// - /// Looks up a localized string similar to Move this column to the last position. + /// 查找类似 Move this column to the last position 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToolTip_MoveToLastColumn { get { @@ -4210,7 +4336,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToolTip_MoveToLastColumn { } /// - /// Looks up a localized string similar to Scolls all open tabs to the selected timestamp, if possible. + /// 查找类似 Scolls all open tabs to the selected timestamp, if possible 的本地化字符串。 /// public static string LogWindow_UI_ToolStripMenuItem_ToolTip_ScrollAllTabsToCurrentTimestamp { get { @@ -4219,7 +4345,7 @@ public static string LogWindow_UI_ToolStripMenuItem_ToolTip_ScrollAllTabsToCurre } /// - /// Looks up a localized string similar to ->F. + /// 查找类似 ->F 的本地化字符串。 /// public static string LogWindow_UI_WriteFilterToTab_NamePrefix_ForFilter { get { @@ -4228,97 +4354,97 @@ public static string LogWindow_UI_WriteFilterToTab_NamePrefix_ForFilter { } /// - /// Looks up a localized string similar to Bookmarks. + /// 查找类似 Bookmarks 的本地化字符串。 /// public static string MarkerBar_Bookmarks { get { return ResourceManager.GetString("MarkerBar_Bookmarks", resourceCulture); } } - + /// - /// Looks up a localized string similar to Clear search. + /// 查找类似 Clear search 的本地化字符串。 /// public static string MarkerBar_ClearSearch { get { return ResourceManager.GetString("MarkerBar_ClearSearch", resourceCulture); } } - + /// - /// Looks up a localized string similar to Discovering markers…. + /// 查找类似 Discovering markers… 的本地化字符串。 /// public static string MarkerBar_Discovering { get { return ResourceManager.GetString("MarkerBar_Discovering", resourceCulture); } } - + /// - /// Looks up a localized string similar to Filter hits. + /// 查找类似 Filter hits 的本地化字符串。 /// public static string MarkerBar_FilterHits { get { return ResourceManager.GetString("MarkerBar_FilterHits", resourceCulture); } } - + /// - /// Looks up a localized string similar to Highlights. + /// 查找类似 Highlights 的本地化字符串。 /// public static string MarkerBar_Highlights { get { return ResourceManager.GetString("MarkerBar_Highlights", resourceCulture); } } - + /// - /// Looks up a localized string similar to Could not read log line {0} while discovering markers.. + /// 查找类似 Could not read log line {0} while discovering markers. 的本地化字符串。 /// public static string MarkerBar_LineUnavailable { get { return ResourceManager.GetString("MarkerBar_LineUnavailable", resourceCulture); } } - + /// - /// Looks up a localized string similar to Marker discovery failed: {0}. + /// 查找类似 Marker discovery failed: {0} 的本地化字符串。 /// public static string MarkerBar_ScanFailed { get { return ResourceManager.GetString("MarkerBar_ScanFailed", resourceCulture); } } - + /// - /// Looks up a localized string similar to Search hits. + /// 查找类似 Search hits 的本地化字符串。 /// public static string MarkerBar_SearchHits { get { return ResourceManager.GetString("MarkerBar_SearchHits", resourceCulture); } } - + /// - /// Looks up a localized string similar to Marker bar. + /// 查找类似 Marker bar 的本地化字符串。 /// public static string MarkerBar_Title { get { return ResourceManager.GetString("MarkerBar_Title", resourceCulture); } } - + /// - /// Looks up a localized string similar to {0}: lines {1}–{2}, {3} matching lines. + /// 查找类似 {0}: lines {1}–{2}, {3} matching lines 的本地化字符串。 /// public static string MarkerBar_ToolTip { get { return ResourceManager.GetString("MarkerBar_ToolTip", resourceCulture); } } - + /// - /// Looks up a localized string similar to Close existing tabs. + /// 查找类似 Close existing tabs 的本地化字符串。 /// public static string MissingFilesDialog_UI_Button_CloseTabs { get { @@ -4327,7 +4453,7 @@ public static string MissingFilesDialog_UI_Button_CloseTabs { } /// - /// Looks up a localized string similar to Ignore layout data. + /// 查找类似 Ignore layout data 的本地化字符串。 /// public static string MissingFilesDialog_UI_Button_Ignore { get { @@ -4336,7 +4462,7 @@ public static string MissingFilesDialog_UI_Button_Ignore { } /// - /// Looks up a localized string similar to Load && Update Session. + /// 查找类似 Load && Update Session 的本地化字符串。 /// public static string MissingFilesDialog_UI_Button_LoadUpdateSession { get { @@ -4345,7 +4471,7 @@ public static string MissingFilesDialog_UI_Button_LoadUpdateSession { } /// - /// Looks up a localized string similar to Open new window. + /// 查找类似 Open new window 的本地化字符串。 /// public static string MissingFilesDialog_UI_Button_NewWindow { get { @@ -4354,7 +4480,7 @@ public static string MissingFilesDialog_UI_Button_NewWindow { } /// - /// Looks up a localized string similar to Load && Update Session ({0}). + /// 查找类似 Load && Update Session ({0}) 的本地化字符串。 /// public static string MissingFilesDialog_UI_Button_UpdateSessionAlternativeCount { get { @@ -4363,7 +4489,7 @@ public static string MissingFilesDialog_UI_Button_UpdateSessionAlternativeCount } /// - /// Looks up a localized string similar to Alternative. + /// 查找类似 Alternative 的本地化字符串。 /// public static string MissingFilesDialog_UI_FileStatus_Alternative { get { @@ -4372,7 +4498,7 @@ public static string MissingFilesDialog_UI_FileStatus_Alternative { } /// - /// Looks up a localized string similar to Missing. + /// 查找类似 Missing 的本地化字符串。 /// public static string MissingFilesDialog_UI_FileStatus_Missing { get { @@ -4381,7 +4507,7 @@ public static string MissingFilesDialog_UI_FileStatus_Missing { } /// - /// Looks up a localized string similar to Selected. + /// 查找类似 Selected 的本地化字符串。 /// public static string MissingFilesDialog_UI_FileStatus_Selected { get { @@ -4390,7 +4516,7 @@ public static string MissingFilesDialog_UI_FileStatus_Selected { } /// - /// Looks up a localized string similar to Valid. + /// 查找类似 Valid 的本地化字符串。 /// public static string MissingFilesDialog_UI_FileStatus_Valid { get { @@ -4399,7 +4525,7 @@ public static string MissingFilesDialog_UI_FileStatus_Valid { } /// - /// Looks up a localized string similar to Log Files (*.lxp)|*.lxp|All Files (*.*)|*.*. + /// 查找类似 Log Files (*.lxp)|*.lxp|All Files (*.*)|*.* 的本地化字符串。 /// public static string MissingFilesDialog_UI_Filter_Logfiles { get { @@ -4408,7 +4534,7 @@ public static string MissingFilesDialog_UI_Filter_Logfiles { } /// - /// Looks up a localized string similar to Locate: {0}. + /// 查找类似 Locate: {0} 的本地化字符串。 /// public static string MissingFilesDialog_UI_Filter_Title { get { @@ -4417,7 +4543,7 @@ public static string MissingFilesDialog_UI_Filter_Title { } /// - /// Looks up a localized string similar to Please choose how to proceed:. + /// 查找类似 Please choose how to proceed: 的本地化字符串。 /// public static string MissingFilesDialog_UI_Label_ChooseHowToProceed { get { @@ -4426,7 +4552,7 @@ public static string MissingFilesDialog_UI_Label_ChooseHowToProceed { } /// - /// Looks up a localized string similar to Restoring layout requires an empty workbench.. + /// 查找类似 Restoring layout requires an empty workbench. 的本地化字符串。 /// public static string MissingFilesDialog_UI_Label_Informational { get { @@ -4435,7 +4561,7 @@ public static string MissingFilesDialog_UI_Label_Informational { } /// - /// Looks up a localized string similar to Found: {0} of {1} files ({2} missing). + /// 查找类似 Found: {0} of {1} files ({2} missing) 的本地化字符串。 /// public static string MissingFilesDialog_UI_Label_Summary { get { @@ -4444,7 +4570,7 @@ public static string MissingFilesDialog_UI_Label_Summary { } /// - /// Looks up a localized string similar to Loading Session. + /// 查找类似 Loading Session 的本地化字符串。 /// public static string MissingFilesDialog_UI_Title { get { @@ -4453,7 +4579,7 @@ public static string MissingFilesDialog_UI_Title { } /// - /// Looks up a localized string similar to File name pattern:. + /// 查找类似 File name pattern: 的本地化字符串。 /// public static string MultiFileMaskDialog_UI_Label_FileNamePattern { get { @@ -4462,7 +4588,7 @@ public static string MultiFileMaskDialog_UI_Label_FileNamePattern { } /// - /// Looks up a localized string similar to Max days:. + /// 查找类似 Max days: 的本地化字符串。 /// public static string MultiFileMaskDialog_UI_Label_MaxDays { get { @@ -4471,7 +4597,7 @@ public static string MultiFileMaskDialog_UI_Label_MaxDays { } /// - /// Looks up a localized string similar to MultiFile settings for:. + /// 查找类似 MultiFile settings for: 的本地化字符串。 /// public static string MultiFileMaskDialog_UI_Label_SettingsFor { get { @@ -4480,19 +4606,23 @@ public static string MultiFileMaskDialog_UI_Label_SettingsFor { } /// - /// Looks up a localized string similar to Pattern syntax: + /// 查找类似 Pattern syntax: /// ///* = any characters (wildcard) - ///$D(&lt;date&gt;) = Date pattern + ///$D(<date>) = Date pattern ///$I = File index number ///$J = File index number, hidden when zero - ///$J(&lt;prefix&gt;) = Like $J, but adding &lt;prefix&gt; when non-zero + ///$J(<prefix>) = Like $J, but adding <prefix> when non-zero + /// + ///Examples: + ///*$J(.) → app.log, app.log.1, app.log.2 + ///*$J(.).log → app.log, app.1.log, app.2.log /// - ///&lt;date&gt;: + ///<date>: ///DD = day ///MM = month ///YY[YY] = year - ///all other chars will be used as given. + ///all other chars will be used as given 的本地化字符串。 /// public static string MultiFileMaskDialog_UI_Label_SyntaxHelp { get { @@ -4501,7 +4631,7 @@ public static string MultiFileMaskDialog_UI_Label_SyntaxHelp { } /// - /// Looks up a localized string similar to MultiFile settings. + /// 查找类似 MultiFile settings 的本地化字符串。 /// public static string MultiFileMaskDialog_UI_Title { get { @@ -4510,7 +4640,7 @@ public static string MultiFileMaskDialog_UI_Title { } /// - /// Looks up a localized string similar to Multi file. + /// 查找类似 Multi file 的本地化字符串。 /// public static string MultiLoadRequestDialog_UI_Button_MultiFile { get { @@ -4519,7 +4649,7 @@ public static string MultiLoadRequestDialog_UI_Button_MultiFile { } /// - /// Looks up a localized string similar to Single files. + /// 查找类似 Single files 的本地化字符串。 /// public static string MultiLoadRequestDialog_UI_Button_SingleFiles { get { @@ -4528,7 +4658,7 @@ public static string MultiLoadRequestDialog_UI_Button_SingleFiles { } /// - /// Looks up a localized string similar to Choose loading mode:. + /// 查找类似 Choose loading mode: 的本地化字符串。 /// public static string MultiLoadRequestDialog_UI_Label_ChooseLoadingMode { get { @@ -4537,7 +4667,7 @@ public static string MultiLoadRequestDialog_UI_Label_ChooseLoadingMode { } /// - /// Looks up a localized string similar to Loading multiple files. + /// 查找类似 Loading multiple files 的本地化字符串。 /// public static string MultiLoadRequestDialog_UI_Title { get { @@ -4546,7 +4676,7 @@ public static string MultiLoadRequestDialog_UI_Title { } /// - /// Looks up a localized string similar to Open URL. + /// 查找类似 Open URL 的本地化字符串。 /// public static string OpenUriDialog_UI_Dialog_Text { get { @@ -4555,7 +4685,7 @@ public static string OpenUriDialog_UI_Dialog_Text { } /// - /// Looks up a localized string similar to Enter a URL which is supported by an installed file system plugin (e.g. file:// or sftp://). + /// 查找类似 Enter a URL which is supported by an installed file system plugin (e.g. file:// or sftp://) 的本地化字符串。 /// public static string OpenUriDialog_UI_Label_Explaination { get { @@ -4564,7 +4694,7 @@ public static string OpenUriDialog_UI_Label_Explaination { } /// - /// Looks up a localized string similar to URL:. + /// 查找类似 URL: 的本地化字符串。 /// public static string OpenUriDialog_UI_Label_URL { get { @@ -4573,7 +4703,7 @@ public static string OpenUriDialog_UI_Label_URL { } /// - /// Looks up a localized string similar to Line. + /// 查找类似 Line 的本地化字符串。 /// public static string PaintHelper_HeaderText_LineNumberColumn { get { @@ -4582,7 +4712,7 @@ public static string PaintHelper_HeaderText_LineNumberColumn { } /// - /// Looks up a localized string similar to Value for parameter:. + /// 查找类似 Value for parameter: 的本地化字符串。 /// public static string ParamRequesterDialog_UI_Label_ValueForParameter { get { @@ -4591,7 +4721,7 @@ public static string ParamRequesterDialog_UI_Label_ValueForParameter { } /// - /// Looks up a localized string similar to &Value for "{0}":. + /// 查找类似 &Value for "{0}": 的本地化字符串。 /// public static string ParamRequesterDialog_UI_Label_ValueForParameterNamed { get { @@ -4600,7 +4730,7 @@ public static string ParamRequesterDialog_UI_Label_ValueForParameterNamed { } /// - /// Looks up a localized string similar to Tool parameter. + /// 查找类似 Tool parameter 的本地化字符串。 /// public static string ParamRequesterDialog_UI_Title { get { @@ -4609,7 +4739,7 @@ public static string ParamRequesterDialog_UI_Title { } /// - /// Looks up a localized string similar to &Close. + /// 查找类似 &Close 的本地化字符串。 /// public static string PluginHashDialog_UI_Button_Close { get { @@ -4618,7 +4748,7 @@ public static string PluginHashDialog_UI_Button_Close { } /// - /// Looks up a localized string similar to &Copy. + /// 查找类似 &Copy 的本地化字符串。 /// public static string PluginHashDialog_UI_Button_Copy { get { @@ -4627,7 +4757,7 @@ public static string PluginHashDialog_UI_Button_Copy { } /// - /// Looks up a localized string similar to SHA256 Hash:. + /// 查找类似 SHA256 Hash: 的本地化字符串。 /// public static string PluginHashDialog_UI_Label_Hash { get { @@ -4636,7 +4766,7 @@ public static string PluginHashDialog_UI_Label_Hash { } /// - /// Looks up a localized string similar to Plugin: {0}. + /// 查找类似 Plugin: {0} 的本地化字符串。 /// public static string PluginHashDialog_UI_Label_PluginName { get { @@ -4645,7 +4775,7 @@ public static string PluginHashDialog_UI_Label_PluginName { } /// - /// Looks up a localized string similar to Failed to copy hash: {0}. + /// 查找类似 Failed to copy hash: {0} 的本地化字符串。 /// public static string PluginHashDialog_UI_Message_CopyError { get { @@ -4654,7 +4784,7 @@ public static string PluginHashDialog_UI_Message_CopyError { } /// - /// Looks up a localized string similar to Hash copied to clipboard.. + /// 查找类似 Hash copied to clipboard. 的本地化字符串。 /// public static string PluginHashDialog_UI_Message_CopySuccess { get { @@ -4663,7 +4793,7 @@ public static string PluginHashDialog_UI_Message_CopySuccess { } /// - /// Looks up a localized string similar to Error. + /// 查找类似 Error 的本地化字符串。 /// public static string PluginHashDialog_UI_Message_ErrorTitle { get { @@ -4672,7 +4802,7 @@ public static string PluginHashDialog_UI_Message_ErrorTitle { } /// - /// Looks up a localized string similar to Success. + /// 查找类似 Success 的本地化字符串。 /// public static string PluginHashDialog_UI_Message_SuccessTitle { get { @@ -4681,7 +4811,7 @@ public static string PluginHashDialog_UI_Message_SuccessTitle { } /// - /// Looks up a localized string similar to Plugin Hash. + /// 查找类似 Plugin Hash 的本地化字符串。 /// public static string PluginHashDialog_UI_Title { get { @@ -4690,7 +4820,7 @@ public static string PluginHashDialog_UI_Title { } /// - /// Looks up a localized string similar to Failed to load plugin assembly (timeout or error). + /// 查找类似 Failed to load plugin assembly (timeout or error) 的本地化字符串。 /// public static string PluginRegistry_PluginLoadingProgress_FailedToLoadPluginAssemblyTimeoutOrError { get { @@ -4699,7 +4829,7 @@ public static string PluginRegistry_PluginLoadingProgress_FailedToLoadPluginAsse } /// - /// Looks up a localized string similar to Failed validation (not trusted or invalid manifest). + /// 查找类似 Failed validation (not trusted or invalid manifest) 的本地化字符串。 /// public static string PluginRegistry_PluginLoadingProgress_FailedValidationNotTrustedOrInvalidManifest { get { @@ -4708,7 +4838,7 @@ public static string PluginRegistry_PluginLoadingProgress_FailedValidationNotTru } /// - /// Looks up a localized string similar to Loading plugin assembly. + /// 查找类似 Loading plugin assembly 的本地化字符串。 /// public static string PluginRegistry_PluginLoadingProgress_LoadingPluginAssembly { get { @@ -4717,7 +4847,7 @@ public static string PluginRegistry_PluginLoadingProgress_LoadingPluginAssembly } /// - /// Looks up a localized string similar to Validating plugin security and manifest. + /// 查找类似 Validating plugin security and manifest 的本地化字符串。 /// public static string PluginRegistry_PluginLoadingProgress_ValidatingPluginSecurityAndManifest { get { @@ -4726,7 +4856,7 @@ public static string PluginRegistry_PluginLoadingProgress_ValidatingPluginSecuri } /// - /// Looks up a localized string similar to &Add Plugin.... + /// 查找类似 &Add Plugin... 的本地化字符串。 /// public static string PluginTrustDialog_UI_Button_AddPlugin { get { @@ -4735,7 +4865,7 @@ public static string PluginTrustDialog_UI_Button_AddPlugin { } /// - /// Looks up a localized string similar to &Remove. + /// 查找类似 &Remove 的本地化字符串。 /// public static string PluginTrustDialog_UI_Button_Remove { get { @@ -4744,7 +4874,7 @@ public static string PluginTrustDialog_UI_Button_Remove { } /// - /// Looks up a localized string similar to &View Hash.... + /// 查找类似 &View Hash... 的本地化字符串。 /// public static string PluginTrustDialog_UI_Button_ViewHash { get { @@ -4753,7 +4883,7 @@ public static string PluginTrustDialog_UI_Button_ViewHash { } /// - /// Looks up a localized string similar to Hash (Partial). + /// 查找类似 Hash (Partial) 的本地化字符串。 /// public static string PluginTrustDialog_UI_Column_HashPartial { get { @@ -4762,7 +4892,7 @@ public static string PluginTrustDialog_UI_Column_HashPartial { } /// - /// Looks up a localized string similar to Hash Verified. + /// 查找类似 Hash Verified 的本地化字符串。 /// public static string PluginTrustDialog_UI_Column_HashVerified { get { @@ -4771,7 +4901,7 @@ public static string PluginTrustDialog_UI_Column_HashVerified { } /// - /// Looks up a localized string similar to Plugin Name. + /// 查找类似 Plugin Name 的本地化字符串。 /// public static string PluginTrustDialog_UI_Column_PluginName { get { @@ -4780,7 +4910,7 @@ public static string PluginTrustDialog_UI_Column_PluginName { } /// - /// Looks up a localized string similar to Status. + /// 查找类似 Status 的本地化字符串。 /// public static string PluginTrustDialog_UI_Column_Status { get { @@ -4789,7 +4919,7 @@ public static string PluginTrustDialog_UI_Column_Status { } /// - /// Looks up a localized string similar to Plugin Files (*.dll)|*.dll|All Files (*.*)|*.*. + /// 查找类似 Plugin Files (*.dll)|*.dll|All Files (*.*)|*.* 的本地化字符串。 /// public static string PluginTrustDialog_UI_FileDialog_Filter { get { @@ -4798,7 +4928,7 @@ public static string PluginTrustDialog_UI_FileDialog_Filter { } /// - /// Looks up a localized string similar to Select Plugin to Trust. + /// 查找类似 Select Plugin to Trust 的本地化字符串。 /// public static string PluginTrustDialog_UI_FileDialog_Title { get { @@ -4807,7 +4937,7 @@ public static string PluginTrustDialog_UI_FileDialog_Title { } /// - /// Looks up a localized string similar to Trusted Plugins. + /// 查找类似 Trusted Plugins 的本地化字符串。 /// public static string PluginTrustDialog_UI_GroupBox_TrustedPlugins { get { @@ -4816,7 +4946,7 @@ public static string PluginTrustDialog_UI_GroupBox_TrustedPlugins { } /// - /// Looks up a localized string similar to Total Plugins: {0}. + /// 查找类似 Total Plugins: {0} 的本地化字符串。 /// public static string PluginTrustDialog_UI_Label_TotalPlugins { get { @@ -4825,7 +4955,7 @@ public static string PluginTrustDialog_UI_Label_TotalPlugins { } /// - /// Looks up a localized string similar to Plugin ''{0}'' is already in the trusted list.. + /// 查找类似 Plugin ''{0}'' is already in the trusted list. 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_AlreadyTrusted { get { @@ -4834,7 +4964,7 @@ public static string PluginTrustDialog_UI_Message_AlreadyTrusted { } /// - /// Looks up a localized string similar to Already Trusted. + /// 查找类似 Already Trusted 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_AlreadyTrustedTitle { get { @@ -4843,13 +4973,13 @@ public static string PluginTrustDialog_UI_Message_AlreadyTrustedTitle { } /// - /// Looks up a localized string similar to Remove trust for plugin: + /// 查找类似 Remove trust for plugin: /// ///{0} /// ///The plugin will not be loaded until re-added to the trusted list. /// - ///Continue?. + ///Continue? 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_ConfirmRemove { get { @@ -4858,7 +4988,7 @@ public static string PluginTrustDialog_UI_Message_ConfirmRemove { } /// - /// Looks up a localized string similar to Confirm Removal. + /// 查找类似 Confirm Removal 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_ConfirmRemoveTitle { get { @@ -4867,13 +4997,13 @@ public static string PluginTrustDialog_UI_Message_ConfirmRemoveTitle { } /// - /// Looks up a localized string similar to Trust plugin: + /// 查找类似 Trust plugin: /// ///Name: {0} ///Path: {1} ///Hash: {2} /// - ///Do you want to trust this plugin?. + ///Do you want to trust this plugin? 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_ConfirmTrust { get { @@ -4882,7 +5012,7 @@ public static string PluginTrustDialog_UI_Message_ConfirmTrust { } /// - /// Looks up a localized string similar to Confirm Trust. + /// 查找类似 Confirm Trust 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_ConfirmTrustTitle { get { @@ -4891,7 +5021,7 @@ public static string PluginTrustDialog_UI_Message_ConfirmTrustTitle { } /// - /// Looks up a localized string similar to Error. + /// 查找类似 Error 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_ErrorTitle { get { @@ -4900,7 +5030,7 @@ public static string PluginTrustDialog_UI_Message_ErrorTitle { } /// - /// Looks up a localized string similar to Error loading configuration: {0}. + /// 查找类似 Error loading configuration: {0} 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_LoadError { get { @@ -4909,7 +5039,7 @@ public static string PluginTrustDialog_UI_Message_LoadError { } /// - /// Looks up a localized string similar to No hash found for plugin: {0}. + /// 查找类似 No hash found for plugin: {0} 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_NoHash { get { @@ -4918,7 +5048,7 @@ public static string PluginTrustDialog_UI_Message_NoHash { } /// - /// Looks up a localized string similar to No Hash. + /// 查找类似 No Hash 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_NoHashTitle { get { @@ -4927,7 +5057,7 @@ public static string PluginTrustDialog_UI_Message_NoHashTitle { } /// - /// Looks up a localized string similar to Failed to save configuration:`n`n{0}. + /// 查找类似 Failed to save configuration:`n`n{0} 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_SaveError { get { @@ -4936,7 +5066,7 @@ public static string PluginTrustDialog_UI_Message_SaveError { } /// - /// Looks up a localized string similar to Plugin trust configuration saved successfully.. + /// 查找类似 Plugin trust configuration saved successfully. 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_SaveSuccess { get { @@ -4945,7 +5075,7 @@ public static string PluginTrustDialog_UI_Message_SaveSuccess { } /// - /// Looks up a localized string similar to Success. + /// 查找类似 Success 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_SuccessTitle { get { @@ -4954,7 +5084,7 @@ public static string PluginTrustDialog_UI_Message_SuccessTitle { } /// - /// Looks up a localized string similar to Configuration has been modified. Discard changes?. + /// 查找类似 Configuration has been modified. Discard changes? 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_UnsavedChanges { get { @@ -4963,7 +5093,7 @@ public static string PluginTrustDialog_UI_Message_UnsavedChanges { } /// - /// Looks up a localized string similar to Unsaved Changes. + /// 查找类似 Unsaved Changes 的本地化字符串。 /// public static string PluginTrustDialog_UI_Message_UnsavedChangesTitle { get { @@ -4972,7 +5102,7 @@ public static string PluginTrustDialog_UI_Message_UnsavedChangesTitle { } /// - /// Looks up a localized string similar to Plugin Trust Management. + /// 查找类似 Plugin Trust Management 的本地化字符串。 /// public static string PluginTrustDialog_UI_Title { get { @@ -4981,7 +5111,7 @@ public static string PluginTrustDialog_UI_Title { } /// - /// Looks up a localized string similar to No. + /// 查找类似 No 的本地化字符串。 /// public static string PluginTrustDialog_UI_Value_No { get { @@ -4990,7 +5120,7 @@ public static string PluginTrustDialog_UI_Value_No { } /// - /// Looks up a localized string similar to Trusted. + /// 查找类似 Trusted 的本地化字符串。 /// public static string PluginTrustDialog_UI_Value_Trusted { get { @@ -4999,7 +5129,7 @@ public static string PluginTrustDialog_UI_Value_Trusted { } /// - /// Looks up a localized string similar to Yes. + /// 查找类似 Yes 的本地化字符串。 /// public static string PluginTrustDialog_UI_Value_Yes { get { @@ -5008,7 +5138,7 @@ public static string PluginTrustDialog_UI_Value_Yes { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Pro_Filter { get { @@ -5018,7 +5148,7 @@ public static System.Drawing.Bitmap Pro_Filter { } /// - /// Looks up a localized string similar to Config file not found. + /// 查找类似 Config file not found 的本地化字符串。 /// public static string Program_UI_Error_ConfigFileNotFound { get { @@ -5027,8 +5157,8 @@ public static string Program_UI_Error_ConfigFileNotFound { } /// - /// Looks up a localized string similar to Insufficient system rights for LogExpert. Maybe you have started it from a network drive. Please start LogExpert from a local drive. - /// ({0}). + /// 查找类似 Insufficient system rights for LogExpert. Maybe you have started it from a network drive. Please start LogExpert from a local drive. + /// ({0}) 的本地化字符串。 /// public static string Program_UI_Error_InsufficientRights { get { @@ -5037,7 +5167,7 @@ public static string Program_UI_Error_InsufficientRights { } /// - /// Looks up a localized string similar to Cannot open connection to first instance ({0}). + /// 查找类似 Cannot open connection to first instance ({0}) 的本地化字符串。 /// public static string Program_UI_Error_Pipe_CannotConnectToFirstInstance { get { @@ -5046,7 +5176,7 @@ public static string Program_UI_Error_Pipe_CannotConnectToFirstInstance { } /// - /// Looks up a localized string similar to RegEx.htm. + /// 查找类似 RegEx.htm 的本地化字符串。 /// public static string RegexHelperDialog_Help_Chapter { get { @@ -5055,7 +5185,7 @@ public static string RegexHelperDialog_Help_Chapter { } /// - /// Looks up a localized string similar to Case sensitive. + /// 查找类似 Case sensitive 的本地化字符串。 /// public static string RegexHelperDialog_UI_CheckBox_CaseSensitive { get { @@ -5064,7 +5194,7 @@ public static string RegexHelperDialog_UI_CheckBox_CaseSensitive { } /// - /// Looks up a localized string similar to Matches:. + /// 查找类似 Matches: 的本地化字符串。 /// public static string RegexHelperDialog_UI_Label_Matches { get { @@ -5073,7 +5203,7 @@ public static string RegexHelperDialog_UI_Label_Matches { } /// - /// Looks up a localized string similar to Regular Expression:. + /// 查找类似 Regular Expression: 的本地化字符串。 /// public static string RegexHelperDialog_UI_Label_Regex { get { @@ -5082,7 +5212,7 @@ public static string RegexHelperDialog_UI_Label_Regex { } /// - /// Looks up a localized string similar to Test text:. + /// 查找类似 Test text: 的本地化字符串。 /// public static string RegexHelperDialog_UI_Label_TestText { get { @@ -5091,7 +5221,7 @@ public static string RegexHelperDialog_UI_Label_TestText { } /// - /// Looks up a localized string similar to No valid regex pattern. + /// 查找类似 No valid regex pattern 的本地化字符串。 /// public static string RegexHelperDialog_UI_TextBox_Matches_NoValidRegexPattern { get { @@ -5100,7 +5230,7 @@ public static string RegexHelperDialog_UI_TextBox_Matches_NoValidRegexPattern { } /// - /// Looks up a localized string similar to Regex-Helper. + /// 查找类似 Regex-Helper 的本地化字符串。 /// public static string RegexHelperDialog_UI_Title { get { @@ -5109,7 +5239,7 @@ public static string RegexHelperDialog_UI_Title { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Restart_alt { get { @@ -5119,7 +5249,7 @@ public static System.Drawing.Bitmap Restart_alt { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Search { get { @@ -5129,7 +5259,7 @@ public static System.Drawing.Bitmap Search { } /// - /// Looks up a localized string similar to Regex-&Helper. + /// 查找类似 Regex-&Helper 的本地化字符串。 /// public static string SearchDialog_UI_Button_RegexHelper { get { @@ -5138,7 +5268,7 @@ public static string SearchDialog_UI_Button_RegexHelper { } /// - /// Looks up a localized string similar to &Case sensitive. + /// 查找类似 &Case sensitive 的本地化字符串。 /// public static string SearchDialog_UI_CheckBox_CaseSensitive { get { @@ -5147,7 +5277,7 @@ public static string SearchDialog_UI_CheckBox_CaseSensitive { } /// - /// Looks up a localized string similar to &Regular expression. + /// 查找类似 &Regular expression 的本地化字符串。 /// public static string SearchDialog_UI_CheckBox_RegularExpression { get { @@ -5156,8 +5286,8 @@ public static string SearchDialog_UI_CheckBox_RegularExpression { } /// - /// Looks up a localized string similar to Error during creation of search parameter - /// {0}. + /// 查找类似 Error during creation of search parameter + /// {0} 的本地化字符串。 /// public static string SearchDialog_UI_Error_CreatingSearchParameter { get { @@ -5166,7 +5296,7 @@ public static string SearchDialog_UI_Error_CreatingSearchParameter { } /// - /// Looks up a localized string similar to Invalid regex pattern: {0}. + /// 查找类似 Invalid regex pattern: {0} 的本地化字符串。 /// public static string SearchDialog_UI_Error_InvalidRegexPattern { get { @@ -5175,7 +5305,7 @@ public static string SearchDialog_UI_Error_InvalidRegexPattern { } /// - /// Looks up a localized string similar to Search text is empty. + /// 查找类似 Search text is empty 的本地化字符串。 /// public static string SearchDialog_UI_Error_SearchTextEmpty { get { @@ -5184,7 +5314,7 @@ public static string SearchDialog_UI_Error_SearchTextEmpty { } /// - /// Looks up a localized string similar to Direction. + /// 查找类似 Direction 的本地化字符串。 /// public static string SearchDialog_UI_GroupBox_Direction { get { @@ -5193,7 +5323,7 @@ public static string SearchDialog_UI_GroupBox_Direction { } /// - /// Looks up a localized string similar to Options. + /// 查找类似 Options 的本地化字符串。 /// public static string SearchDialog_UI_GroupBox_Options { get { @@ -5202,7 +5332,7 @@ public static string SearchDialog_UI_GroupBox_Options { } /// - /// Looks up a localized string similar to Search start. + /// 查找类似 Search start 的本地化字符串。 /// public static string SearchDialog_UI_GroupBox_SearchStart { get { @@ -5211,7 +5341,7 @@ public static string SearchDialog_UI_GroupBox_SearchStart { } /// - /// Looks up a localized string similar to &Search for:. + /// 查找类似 &Search for: 的本地化字符串。 /// public static string SearchDialog_UI_Label_SearchFor { get { @@ -5220,7 +5350,7 @@ public static string SearchDialog_UI_Label_SearchFor { } /// - /// Looks up a localized string similar to Backward. + /// 查找类似 Backward 的本地化字符串。 /// public static string SearchDialog_UI_RadioButton_Backward { get { @@ -5229,7 +5359,7 @@ public static string SearchDialog_UI_RadioButton_Backward { } /// - /// Looks up a localized string similar to Forward. + /// 查找类似 Forward 的本地化字符串。 /// public static string SearchDialog_UI_RadioButton_Forward { get { @@ -5238,7 +5368,7 @@ public static string SearchDialog_UI_RadioButton_Forward { } /// - /// Looks up a localized string similar to From selected line. + /// 查找类似 From selected line 的本地化字符串。 /// public static string SearchDialog_UI_RadioButton_FromSelectedLine { get { @@ -5247,7 +5377,7 @@ public static string SearchDialog_UI_RadioButton_FromSelectedLine { } /// - /// Looks up a localized string similar to From top. + /// 查找类似 From top 的本地化字符串。 /// public static string SearchDialog_UI_RadioButton_FromTop { get { @@ -5256,7 +5386,7 @@ public static string SearchDialog_UI_RadioButton_FromTop { } /// - /// Looks up a localized string similar to Search. + /// 查找类似 Search 的本地化字符串。 /// public static string SearchDialog_UI_Title { get { @@ -5265,7 +5395,7 @@ public static string SearchDialog_UI_Title { } /// - /// Looks up a localized string similar to Cancel search. + /// 查找类似 Cancel search 的本地化字符串。 /// public static string SearchProgressDialog_UI_Button_CancelSearch { get { @@ -5274,7 +5404,7 @@ public static string SearchProgressDialog_UI_Button_CancelSearch { } /// - /// Looks up a localized string similar to Searching in progress.... + /// 查找类似 Searching in progress... 的本地化字符串。 /// public static string SearchProgressDialog_UI_Label_SearchingInProgress { get { @@ -5283,7 +5413,7 @@ public static string SearchProgressDialog_UI_Label_SearchingInProgress { } /// - /// Looks up a localized string similar to Searching.... + /// 查找类似 Searching... 的本地化字符串。 /// public static string SearchProgressDialog_UI_Title { get { @@ -5292,7 +5422,7 @@ public static string SearchProgressDialog_UI_Title { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Settings { get { @@ -5302,7 +5432,7 @@ public static System.Drawing.Bitmap Settings { } /// - /// Looks up a localized string similar to Settings. + /// 查找类似 Settings 的本地化字符串。 /// public static string SettingsDialog_Form_Text { get { @@ -5311,7 +5441,7 @@ public static string SettingsDialog_Form_Text { } /// - /// Looks up a localized string similar to Activate Portable Mode. + /// 查找类似 Activate Portable Mode 的本地化字符串。 /// public static string SettingsDialog_UI_ActivatePortableMode { get { @@ -5320,7 +5450,7 @@ public static string SettingsDialog_UI_ActivatePortableMode { } /// - /// Looks up a localized string similar to .... + /// 查找类似 ... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonArguments { get { @@ -5329,7 +5459,7 @@ public static string SettingsDialog_UI_Button_buttonArguments { } /// - /// Looks up a localized string similar to Change.... + /// 查找类似 Change... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonChangeFont { get { @@ -5338,7 +5468,7 @@ public static string SettingsDialog_UI_Button_buttonChangeFont { } /// - /// Looks up a localized string similar to Configure.... + /// 查找类似 Configure... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonConfigPlugin { get { @@ -5347,7 +5477,7 @@ public static string SettingsDialog_UI_Button_buttonConfigPlugin { } /// - /// Looks up a localized string similar to . + /// 查找类似 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsBackColor { get { @@ -5356,7 +5486,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsBackColor { } /// - /// Looks up a localized string similar to (no color). + /// 查找类似 (no color) 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsBackColorClear { get { @@ -5365,7 +5495,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsBackColorClear { } /// - /// Looks up a localized string similar to . + /// 查找类似 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsForeColor { get { @@ -5374,7 +5504,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsForeColor { } /// - /// Looks up a localized string similar to Enable all. + /// 查找类似 Enable all 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsPresetAll { get { @@ -5383,7 +5513,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsPresetAll { } /// - /// Looks up a localized string similar to Disable all. + /// 查找类似 Disable all 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsPresetNone { get { @@ -5392,7 +5522,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsPresetNone { } /// - /// Looks up a localized string similar to Non-whitespace defaults. + /// 查找类似 Non-whitespace defaults 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonControlCharsPresetNonWhitespace { get { @@ -5401,7 +5531,7 @@ public static string SettingsDialog_UI_Button_buttonControlCharsPresetNonWhitesp } /// - /// Looks up a localized string similar to Delete. + /// 查找类似 Delete 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonDelete { get { @@ -5410,7 +5540,7 @@ public static string SettingsDialog_UI_Button_buttonDelete { } /// - /// Looks up a localized string similar to Icon.... + /// 查找类似 Icon... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonIcon { get { @@ -5419,7 +5549,7 @@ public static string SettingsDialog_UI_Button_buttonIcon { } /// - /// Looks up a localized string similar to .... + /// 查找类似 ... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonSessionSaveDir { get { @@ -5428,7 +5558,7 @@ public static string SettingsDialog_UI_Button_buttonSessionSaveDir { } /// - /// Looks up a localized string similar to Color.... + /// 查找类似 Color... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonTailColor { get { @@ -5437,7 +5567,7 @@ public static string SettingsDialog_UI_Button_buttonTailColor { } /// - /// Looks up a localized string similar to Color.... + /// 查找类似 Color... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonTimespreadColor { get { @@ -5446,7 +5576,7 @@ public static string SettingsDialog_UI_Button_buttonTimespreadColor { } /// - /// Looks up a localized string similar to .... + /// 查找类似 ... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonTool { get { @@ -5455,7 +5585,7 @@ public static string SettingsDialog_UI_Button_buttonTool { } /// - /// Looks up a localized string similar to Add new. + /// 查找类似 Add new 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonToolAdd { get { @@ -5464,7 +5594,7 @@ public static string SettingsDialog_UI_Button_buttonToolAdd { } /// - /// Looks up a localized string similar to Remove. + /// 查找类似 Remove 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonToolDelete { get { @@ -5473,7 +5603,7 @@ public static string SettingsDialog_UI_Button_buttonToolDelete { } /// - /// Looks up a localized string similar to Down. + /// 查找类似 Down 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonToolDown { get { @@ -5482,7 +5612,7 @@ public static string SettingsDialog_UI_Button_buttonToolDown { } /// - /// Looks up a localized string similar to Up. + /// 查找类似 Up 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonToolUp { get { @@ -5491,7 +5621,7 @@ public static string SettingsDialog_UI_Button_buttonToolUp { } /// - /// Looks up a localized string similar to .... + /// 查找类似 ... 的本地化字符串。 /// public static string SettingsDialog_UI_Button_buttonWorkingDir { get { @@ -5500,7 +5630,7 @@ public static string SettingsDialog_UI_Button_buttonWorkingDir { } /// - /// Looks up a localized string similar to Ask before closing tabs. + /// 查找类似 Ask before closing tabs 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxAskCloseTabs { get { @@ -5509,7 +5639,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxAskCloseTabs { } /// - /// Looks up a localized string similar to Automatically pick for new files. + /// 查找类似 Automatically pick for new files 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxAutoPick { get { @@ -5518,7 +5648,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxAutoPick { } /// - /// Looks up a localized string similar to Show column finder. + /// 查找类似 Show column finder 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxColumnFinder { get { @@ -5527,7 +5657,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxColumnFinder { } /// - /// Looks up a localized string similar to Set last column width. + /// 查找类似 Set last column width 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxColumnSize { get { @@ -5536,7 +5666,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxColumnSize { } /// - /// Looks up a localized string similar to Bold. + /// 查找类似 Bold 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsBold { get { @@ -5545,7 +5675,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsBold { } /// - /// Looks up a localized string similar to Copy displayed form instead of raw characters. + /// 查找类似 Copy displayed form instead of raw characters 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsCopyDisplayedForm { get { @@ -5554,7 +5684,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsCopyDisplaye } /// - /// Looks up a localized string similar to Substitute control characters in display. + /// 查找类似 Substitute control characters in display 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsEnable { get { @@ -5563,7 +5693,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsEnable { } /// - /// Looks up a localized string similar to Italic. + /// 查找类似 Italic 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsItalic { get { @@ -5572,7 +5702,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxControlCharsItalic { } /// - /// Looks up a localized string similar to Filter tail enabled. + /// 查找类似 Filter tail enabled 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxFilterTail { get { @@ -5581,7 +5711,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxFilterTail { } /// - /// Looks up a localized string similar to Follow tail enabled. + /// 查找类似 Follow tail enabled 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxFollowTail { get { @@ -5590,7 +5720,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxFollowTail { } /// - /// Looks up a localized string similar to Use legacy file reader (slower). + /// 查找类似 Use legacy file reader (slower) 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxLegacyReader { get { @@ -5599,7 +5729,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxLegacyReader { } /// - /// Looks up a localized string similar to Mask has priority before history. + /// 查找类似 Mask has priority before history 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxMaskPrio { get { @@ -5608,7 +5738,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxMaskPrio { } /// - /// Looks up a localized string similar to Multi threaded filter. + /// 查找类似 Multi threaded filter 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxMultiThread { get { @@ -5617,7 +5747,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxMultiThread { } /// - /// Looks up a localized string similar to Re-open last used files. + /// 查找类似 Re-open last used files 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxOpenLastFiles { get { @@ -5626,7 +5756,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxOpenLastFiles { } /// - /// Looks up a localized string similar to Activate Portable Mode. + /// 查找类似 Activate Portable Mode 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxPortableMode { get { @@ -5635,7 +5765,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxPortableMode { } /// - /// Looks up a localized string similar to Reverse alpha. + /// 查找类似 Reverse alpha 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxReverseAlpha { get { @@ -5644,7 +5774,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxReverseAlpha { } /// - /// Looks up a localized string similar to Save and restore filter and filter tabs. + /// 查找类似 Save and restore filter and filter tabs 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxSaveFilter { get { @@ -5653,7 +5783,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxSaveFilter { } /// - /// Looks up a localized string similar to Automatically save persistence files (.lxp). + /// 查找类似 Automatically save persistence files (.lxp) 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxSaveSessions { get { @@ -5662,16 +5792,16 @@ public static string SettingsDialog_UI_CheckBox_checkBoxSaveSessions { } /// - /// Looks up a localized string similar to Show bookmark markers. + /// 查找类似 Show bookmark markers 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowBookmarkMarkers { get { return ResourceManager.GetString("SettingsDialog_UI_CheckBox_checkBoxShowBookmarkMarkers", resourceCulture); } } - + /// - /// Looks up a localized string similar to Show Error Message?. + /// 查找类似 Show Error Message? 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowErrorMessageOnlyOneInstance { get { @@ -5680,43 +5810,43 @@ public static string SettingsDialog_UI_CheckBox_checkBoxShowErrorMessageOnlyOneI } /// - /// Looks up a localized string similar to Show filter markers. + /// 查找类似 Show filter markers 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowFilterMarkers { get { return ResourceManager.GetString("SettingsDialog_UI_CheckBox_checkBoxShowFilterMarkers", resourceCulture); } } - + /// - /// Looks up a localized string similar to Show highlight markers. + /// 查找类似 Show highlight markers 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowHighlightMarkers { get { return ResourceManager.GetString("SettingsDialog_UI_CheckBox_checkBoxShowHighlightMarkers", resourceCulture); } } - + /// - /// Looks up a localized string similar to Show marker bar. + /// 查找类似 Show marker bar 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowMarkerBar { get { return ResourceManager.GetString("SettingsDialog_UI_CheckBox_checkBoxShowMarkerBar", resourceCulture); } } - + /// - /// Looks up a localized string similar to Show search markers. + /// 查找类似 Show search markers 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxShowSearchMarkers { get { return ResourceManager.GetString("SettingsDialog_UI_CheckBox_checkBoxShowSearchMarkers", resourceCulture); } } - + /// - /// Looks up a localized string similar to Allow only 1 Instance. + /// 查找类似 Allow only 1 Instance 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxSingleInstance { get { @@ -5725,7 +5855,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxSingleInstance { } /// - /// Looks up a localized string similar to Sync filter list enabled. + /// 查找类似 Sync filter list enabled 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxSyncFilter { get { @@ -5734,7 +5864,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxSyncFilter { } /// - /// Looks up a localized string similar to Pipe sysout to tab. + /// 查找类似 Pipe sysout to tab 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxSysout { get { @@ -5743,7 +5873,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxSysout { } /// - /// Looks up a localized string similar to Show tail state on tabs. + /// 查找类似 Show tail state on tabs 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxTailState { get { @@ -5752,7 +5882,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxTailState { } /// - /// Looks up a localized string similar to Show time spread. + /// 查找类似 Show time spread 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxTimeSpread { get { @@ -5761,7 +5891,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxTimeSpread { } /// - /// Looks up a localized string similar to Show timestamp control, if supported by columnizer. + /// 查找类似 Show timestamp control, if supported by columnizer 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_checkBoxTimestamp { get { @@ -5770,7 +5900,7 @@ public static string SettingsDialog_UI_CheckBox_checkBoxTimestamp { } /// - /// Looks up a localized string similar to If this mode is activated, the save file will be loaded from the Executable Location. + /// 查找类似 If this mode is activated, the save file will be loaded from the Executable Location 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_ToolTip_toolTipPortableMode { get { @@ -5779,7 +5909,7 @@ public static string SettingsDialog_UI_CheckBox_ToolTip_toolTipPortableMode { } /// - /// Looks up a localized string similar to File Reader algorithm. + /// 查找类似 File Reader algorithm 的本地化字符串。 /// public static string SettingsDialog_UI_CheckBox_ToolTip_toolTipReaderTyp { get { @@ -5788,7 +5918,7 @@ public static string SettingsDialog_UI_CheckBox_ToolTip_toolTipReaderTyp { } /// - /// Looks up a localized string similar to HeaderName. + /// 查找类似 HeaderName 的本地化字符串。 /// public static string SettingsDialog_UI_ComboBox_Encoding_ValueMember_HeaderName { get { @@ -5797,7 +5927,7 @@ public static string SettingsDialog_UI_ComboBox_Encoding_ValueMember_HeaderName } /// - /// Looks up a localized string similar to Encoding to be used when no BOM header and no persistence data is available.. + /// 查找类似 Encoding to be used when no BOM header and no persistence data is available. 的本地化字符串。 /// public static string SettingsDialog_UI_ComboBox_ToolTip_toolTipEncoding { get { @@ -5806,7 +5936,7 @@ public static string SettingsDialog_UI_ComboBox_ToolTip_toolTipEncoding { } /// - /// Looks up a localized string similar to Userinterface language. + /// 查找类似 Userinterface language 的本地化字符串。 /// public static string SettingsDialog_UI_ComboBox_ToolTip_toolTipLanguage { get { @@ -5815,7 +5945,7 @@ public static string SettingsDialog_UI_ComboBox_ToolTip_toolTipLanguage { } /// - /// Looks up a localized string similar to Could not create / delete marker for Portable Mode: {0}. + /// 查找类似 Could not create / delete marker for Portable Mode: {0} 的本地化字符串。 /// public static string SettingsDialog_UI_CouldNotCreatePortableMode { get { @@ -5824,7 +5954,7 @@ public static string SettingsDialog_UI_CouldNotCreatePortableMode { } /// - /// Looks up a localized string similar to Type. + /// 查找类似 Type 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridView_columnHeaderColumnizerMaskType { get { @@ -5833,7 +5963,7 @@ public static string SettingsDialog_UI_DataGridView_columnHeaderColumnizerMaskTy } /// - /// Looks up a localized string similar to Columnizer '{0}' is not installed — this entry will be skipped.. + /// 查找类似 Columnizer '{0}' is not installed — this entry will be skipped. 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridView_columnTooltipColumnizerMaskStale { get { @@ -5842,7 +5972,7 @@ public static string SettingsDialog_UI_DataGridView_columnTooltipColumnizerMaskS } /// - /// Looks up a localized string similar to Glob uses * and ? wildcards. Regex uses .NET regular expression syntax.. + /// 查找类似 Glob uses * and ? wildcards. Regex uses .NET regular expression syntax. 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridView_columnTooltipColumnizerMaskType { get { @@ -5851,7 +5981,7 @@ public static string SettingsDialog_UI_DataGridView_columnTooltipColumnizerMaskT } /// - /// Looks up a localized string similar to Columnizer. + /// 查找类似 Columnizer 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridViewComboBoxColumn_Columnizer { get { @@ -5860,7 +5990,7 @@ public static string SettingsDialog_UI_DataGridViewComboBoxColumn_Columnizer { } /// - /// Looks up a localized string similar to Highlight group. + /// 查找类似 Highlight group 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridViewComboBoxColumn_HighlightGroup { get { @@ -5869,7 +5999,7 @@ public static string SettingsDialog_UI_DataGridViewComboBoxColumn_HighlightGroup } /// - /// Looks up a localized string similar to File name mask (RegEx). + /// 查找类似 File name mask (RegEx) 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridViewTextBoxColumn_FileMask { get { @@ -5878,7 +6008,7 @@ public static string SettingsDialog_UI_DataGridViewTextBoxColumn_FileMask { } /// - /// Looks up a localized string similar to File name mask (RegEx). + /// 查找类似 File name mask (RegEx) 的本地化字符串。 /// public static string SettingsDialog_UI_DataGridViewTextBoxColumn_FileName { get { @@ -5887,7 +6017,7 @@ public static string SettingsDialog_UI_DataGridViewTextBoxColumn_FileName { } /// - /// Looks up a localized string similar to Deactivate Portable Mode. + /// 查找类似 Deactivate Portable Mode 的本地化字符串。 /// public static string SettingsDialog_UI_DeActivatePortableMode { get { @@ -5896,7 +6026,7 @@ public static string SettingsDialog_UI_DeActivatePortableMode { } /// - /// Looks up a localized string similar to Settings could not be imported: {0}. + /// 查找类似 Settings could not be imported: {0} 的本地化字符串。 /// public static string SettingsDialog_UI_Error_SettingsCouldNotBeImported { get { @@ -5905,7 +6035,7 @@ public static string SettingsDialog_UI_Error_SettingsCouldNotBeImported { } /// - /// Looks up a localized string similar to Settings {0}|All files {1}. + /// 查找类似 Settings {0}|All files {1} 的本地化字符串。 /// public static string SettingsDialog_UI_Filter_ExportSettings { get { @@ -5914,7 +6044,7 @@ public static string SettingsDialog_UI_Filter_ExportSettings { } /// - /// Looks up a localized string similar to Choose folder for LogExpert's session files. + /// 查找类似 Choose folder for LogExpert's session files 的本地化字符串。 /// public static string SettingsDialog_UI_FolderBrowser_folderBrowserSessionSaveDir { get { @@ -5923,7 +6053,7 @@ public static string SettingsDialog_UI_FolderBrowser_folderBrowserSessionSaveDir } /// - /// Looks up a localized string similar to Select a working directory. + /// 查找类似 Select a working directory 的本地化字符串。 /// public static string SettingsDialog_UI_FolderBrowser_folderBrowserWorkingDir { get { @@ -5932,7 +6062,7 @@ public static string SettingsDialog_UI_FolderBrowser_folderBrowserWorkingDir { } /// - /// Looks up a localized string similar to Columnizer selection priority. + /// 查找类似 Columnizer selection priority 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxColumnizerPriority { get { @@ -5941,7 +6071,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxColumnizerPriority { } /// - /// Looks up a localized string similar to Appearance. + /// 查找类似 Appearance 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsAppearance { get { @@ -5950,7 +6080,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsAppearance { } /// - /// Looks up a localized string similar to Clipboard. + /// 查找类似 Clipboard 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsClipboard { get { @@ -5959,7 +6089,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsClipboard { } /// - /// Looks up a localized string similar to Display style. + /// 查找类似 Display style 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsStyle { get { @@ -5968,7 +6098,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxControlCharsStyle { } /// - /// Looks up a localized string similar to CPU and stuff. + /// 查找类似 CPU and stuff 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxCPUAndStuff { get { @@ -5977,7 +6107,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxCPUAndStuff { } /// - /// Looks up a localized string similar to Default filename pattern. + /// 查找类似 Default filename pattern 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxDefaultFileNamePattern { get { @@ -5986,7 +6116,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxDefaultFileNamePattern { } /// - /// Looks up a localized string similar to Defaults. + /// 查找类似 Defaults 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxDefaults { get { @@ -5995,7 +6125,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxDefaults { } /// - /// Looks up a localized string similar to Display mode. + /// 查找类似 Display mode 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxDisplayMode { get { @@ -6004,7 +6134,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxDisplayMode { } /// - /// Looks up a localized string similar to Font. + /// 查找类似 Font 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxFont { get { @@ -6013,7 +6143,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxFont { } /// - /// Looks up a localized string similar to Line buffer usage. + /// 查找类似 Line buffer usage 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxLineBufferUsage { get { @@ -6022,7 +6152,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxLineBufferUsage { } /// - /// Looks up a localized string similar to Misc. + /// 查找类似 Misc 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxMisc { get { @@ -6031,7 +6161,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxMisc { } /// - /// Looks up a localized string similar to Mouse Drag Default. + /// 查找类似 Mouse Drag Default 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxMouseDragDefaults { get { @@ -6040,7 +6170,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxMouseDragDefaults { } /// - /// Looks up a localized string similar to Persistence file location. + /// 查找类似 Persistence file location 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxPersistantFileLocation { get { @@ -6049,7 +6179,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxPersistantFileLocation { } /// - /// Looks up a localized string similar to Plugins. + /// 查找类似 Plugins 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxPlugins { get { @@ -6058,7 +6188,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxPlugins { } /// - /// Looks up a localized string similar to Settings. + /// 查找类似 Settings 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxSettings { get { @@ -6067,7 +6197,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxSettings { } /// - /// Looks up a localized string similar to Time spread display. + /// 查找类似 Time spread display 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxTimeSpreadDisplay { get { @@ -6076,7 +6206,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxTimeSpreadDisplay { } /// - /// Looks up a localized string similar to Timestamp navigation control. + /// 查找类似 Timestamp navigation control 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxTimeStampNavigationControl { get { @@ -6085,7 +6215,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxTimeStampNavigationContr } /// - /// Looks up a localized string similar to Tool settings. + /// 查找类似 Tool settings 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxToolSettings { get { @@ -6094,7 +6224,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxToolSettings { } /// - /// Looks up a localized string similar to When opening multiple files.... + /// 查找类似 When opening multiple files... 的本地化字符串。 /// public static string SettingsDialog_UI_GroupBox_groupBoxWhenOpeningMultiFile { get { @@ -6103,7 +6233,7 @@ public static string SettingsDialog_UI_GroupBox_groupBoxWhenOpeningMultiFile { } /// - /// Looks up a localized string similar to Arguments:. + /// 查找类似 Arguments: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelArguments { get { @@ -6112,7 +6242,7 @@ public static string SettingsDialog_UI_Label_labelArguments { } /// - /// Looks up a localized string similar to Color mode (restart required). + /// 查找类似 Color mode (restart required) 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelColorMode { get { @@ -6121,7 +6251,7 @@ public static string SettingsDialog_UI_Label_labelColorMode { } /// - /// Looks up a localized string similar to Background colour:. + /// 查找类似 Background colour: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelControlCharsBackColor { get { @@ -6130,7 +6260,7 @@ public static string SettingsDialog_UI_Label_labelControlCharsBackColor { } /// - /// Looks up a localized string similar to Foreground colour:. + /// 查找类似 Foreground colour: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelControlCharsForeColor { get { @@ -6139,7 +6269,7 @@ public static string SettingsDialog_UI_Label_labelControlCharsForeColor { } /// - /// Looks up a localized string similar to Enable substitution above to apply.. + /// 查找类似 Enable substitution above to apply. 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelControlCharsHint { get { @@ -6148,7 +6278,7 @@ public static string SettingsDialog_UI_Label_labelControlCharsHint { } /// - /// Looks up a localized string similar to Display only — does not modify file contents or affect search, filter, or copy-to-clipboard (unless the option below is enabled). Enabling this can make some log files look unusual.. + /// 查找类似 Display only — does not modify file contents or affect search, filter, or copy-to-clipboard (unless the option below is enabled). Enabling this can make some log files look unusual. 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelControlCharsWarning { get { @@ -6157,7 +6287,7 @@ public static string SettingsDialog_UI_Label_labelControlCharsWarning { } /// - /// Looks up a localized string similar to Default encoding. + /// 查找类似 Default encoding 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelDefaultEncoding { get { @@ -6166,7 +6296,7 @@ public static string SettingsDialog_UI_Label_labelDefaultEncoding { } /// - /// Looks up a localized string similar to File polling interval (ms):. + /// 查找类似 File polling interval (ms): 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelFilePollingInterval { get { @@ -6175,7 +6305,7 @@ public static string SettingsDialog_UI_Label_labelFilePollingInterval { } /// - /// Looks up a localized string similar to Font. + /// 查找类似 Font 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelFont { get { @@ -6184,7 +6314,7 @@ public static string SettingsDialog_UI_Label_labelFont { } /// - /// Looks up a localized string similar to Hint: Pressing the Shift key while dropping files onto LogExpert will switch the behaviour from single to multi and vice versa.. + /// 查找类似 Hint: Pressing the Shift key while dropping files onto LogExpert will switch the behaviour from single to multi and vice versa. 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelHintMultiFile { get { @@ -6193,7 +6323,7 @@ public static string SettingsDialog_UI_Label_labelHintMultiFile { } /// - /// Looks up a localized string similar to Changes will take effect on next file load. + /// 查找类似 Changes will take effect on next file load 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelInfo { get { @@ -6202,7 +6332,7 @@ public static string SettingsDialog_UI_Label_labelInfo { } /// - /// Looks up a localized string similar to Language (requires restart):. + /// 查找类似 Language (requires restart): 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelLanguage { get { @@ -6211,7 +6341,7 @@ public static string SettingsDialog_UI_Label_labelLanguage { } /// - /// Looks up a localized string similar to Lines/block. + /// 查找类似 Lines/block 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelLinesPerBlock { get { @@ -6220,7 +6350,7 @@ public static string SettingsDialog_UI_Label_labelLinesPerBlock { } /// - /// Looks up a localized string similar to Max days:. + /// 查找类似 Max days: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelMaxDays { get { @@ -6229,25 +6359,25 @@ public static string SettingsDialog_UI_Label_labelMaxDays { } /// - /// Looks up a localized string similar to Maximum filter entries. + /// 查找类似 Maximum Display Length (restart required) 的本地化字符串。 /// - public static string SettingsDialog_UI_Label_labelMaximumFilterEntries { + public static string SettingsDialog_UI_Label_labelMaxDisplayLength { get { - return ResourceManager.GetString("SettingsDialog_UI_Label_labelMaximumFilterEntries", resourceCulture); + return ResourceManager.GetString("SettingsDialog_UI_Label_labelMaxDisplayLength", resourceCulture); } } /// - /// Looks up a localized string similar to Maximum Display Length (restart required). + /// 查找类似 Maximum filter entries 的本地化字符串。 /// - public static string SettingsDialog_UI_Label_labelMaxDisplayLength { + public static string SettingsDialog_UI_Label_labelMaximumFilterEntries { get { - return ResourceManager.GetString("SettingsDialog_UI_Label_labelMaxDisplayLength", resourceCulture); + return ResourceManager.GetString("SettingsDialog_UI_Label_labelMaximumFilterEntries", resourceCulture); } } /// - /// Looks up a localized string similar to Maximum filter entries displayed. + /// 查找类似 Maximum filter entries displayed 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelMaximumFilterEntriesDisplayed { get { @@ -6256,7 +6386,7 @@ public static string SettingsDialog_UI_Label_labelMaximumFilterEntriesDisplayed } /// - /// Looks up a localized string similar to Maximum Line Length (restart required). + /// 查找类似 Maximum Line Length (restart required) 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelMaximumLineLength { get { @@ -6265,7 +6395,7 @@ public static string SettingsDialog_UI_Label_labelMaximumLineLength { } /// - /// Looks up a localized string similar to Note: You can always load your logfiles as MultiFile automatically if the files names follow the MultiFile naming rule (<filename>, <filename>.1, <filename>.2, ...). Simply choose 'MultiFile' from the File menu after loading the first file.. + /// 查找类似 Note: You can always load your logfiles as MultiFile automatically if the files names follow the MultiFile naming rule (<filename>, <filename>.1, <filename>.2, ...). Simply choose 'MultiFile' from the File menu after loading the first file. 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelNoteMultiFile { get { @@ -6274,7 +6404,7 @@ public static string SettingsDialog_UI_Label_labelNoteMultiFile { } /// - /// Looks up a localized string similar to Number of blocks. + /// 查找类似 Number of blocks 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelNumberOfBlocks { get { @@ -6283,7 +6413,7 @@ public static string SettingsDialog_UI_Label_labelNumberOfBlocks { } /// - /// Looks up a localized string similar to Pattern:. + /// 查找类似 Pattern: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelPattern { get { @@ -6292,7 +6422,7 @@ public static string SettingsDialog_UI_Label_labelPattern { } /// - /// Looks up a localized string similar to Place Holder Text, this will be replaced programmatically. + /// 查找类似 Place Holder Text, this will be replaced programmatically 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelSessionSaveOwnDir { get { @@ -6301,7 +6431,7 @@ public static string SettingsDialog_UI_Label_labelSessionSaveOwnDir { } /// - /// Looks up a localized string similar to Program:. + /// 查找类似 Program: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelTool { get { @@ -6310,7 +6440,7 @@ public static string SettingsDialog_UI_Label_labelTool { } /// - /// Looks up a localized string similar to Columnizer for output:. + /// 查找类似 Columnizer for output: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelToolColumnizerForOutput { get { @@ -6319,7 +6449,7 @@ public static string SettingsDialog_UI_Label_labelToolColumnizerForOutput { } /// - /// Looks up a localized string similar to Name:. + /// 查找类似 Name: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelToolName { get { @@ -6328,8 +6458,8 @@ public static string SettingsDialog_UI_Label_labelToolName { } /// - /// Looks up a localized string similar to You can configure as many tools as you want. - ///Checked tools will appear in the icon bar. All other tools are available in the tools menu.. + /// 查找类似 You can configure as many tools as you want. + ///Checked tools will appear in the icon bar. All other tools are available in the tools menu. 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelToolsDescription { get { @@ -6338,7 +6468,7 @@ public static string SettingsDialog_UI_Label_labelToolsDescription { } /// - /// Looks up a localized string similar to ! Changing the Maximum Line Length can impact performance and is not recommended !. + /// 查找类似 ! Changing the Maximum Line Length can impact performance and is not recommended ! 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelWarningMaximumLineLength { get { @@ -6347,7 +6477,7 @@ public static string SettingsDialog_UI_Label_labelWarningMaximumLineLength { } /// - /// Looks up a localized string similar to Working dir:. + /// 查找类似 Working dir: 的本地化字符串。 /// public static string SettingsDialog_UI_Label_labelWorkingDir { get { @@ -6356,7 +6486,7 @@ public static string SettingsDialog_UI_Label_labelWorkingDir { } /// - /// Looks up a localized string similar to Failed to activate portable mode: {0}. + /// 查找类似 Failed to activate portable mode: {0} 的本地化字符串。 /// public static string SettingsDialog_UI_PortableMode_ActivationError { get { @@ -6365,7 +6495,7 @@ public static string SettingsDialog_UI_PortableMode_ActivationError { } /// - /// Looks up a localized string similar to Do you want to copy your current settings to the portable configuration folder?. + /// 查找类似 Do you want to copy your current settings to the portable configuration folder? 的本地化字符串。 /// public static string SettingsDialog_UI_PortableMode_CopySettingsQuestion { get { @@ -6374,7 +6504,7 @@ public static string SettingsDialog_UI_PortableMode_CopySettingsQuestion { } /// - /// Looks up a localized string similar to Some files could not be migrated: {0}. + /// 查找类似 Some files could not be migrated: {0} 的本地化字符串。 /// public static string SettingsDialog_UI_PortableMode_MigrationError { get { @@ -6383,7 +6513,7 @@ public static string SettingsDialog_UI_PortableMode_MigrationError { } /// - /// Looks up a localized string similar to Do you want to move the portable settings back to the default configuration folder (%APPDATA%\LogExpert)?. + /// 查找类似 Do you want to move the portable settings back to the default configuration folder (%APPDATA%\LogExpert)? 的本地化字符串。 /// public static string SettingsDialog_UI_PortableMode_MoveSettingsQuestion { get { @@ -6392,7 +6522,7 @@ public static string SettingsDialog_UI_PortableMode_MoveSettingsQuestion { } /// - /// Looks up a localized string similar to Portable Mode. + /// 查找类似 Portable Mode 的本地化字符串。 /// public static string SettingsDialog_UI_PortableMode_Title { get { @@ -6401,7 +6531,7 @@ public static string SettingsDialog_UI_PortableMode_Title { } /// - /// Looks up a localized string similar to Ask what to do. + /// 查找类似 Ask what to do 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonAskWhatToDo { get { @@ -6410,7 +6540,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonAskWhatToDo { } /// - /// Looks up a localized string similar to Abbreviation (<SOH>). + /// 查找类似 Abbreviation (<SOH>) 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleAbbreviation { get { @@ -6419,7 +6549,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleAb } /// - /// Looks up a localized string similar to Caret notation (^X). + /// 查找类似 Caret notation (^X) 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleCaret { get { @@ -6428,7 +6558,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleCa } /// - /// Looks up a localized string similar to C escape sequence (\x01). + /// 查找类似 C escape sequence (\x01) 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleCEscape { get { @@ -6437,7 +6567,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleCE } /// - /// Looks up a localized string similar to Unicode Control Pictures (default). + /// 查找类似 Unicode Control Pictures (default) 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleControlPictures { get { @@ -6446,7 +6576,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleCo } /// - /// Looks up a localized string similar to ISO 2047 graphics. + /// 查找类似 ISO 2047 graphics 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleIso2047 { get { @@ -6455,7 +6585,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonControlCharStyleIs } /// - /// Looks up a localized string similar to Horizontal. + /// 查找类似 Horizontal 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonHorizMouseDrag { get { @@ -6464,7 +6594,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonHorizMouseDrag { } /// - /// Looks up a localized string similar to Line view. + /// 查找类似 Line view 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonLineView { get { @@ -6473,7 +6603,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonLineView { } /// - /// Looks up a localized string similar to Load every file into a separate tab. + /// 查找类似 Load every file into a separate tab 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonLoadEveryFileIntoSeperatedTab { get { @@ -6482,7 +6612,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonLoadEveryFileIntoS } /// - /// Looks up a localized string similar to Application startup directory. + /// 查找类似 Application startup directory 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonSessionApplicationStartupDir { get { @@ -6491,7 +6621,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonSessionApplication } /// - /// Looks up a localized string similar to Same directory as log file. + /// 查找类似 Same directory as log file 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonSessionSameDir { get { @@ -6500,7 +6630,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonSessionSameDir { } /// - /// Looks up a localized string similar to MyDocuments/LogExpert. + /// 查找类似 MyDocuments/LogExpert 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonsessionSaveDocuments { get { @@ -6509,7 +6639,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonsessionSaveDocumen } /// - /// Looks up a localized string similar to Own directory. + /// 查找类似 Own directory 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonSessionSaveOwn { get { @@ -6518,7 +6648,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonSessionSaveOwn { } /// - /// Looks up a localized string similar to Time view. + /// 查找类似 Time view 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonTimeView { get { @@ -6527,7 +6657,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonTimeView { } /// - /// Looks up a localized string similar to Treat all files as one MultiFile. + /// 查找类似 Treat all files as one MultiFile 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonTreatAllFilesAsOneMultifile { get { @@ -6536,7 +6666,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonTreatAllFilesAsOne } /// - /// Looks up a localized string similar to Vertical. + /// 查找类似 Vertical 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonVerticalMouseDrag { get { @@ -6545,7 +6675,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonVerticalMouseDrag } /// - /// Looks up a localized string similar to Vertical Inverted. + /// 查找类似 Vertical Inverted 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioButtonVerticalMouseDragInverted { get { @@ -6554,7 +6684,7 @@ public static string SettingsDialog_UI_RadioButton_radioButtonVerticalMouseDragI } /// - /// Looks up a localized string similar to Use history then mask (default). + /// 查找类似 Use history then mask (default) 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityHistoryThenMask { get { @@ -6563,7 +6693,7 @@ public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityHistor } /// - /// Looks up a localized string similar to Use mask, override per-file persistence. + /// 查找类似 Use mask, override per-file persistence 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityMaskOverridesPersistence { get { @@ -6572,7 +6702,7 @@ public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityMaskOv } /// - /// Looks up a localized string similar to Use mask, then history. + /// 查找类似 Use mask, then history 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityMaskThenHistory { get { @@ -6581,7 +6711,7 @@ public static string SettingsDialog_UI_RadioButton_radioColumnizerPriorityMaskTh } /// - /// Looks up a localized string similar to This path is based on the executable and where it has been started from.. + /// 查找类似 This path is based on the executable and where it has been started from. 的本地化字符串。 /// public static string SettingsDialog_UI_RadioButton_ToolTip_toolTipSessionApplicationStartupDir { get { @@ -6590,7 +6720,7 @@ public static string SettingsDialog_UI_RadioButton_ToolTip_toolTipSessionApplica } /// - /// Looks up a localized string similar to Settings imported. + /// 查找类似 Settings imported 的本地化字符串。 /// public static string SettingsDialog_UI_SettingsImported { get { @@ -6599,7 +6729,7 @@ public static string SettingsDialog_UI_SettingsImported { } /// - /// Looks up a localized string similar to Columnizers. + /// 查找类似 Columnizers 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageColumnizers { get { @@ -6608,7 +6738,7 @@ public static string SettingsDialog_UI_TabPage_tabPageColumnizers { } /// - /// Looks up a localized string similar to Control characters. + /// 查找类似 Control characters 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageControlCharacters { get { @@ -6617,7 +6747,7 @@ public static string SettingsDialog_UI_TabPage_tabPageControlCharacters { } /// - /// Looks up a localized string similar to External Tools. + /// 查找类似 External Tools 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageExternalTools { get { @@ -6626,7 +6756,7 @@ public static string SettingsDialog_UI_TabPage_tabPageExternalTools { } /// - /// Looks up a localized string similar to Highlight. + /// 查找类似 Highlight 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageHighlightMask { get { @@ -6635,16 +6765,16 @@ public static string SettingsDialog_UI_TabPage_tabPageHighlightMask { } /// - /// Looks up a localized string similar to Marker bar. + /// 查找类似 Marker bar 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageMarkerBar { get { return ResourceManager.GetString("SettingsDialog_UI_TabPage_tabPageMarkerBar", resourceCulture); } } - + /// - /// Looks up a localized string similar to Memory/CPU. + /// 查找类似 Memory/CPU 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageMemory { get { @@ -6653,7 +6783,7 @@ public static string SettingsDialog_UI_TabPage_tabPageMemory { } /// - /// Looks up a localized string similar to MultiFile. + /// 查找类似 MultiFile 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageMultiFile { get { @@ -6662,7 +6792,7 @@ public static string SettingsDialog_UI_TabPage_tabPageMultiFile { } /// - /// Looks up a localized string similar to Plugins. + /// 查找类似 Plugins 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPagePlugins { get { @@ -6671,7 +6801,7 @@ public static string SettingsDialog_UI_TabPage_tabPagePlugins { } /// - /// Looks up a localized string similar to Persistence. + /// 查找类似 Persistence 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageSessions { get { @@ -6680,7 +6810,7 @@ public static string SettingsDialog_UI_TabPage_tabPageSessions { } /// - /// Looks up a localized string similar to Timestamp features. + /// 查找类似 Timestamp features 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageTimeStampFeatures { get { @@ -6689,7 +6819,7 @@ public static string SettingsDialog_UI_TabPage_tabPageTimeStampFeatures { } /// - /// Looks up a localized string similar to View settings. + /// 查找类似 View settings 的本地化字符串。 /// public static string SettingsDialog_UI_TabPage_tabPageViewSettings { get { @@ -6698,7 +6828,7 @@ public static string SettingsDialog_UI_TabPage_tabPageViewSettings { } /// - /// Looks up a localized string similar to Export Settings to file. + /// 查找类似 Export Settings to file 的本地化字符串。 /// public static string SettingsDialog_UI_Title_ExportSettings { get { @@ -6707,7 +6837,7 @@ public static string SettingsDialog_UI_Title_ExportSettings { } /// - /// Looks up a localized resource of type System.Drawing.Bitmap. + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// public static System.Drawing.Bitmap Star { get { @@ -6717,7 +6847,7 @@ public static System.Drawing.Bitmap Star { } /// - /// Looks up a localized string similar to TabController is already initialized with a DockPanel. + /// 查找类似 TabController is already initialized with a DockPanel 的本地化字符串。 /// public static string TabController_Error_Message_AlreadInitialized { get { @@ -6726,7 +6856,7 @@ public static string TabController_Error_Message_AlreadInitialized { } /// - /// Looks up a localized string similar to TabController is not initialized. Call InitializeDockPanel first.. + /// 查找类似 TabController is not initialized. Call InitializeDockPanel first. 的本地化字符串。 /// public static string TabController_Error_Message_NotInitialized { get { @@ -6735,7 +6865,7 @@ public static string TabController_Error_Message_NotInitialized { } /// - /// Looks up a localized string similar to Window already tracked. + /// 查找类似 Window already tracked 的本地化字符串。 /// public static string TabController_Error_Message_WindowAlreadyTracked { get { @@ -6744,7 +6874,7 @@ public static string TabController_Error_Message_WindowAlreadyTracked { } /// - /// Looks up a localized string similar to Name:. + /// 查找类似 Name: 的本地化字符串。 /// public static string TabRenameDialog_UI_Label_Name { get { @@ -6753,7 +6883,7 @@ public static string TabRenameDialog_UI_Label_Name { } /// - /// Looks up a localized string similar to Rename Tab. + /// 查找类似 Rename Tab 的本地化字符串。 /// public static string TabRenameDialog_UI_Title { get { @@ -6762,7 +6892,7 @@ public static string TabRenameDialog_UI_Title { } /// - /// Looks up a localized string similar to Calculating time spread view.... + /// 查找类似 Calculating time spread view... 的本地化字符串。 /// public static string TimeSpreadingControl_UI_GFX_OnTimeSpreadCalcStartCalc_CalculatingTimeSpreadView { get { @@ -6771,8 +6901,8 @@ public static string TimeSpreadingControl_UI_GFX_OnTimeSpreadCalcStartCalc_Calcu } /// - /// Looks up a localized string similar to Line {0} - ///{1}. + /// 查找类似 Line {0} + ///{1} 的本地化字符串。 /// public static string TimeSpreadingControl_UI_ToolTip { get { @@ -6781,7 +6911,7 @@ public static string TimeSpreadingControl_UI_ToolTip { } /// - /// Looks up a localized string similar to RegEx Help. + /// 查找类似 RegEx Help 的本地化字符串。 /// public static string ToolArgsDialog_UI_Button_RegexHelp { get { @@ -6790,7 +6920,7 @@ public static string ToolArgsDialog_UI_Button_RegexHelp { } /// - /// Looks up a localized string similar to Test. + /// 查找类似 Test 的本地化字符串。 /// public static string ToolArgsDialog_UI_Button_Test { get { @@ -6799,7 +6929,7 @@ public static string ToolArgsDialog_UI_Button_Test { } /// - /// Looks up a localized string similar to %L = Current line number + /// 查找类似 %L = Current line number ///%N = Current log file name without path ///%P = Path (directory) of current log file ///%F = Full name (incl. path) of log file @@ -6812,7 +6942,7 @@ public static string ToolArgsDialog_UI_Button_Test { ///?\"<name>\" = variable parameter 'name' ///?\"<name>\"(def1,def2,...) = variable parameter with predefined values ///{<regex>}{<replace>}: - ///Regex search/replace on current selected line. + ///Regex search/replace on current selected line 的本地化字符串。 /// public static string ToolArgsDialog_UI_HelpText { get { @@ -6821,7 +6951,7 @@ public static string ToolArgsDialog_UI_HelpText { } /// - /// Looks up a localized string similar to Enter command line:. + /// 查找类似 Enter command line: 的本地化字符串。 /// public static string ToolArgsDialog_UI_Label_EnterCommandLine { get { @@ -6830,138 +6960,12 @@ public static string ToolArgsDialog_UI_Label_EnterCommandLine { } /// - /// Looks up a localized string similar to Tool Arguments Help. + /// 查找类似 Tool Arguments Help 的本地化字符串。 /// public static string ToolArgsDialog_UI_Title { get { return ResourceManager.GetString("ToolArgsDialog_UI_Title", resourceCulture); } } - - /// - /// Looks up a localized string similar to Create a new highlight item (opens the editor dialog). - /// - public static string HighlightDialog_UI_Button_ToolTip_btnAdd { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnAdd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Copy the selected highlight into a new one (opens the editor dialog). - /// - public static string HighlightDialog_UI_Button_ToolTip_btnCopy { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnCopy", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Edit the selected highlight in the editor dialog. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnEdit { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnEdit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete the current highlight. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnDelete { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnDelete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Move the current highlight one position up. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnMoveUp { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveUp", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Move the current highlight one position down. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnMoveDown { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveDown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Export highlight groups. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnExportGroup { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnExportGroup", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Import highlight groups. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnImportGroup { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnImportGroup", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Move the current highlight group one position down. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnMoveGroupDown { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveGroupDown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Move the current highlight group one position up. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnMoveGroupUp { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnMoveGroupUp", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Copy the current highlight group into a new one. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnCopyGroup { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnCopyGroup", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete the current highlight group. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnDeleteGroup { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnDeleteGroup", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Create a new empty highlight group. - /// - public static string HighlightDialog_UI_Button_ToolTip_btnNewGroup { - get { - return ResourceManager.GetString("HighlightDialog_UI_Button_ToolTip_btnNewGroup", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Choose a group to create different highlight settings. Type in a name to change the name of a group.. - /// - public static string HighlightDialog_UI_ComboBox_ToolTip_comboBoxGroups { - get { - return ResourceManager.GetString("HighlightDialog_UI_ComboBox_ToolTip_comboBoxGroups", resourceCulture); - } - } } } diff --git a/src/LogExpert.Resources/Resources.de.resx b/src/LogExpert.Resources/Resources.de.resx index a5db8d2e8..685287bb8 100644 --- a/src/LogExpert.Resources/Resources.de.resx +++ b/src/LogExpert.Resources/Resources.de.resx @@ -1176,7 +1176,7 @@ Ein ausgewähltes Tool erscheint in der Iconbar. Alle anderen verfügbaren Tools Zu Tab kopieren - + Detach-Modus @@ -1375,7 +1375,7 @@ Ein ausgewähltes Tool erscheint in der Iconbar. Alle anderen verfügbaren Tools Kopiert alle selektierten Zeilen in einen neuen Tab - + Zeigt das aktive Protokoll allein in einem eigenen Fenster an und blendet das Hauptfenster aus diff --git a/src/LogExpert.Resources/Resources.resx b/src/LogExpert.Resources/Resources.resx index c5dd8c054..6ab9b9ab8 100644 --- a/src/LogExpert.Resources/Resources.resx +++ b/src/LogExpert.Resources/Resources.resx @@ -1218,7 +1218,7 @@ Checked tools will appear in the icon bar. All other tools are available in the Copy to Tab - + Detach Mode @@ -1386,7 +1386,7 @@ Checked tools will appear in the icon bar. All other tools are available in the Copies all selected lines into a new tab page - + Shows the active log alone in its own window and hides the main window diff --git a/src/LogExpert.Resources/Resources.zh-CN.resx b/src/LogExpert.Resources/Resources.zh-CN.resx index 8fb1eece7..f1e7259fd 100644 --- a/src/LogExpert.Resources/Resources.zh-CN.resx +++ b/src/LogExpert.Resources/Resources.zh-CN.resx @@ -1088,7 +1088,7 @@ 复制到标签页 - + 分离模式 @@ -1253,7 +1253,7 @@ 将所有选中行复制到新标签页 - + 在独立窗口中仅显示当前日志,并隐藏主窗口 diff --git a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs index a3e332af2..d33f327f8 100644 --- a/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/DetachModeControllerTests.cs @@ -24,13 +24,13 @@ namespace LogExpert.UI.Tests.Services; [TestFixture] [SupportedOSPlatform("windows")] [Apartment(ApartmentState.STA)] -[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1001:Types that own disposable fields should be disposable", Justification = "NUnit disposes the fields in TearDown.")] -internal class DetachModeControllerTests +internal class DetachModeControllerTests : IDisposable { private Form _form; private DockPanel _dockPanel; private TabController _tabController; private DetachModeController _controller; + private bool _disposed; [SetUp] public void Setup () @@ -59,6 +59,33 @@ public void TearDown () _form?.Dispose(); } + #region IDisposable Implementation + + public void Dispose () + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose (bool disposing) + { + if (_disposed) + { + return; + } + + if (disposing) + { + _controller?.Dispose(); + _tabController?.Dispose(); + _form?.Dispose(); + } + + _disposed = true; + } + + #endregion + [Test] public void Enter_DetachesTheActiveWindowAsAWindowLikeFloat () { @@ -93,9 +120,7 @@ public void Enter_DetachesTheActiveWindowAsAWindowLikeFloat () [Test] public void Enter_GivesTheFloatItsOwnIconInsteadOfTheLogWindowSharedOne () { - // Arrange — the suite's SetText() assigns the log window's icon object to the float, but - // the shell disposes and replaces that object on every tail refresh, which would leave the - // float holding a disposed icon and crash the next handle recreation. + // Arrange var windows = AddWindows("first.log"); windows[0].Icon = SystemIcons.Information; var active = _dockPanel.ActiveContent as LogWindow; @@ -118,7 +143,7 @@ public void Enter_GivesTheFloatItsOwnIconInsteadOfTheLogWindowSharedOne () [Test] public void Enter_DoesNothingWhenNoWindowIsOpen () { - // Arrange — no log windows at all + // Arrange // Act var entered = _controller.Enter(); @@ -138,17 +163,25 @@ public void Exit_RestoresTheWindowAndTheMainForm () // Arrange var windows = AddWindows("first.log", "second.log"); var active = _dockPanel.ActiveContent as LogWindow; + + Assert.That(active, Is.Not.Null); + + var originalPane = active.DockHandler.Pane; + var originalIndex = originalPane.Contents.IndexOf(active); + _controller.Enter(); // Act _controller.Exit(); - // Assert — the window is back in the document pane, the others were never touched + // Assert Assert.Multiple(() => { Assert.That(_controller.IsActive, Is.False); Assert.That(_form.Visible, Is.True); Assert.That(active.DockState, Is.EqualTo(DockState.Document)); + Assert.That(active.DockHandler.Pane, Is.EqualTo(originalPane)); + Assert.That(originalPane.Contents.IndexOf(active), Is.EqualTo(originalIndex)); Assert.That(windows.Count(window => window.DockState == DockState.Document), Is.EqualTo(windows.Count)); }); } @@ -161,15 +194,52 @@ public void Exit_KeepsAnAlreadyFloatingWindowFloating () var floating = windows[1]; floating.Show(_dockPanel, DockState.Float); - Assert.That(_dockPanel.ActiveContent as LogWindow, Is.EqualTo(floating), "the float should be the active document"); + Assert.That(_dockPanel.ActiveContent as LogWindow, Is.EqualTo(floating)); + + var floatWindow = FloatWindowOf(floating); + + Assert.That(floatWindow, Is.Not.Null); + + var originalOwner = floatWindow.Owner; + var originalShowInTaskbar = floatWindow.ShowInTaskbar; + var originalBorderStyle = floatWindow.FormBorderStyle; + + _controller.Enter(); + + // Act + _controller.Exit(); + + // Assert + Assert.Multiple(() => + { + Assert.That(floating.DockState, Is.EqualTo(DockState.Float)); + Assert.That(floatWindow.Owner, Is.EqualTo(originalOwner)); + Assert.That(floatWindow.ShowInTaskbar, Is.EqualTo(originalShowInTaskbar)); + Assert.That(floatWindow.FormBorderStyle, Is.EqualTo(originalBorderStyle)); + }); + } + + [Test] + public void Exit_RestoresTheWindowStateChangedWhileDetached () + { + // Arrange + var windows = AddWindows("first.log", "floating.log"); + var floating = windows[1]; + + floating.Show(_dockPanel, DockState.Float); + + var floatWindow = FloatWindowOf(floating); + + Assert.That(floatWindow, Is.Not.Null); _controller.Enter(); + floatWindow.WindowState = FormWindowState.Maximized; // Act _controller.Exit(); - // Assert — it came from a float, so it goes back to one - Assert.That(floating.DockState, Is.EqualTo(DockState.Float)); + // Assert + Assert.That(floatWindow.WindowState, Is.EqualTo(FormWindowState.Normal)); } [Test] @@ -183,7 +253,7 @@ public void SwitchWindow_MovesTheDetachedFloatThroughEveryWindow () _controller.Enter(); - // Act & Assert — each switch detaches the next window and puts the previous one back + // Act & Assert var visited = new List(); for (var turn = 0; turn < windows.Count; turn++) @@ -213,7 +283,7 @@ public void OnWindowDisposed_LastWindow_EndsTheModeAndShowsTheMainForm () var active = _dockPanel.ActiveContent as LogWindow; _controller.Enter(); - // Act — closing the detached window is deferred through BeginInvoke + // Act active.Dispose(); _controller.OnWindowDisposed(active); Application.DoEvents(); @@ -267,8 +337,7 @@ public void OnWindowDisposed_WithOtherWindows_EndsTheModeAndRestoresMainForm () _controller.OnWindowDisposed(active); Application.DoEvents(); - // Assert — closing the detached window ends detach mode and brings back the main form. - // Other log windows remain where they were. + // Assert var other = windows.Single(window => window != active); Assert.Multiple(() => @@ -335,7 +404,7 @@ public void PreFilterMessage_F11WhileDetached_LeavesTheMode () [Test] public void PreFilterMessage_WhileNotDetached_PassesEveryKeyThrough () { - // Arrange — mode is off + // Arrange var msg = new Message { Msg = 0x0100, @@ -378,7 +447,7 @@ public void PreFilterMessage_F11AutoRepeat_IsSwallowedWithoutLeavingTheMode () [Test] public void PreFilterMessage_Esc_PassesThroughAndStaysInMode () { - // Arrange — ESC is not handled by the filter at all; the grid or text input handles it + // Arrange AddWindows("first.log"); _controller.Enter(); var filter = CreateFilter(); @@ -393,7 +462,7 @@ public void PreFilterMessage_Esc_PassesThroughAndStaysInMode () // Act var swallowed = filter.PreFilterMessage(ref msg); - // Assert — ESC passes through untouched + // Assert Assert.Multiple(() => { Assert.That(swallowed, Is.False); @@ -404,7 +473,7 @@ public void PreFilterMessage_Esc_PassesThroughAndStaysInMode () [Test] public void PreFilterMessage_F11WhileAnotherFormIsActive_DoesNotLeaveTheMode () { - // Arrange — a modal dialog or any other window holds the focus + // Arrange AddWindows("first.log"); _controller.Enter(); var filter = CreateFilter(activeFormGetter: () => _form); @@ -494,7 +563,7 @@ public void PreFilterMessage_OtherKeysWhileDetached_PassThrough () var msg = new Message { Msg = 0x0100, - WParam = (IntPtr)0x41, // 'A' — not one of the detach mode keys + WParam = (IntPtr)0x41, // 'A' LParam = 0 }; diff --git a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs index 2925ce1c0..2bbc2bd3e 100644 --- a/src/LogExpert.UI.Tests/Services/TabControllerTests.cs +++ b/src/LogExpert.UI.Tests/Services/TabControllerTests.cs @@ -451,6 +451,29 @@ public void GetPreviousWindow_FromAnyWindow_MovesBackwardAndWrapsAround () Assert.That(_tabController.GetPreviousWindow(third), Is.EqualTo(second)); } + [Test] + public void GetNextWindow_FollowsTheTabStripOrderNotTheAddOrder () + { + // Arrange + using var first = CreateLogWindow("first.log"); + using var second = CreateLogWindow("second.log"); + using var third = CreateLogWindow("third.log"); + + _tabController.AddWindow(first, "first.log"); + _tabController.AddWindow(second, "second.log"); + _tabController.AddWindow(third, "third.log"); + + // Tab strip is now second, first, third. + second.DockHandler.Pane.SetContentIndex(second, 0); + + // Act & Assert + Assert.Multiple(() => + { + Assert.That(_tabController.GetNextWindow(second), Is.EqualTo(first)); + Assert.That(_tabController.GetPreviousWindow(second), Is.EqualTo(third)); + }); + } + [Test] public void GetNextWindow_WhenEmpty_ReturnsNull () { diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs index 235b6bd31..f72e2455a 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.cs @@ -81,10 +81,6 @@ internal partial class LogTabWindow : Form, ILogTabWindow private bool _wasMaximized; - /// - /// Owns detach mode: F11 hides the main window and keeps the active log window floating; - /// F11 leaves the mode again. - /// private readonly DetachModeController _detachModeController; #endregion @@ -471,7 +467,7 @@ private void ApplyContextMenuResources () timeshiftToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_timeshiftToolStripMenuItem; timeshiftToolStripTextBox.Text = Resources.LogTabWindow_UI_ToolStripTextBox_timeshiftToolStripTextBox; copyMarkedLinesIntoNewTabToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_copyMarkedLinesIntoNewTabToolStripMenuItem; - logOnlyViewToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_logOnlyViewToolStripMenuItem; + detachModeToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_detachModeToolStripMenuItem; //Options menu optionToolStripMenuItem.Text = Resources.LogTabWindow_UI_ToolStripMenuItem_optionToolStripMenuItem; @@ -528,7 +524,7 @@ private void ApplyToolTips () saveSessionToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_saveProjectToolStripMenuItem; timeshiftToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_timeshiftToolStripMenuItem; copyMarkedLinesIntoNewTabToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_copyMarkedLinesIntoNewTabToolStripMenuItem; - logOnlyViewToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_logOnlyViewToolStripMenuItem; + detachModeToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_detachModeToolStripMenuItem; columnizerToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_columnizerToolStripMenuItem; cellSelectModeToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_cellSelectModeToolStripMenuItem; lockInstanceToolStripMenuItem.ToolTipText = Resources.LogTabWindow_UI_ToolStripMenuItem_ToolTip_lockInstanceToolStripMenuItem; @@ -852,8 +848,6 @@ private void AddLogWindow (LogWindow.LogWindow logWindow, string title, bool doN if (_detachModeController.IsActive) { - // While detached the main window is hidden, so the newly opened window is the one - // the user expects to see: it replaces the detached one. _detachModeController.OnWindowAdded(logWindow); } } @@ -1495,7 +1489,6 @@ private void CloseAllTabs () [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0010:Add missing cases", Justification = "no need for the other switch cases")] private void LoadSession (string sessionFileName, bool restoreLayout) { - // Leave detach mode first so the loaded layout describes the normal window. _detachModeController.Exit(); var outcome = _sessionHandler.LoadSession(sessionFileName); @@ -1775,7 +1768,6 @@ private void OnLogTabWindowLoad (object sender, EventArgs e) [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Shutdown must continue even when detach mode cannot be restored.")] private void OnLogTabWindowFormClosing (object sender, CancelEventArgs e) { - // Leave detach mode first so the saved layout describes the normal main window. try { _detachModeController.Exit(); @@ -1827,8 +1819,6 @@ private void OnLogWindowDisposed (object sender, EventArgs e) RemoveLogWindow(logWindow); logWindow.Tag = null; - - // Closing the detached window ends detach mode and brings the main window back. _detachModeController.OnWindowDisposed(logWindow); } @@ -2458,8 +2448,8 @@ private void OnCloseOtherTabsToolStripMenuItemClick (object sender, EventArgs e) { var activeWindow = _tabController.GetActiveWindow(); var closeList = _tabController.GetAllWindowsFromDockPanel() - .Where(window => window != activeWindow) - .ToList(); + .Where(window => window != activeWindow) + .ToList(); foreach (var logWindow in closeList) { diff --git a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs index dd59e9334..44025dc66 100644 --- a/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs +++ b/src/LogExpert.UI/Dialogs/LogTabWindow/LogTabWindow.designer.cs @@ -47,7 +47,7 @@ private void InitializeComponent () lastUsedToolStripMenuItem = new ToolStripMenuItem(); exitToolStripMenuItem = new ToolStripMenuItem(); viewNavigateToolStripMenuItem = new ToolStripMenuItem(); - logOnlyViewToolStripMenuItem = new ToolStripMenuItem(); + detachModeToolStripMenuItem = new ToolStripMenuItem(); ToolStripSeparator12 = new ToolStripSeparator(); goToLineToolStripMenuItem = new ToolStripMenuItem(); searchToolStripMenuItem = new ToolStripMenuItem(); @@ -335,7 +335,7 @@ private void InitializeComponent () // // viewNavigateToolStripMenuItem // - viewNavigateToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { goToLineToolStripMenuItem, searchToolStripMenuItem, filterToolStripMenuItem, bookmarksToolStripMenuItem, columnFinderToolStripMenuItem, ToolStripSeparator5, encodingToolStripMenuItem, ToolStripSeparator6, timeshiftToolStripMenuItem, timeshiftToolStripTextBox, ToolStripSeparator4, copyMarkedLinesIntoNewTabToolStripMenuItem, ToolStripSeparator12, logOnlyViewToolStripMenuItem }); + viewNavigateToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { goToLineToolStripMenuItem, searchToolStripMenuItem, filterToolStripMenuItem, bookmarksToolStripMenuItem, columnFinderToolStripMenuItem, ToolStripSeparator5, encodingToolStripMenuItem, ToolStripSeparator6, timeshiftToolStripMenuItem, timeshiftToolStripTextBox, ToolStripSeparator4, copyMarkedLinesIntoNewTabToolStripMenuItem, ToolStripSeparator12, detachModeToolStripMenuItem }); viewNavigateToolStripMenuItem.Name = "viewNavigateToolStripMenuItem"; viewNavigateToolStripMenuItem.Size = new Size(96, 19); viewNavigateToolStripMenuItem.Text = "View/Navigate"; @@ -479,14 +479,14 @@ private void InitializeComponent () ToolStripSeparator12.Name = "ToolStripSeparator12"; ToolStripSeparator12.Size = new Size(174, 6); // - // logOnlyViewToolStripMenuItem + // detachModeToolStripMenuItem // - logOnlyViewToolStripMenuItem.Name = "logOnlyViewToolStripMenuItem"; - logOnlyViewToolStripMenuItem.ShortcutKeyDisplayString = "F11"; - logOnlyViewToolStripMenuItem.Size = new Size(177, 22); - logOnlyViewToolStripMenuItem.Text = "Detach Mode"; - logOnlyViewToolStripMenuItem.ToolTipText = "Shows the active log alone in its own window and hides the main window"; - logOnlyViewToolStripMenuItem.Click += OnDetachModeToolStripMenuItemClick; + detachModeToolStripMenuItem.Name = "detachModeToolStripMenuItem"; + detachModeToolStripMenuItem.ShortcutKeyDisplayString = "F11"; + detachModeToolStripMenuItem.Size = new Size(177, 22); + detachModeToolStripMenuItem.Text = "Detach Mode"; + detachModeToolStripMenuItem.ToolTipText = "Shows the active log alone in its own window and hides the main window"; + detachModeToolStripMenuItem.Click += OnDetachModeToolStripMenuItemClick; // // optionToolStripMenuItem // @@ -1158,7 +1158,7 @@ private void InitializeComponent () private ToolStripMenuItem columnFinderToolStripMenuItem; private DockPanel dockPanel; private ToolStripMenuItem tabRenameToolStripMenuItem; - private ToolStripMenuItem logOnlyViewToolStripMenuItem; + private ToolStripMenuItem detachModeToolStripMenuItem; private ToolStripSeparator ToolStripSeparator12; private ToolStripSeparator lineToolStripSeparatorExtension1; private ToolStripSeparator lineToolStripSeparatorExtension2; diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs index 919913887..58382d276 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachFloatWindowHook.cs @@ -1,7 +1,5 @@ using System.Runtime.Versioning; -using Vanara.PInvoke; - namespace LogExpert.UI.Services.DetachModeService; /// @@ -9,17 +7,12 @@ namespace LogExpert.UI.Services.DetachModeService; /// caption double click into a maximize/restore toggle, because the suite docks the window back on /// that message. /// -/// -/// Messages the hook does not intercept are forwarded to the procedure captured before -/// . -/// [SupportedOSPlatform("windows")] internal sealed class DetachFloatWindowHook : NativeWindow, IDisposable { private const int WM_NCLBUTTONDBLCLK = 0x00A3; private readonly WeifenLuo.WinFormsUI.Docking.FloatWindow _floatWindow; - private readonly IntPtr _originalProc; private bool _disposed; /// Raised when the user double clicks the caption of the hooked window. @@ -28,9 +21,6 @@ internal sealed class DetachFloatWindowHook : NativeWindow, IDisposable private DetachFloatWindowHook (WeifenLuo.WinFormsUI.Docking.FloatWindow floatWindow) { _floatWindow = floatWindow; - - // Must be captured before AssignHandle replaces the procedure with this hook. - _originalProc = GetWindowProc(floatWindow.Handle); AssignHandle(floatWindow.Handle); } @@ -63,7 +53,7 @@ protected override void WndProc (ref Message m) return; } - m.Result = User32.CallWindowProc(_originalProc, m.HWnd, (uint)m.Msg, m.WParam, m.LParam); + base.WndProc(ref m); } public void Dispose () @@ -83,9 +73,4 @@ public void Dispose () CaptionDoubleClicked = null; } - - private static IntPtr GetWindowProc (IntPtr handle) - { - return User32.GetWindowLongPtr(handle, User32.WindowLongFlags.GWL_WNDPROC); - } } diff --git a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs index eb95b78f4..1747259bf 100644 --- a/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs +++ b/src/LogExpert.UI/Services/DetachModeService/DetachModeController.cs @@ -26,10 +26,7 @@ internal sealed class DetachModeController : IDisposable private LogWindow _detachedWindow; - private DockState _originalDockState = DockState.Unknown; - private DockPane _originalPane; - private int _originalContentIndex; - + private PlacementSnapshot _originalPlacement; private ChromeSnapshot _originalChrome; public DetachModeController (Form mainForm, DockPanel dockPanel, ITabController tabController) @@ -62,7 +59,12 @@ public bool Enter () return false; } - Detach(active); + if (!Detach(active)) + { + // Hiding the main form without a float would leave no window to press F11 in. + return false; + } + InstallFilter(); _mainForm.Hide(); return true; @@ -78,19 +80,32 @@ public void Exit () var window = _detachedWindow; _detachedWindow = null; - ReleaseFloatWindow(); UninstallFilter(); + // Show the owner first: assigning it to a hidden main form would hide the float before its + // content is docked back. + RestoreMainForm(); + + ReleaseFloatWindow(); RestoreWindow(window); ClearOriginalPlacement(); - RestoreMainForm(); } private void ClearOriginalPlacement () { - _originalDockState = DockState.Unknown; - _originalPane = null; - _originalContentIndex = -1; + _originalPlacement = default; + } + + /// + /// Ends the mode without a detached float, for the case where the suite cannot float a window: + /// the main form has to come back even though no window can carry F11. + /// + private void LeaveDetachedState () + { + _detachedWindow = null; + UninstallFilter(); + ClearOriginalPlacement(); + RestoreMainForm(); } private void RestoreMainFormLater () @@ -112,17 +127,19 @@ public void SwitchWindow (bool shiftPressed) return; } + // Re-dock first: the floating window is not part of the tab strip, so the walk needs the + // full order to stay stable. + ReleaseFloatWindow(); + RestoreWindow(_detachedWindow); + var target = shiftPressed ? _tabController.GetPreviousWindow(_detachedWindow) : _tabController.GetNextWindow(_detachedWindow); - if (target == null || target == _detachedWindow) + if (!Detach(target ?? _detachedWindow)) { - return; + LeaveDetachedState(); } - - RestoreWindow(_detachedWindow); - Detach(target); } public void OnWindowAdded (LogWindow window) @@ -132,8 +149,13 @@ public void OnWindowAdded (LogWindow window) return; } + ReleaseFloatWindow(); RestoreWindow(_detachedWindow); - Detach(window); + + if (!Detach(window)) + { + LeaveDetachedState(); + } } public void OnWindowDisposed (LogWindow window) @@ -150,14 +172,11 @@ public void OnWindowDisposed (LogWindow window) RestoreMainFormLater(); } - private void Detach (LogWindow window) + private bool Detach (LogWindow window) { - ReleaseFloatWindow(); - // Snapshot before Show(): the window reports Float afterwards. - _originalDockState = window.DockState; - _originalPane = window.DockHandler.Pane; - _originalContentIndex = _originalPane?.Contents.IndexOf(window) ?? -1; + var pane = window.DockHandler.Pane; + _originalPlacement = new PlacementSnapshot(window.DockState, pane, pane?.Contents.IndexOf(window) ?? -1); if (window.DockState != DockState.Float) { @@ -169,9 +188,8 @@ private void Detach (LogWindow window) if (floatWindow == null) { // The suite refused to float the window; stay out of the mode instead of half-entering it. - _originalDockState = DockState.Unknown; - _originalPane = null; - return; + ClearOriginalPlacement(); + return false; } _originalChrome = CaptureChrome(floatWindow); @@ -181,6 +199,7 @@ private void Detach (LogWindow window) _detachedWindow = window; window.Activate(); RepaintCaptionLater(floatWindow); + return true; } private void RestoreWindow (LogWindow window) @@ -190,27 +209,27 @@ private void RestoreWindow (LogWindow window) return; } - if (_originalDockState == DockState.Float) + if (_originalPlacement.DockState == DockState.Float) { // Was already floating; only the chrome was patched. return; } - if (_originalPane != null && !_originalPane.IsDisposed && _originalPane.DockState == _originalDockState) + if (_originalPlacement.Pane is { IsDisposed: false } pane && pane.DockState == _originalPlacement.DockState) { // Put it back into its original pane and tab index so split panes and tab order survive. - window.Show(_originalPane, null); + window.Show(pane, null); - if (_originalContentIndex >= 0 && _originalContentIndex < _originalPane.Contents.Count) + if (_originalPlacement.ContentIndex >= 0 && _originalPlacement.ContentIndex < pane.Contents.Count) { - _originalPane.SetContentIndex(window, _originalContentIndex); + pane.SetContentIndex(window, _originalPlacement.ContentIndex); } return; } // Pane disappeared (split closed, session load): fall back to dock-state-only placement. - window.Show(_dockPanel, ToRestorable(_originalDockState)); + window.Show(_dockPanel, ToRestorable(_originalPlacement.DockState)); } private void PatchFloatWindow (FloatWindow floatWindow) @@ -238,6 +257,7 @@ private static ChromeSnapshot CaptureChrome (FloatWindow floatWindow) return new ChromeSnapshot( floatWindow.Owner, floatWindow.FormBorderStyle, + floatWindow.WindowState, floatWindow.MaximizeBox, floatWindow.MinimizeBox, floatWindow.ShowInTaskbar, @@ -253,7 +273,13 @@ private static void RestoreChrome (FloatWindow floatWindow, ChromeSnapshot chrom floatWindow.ShowInTaskbar = chrome.ShowInTaskbar; floatWindow.AllowEndUserDocking = chrome.AllowEndUserDocking; + // WinForms normalizes a maximized window as soon as the maximize box goes away, so the + // state is applied last to bring back exactly what the suite had. + floatWindow.WindowState = chrome.WindowState; + + // Restoring the styles recreated the handle: reapply the dark flag, then force a repaint. ApplyDarkTitleBar(floatWindow); + RepaintCaptionLater(floatWindow); } private static void RepaintCaptionLater (FloatWindow floatWindow) @@ -411,9 +437,15 @@ public void Dispose () UninstallFilter(); } + private readonly record struct PlacementSnapshot ( + DockState DockState, + DockPane Pane, + int ContentIndex); + private readonly record struct ChromeSnapshot ( Form Owner, FormBorderStyle FormBorderStyle, + FormWindowState WindowState, bool MaximizeBox, bool MinimizeBox, bool ShowInTaskbar, diff --git a/src/LogExpert.UI/Services/TabControllerService/TabController.cs b/src/LogExpert.UI/Services/TabControllerService/TabController.cs index 8dbb36cd7..34d2cb0ac 100644 --- a/src/LogExpert.UI/Services/TabControllerService/TabController.cs +++ b/src/LogExpert.UI/Services/TabControllerService/TabController.cs @@ -286,7 +286,7 @@ public void SwitchToPreviousWindow () } /// - /// Resolves the window that follows in the tracking order, without + /// Resolves the window that follows in the tab order, without /// activating it. Callers that display windows differently from the DockPanel need the target /// window rather than an Activate(). /// @@ -296,28 +296,25 @@ public void SwitchToPreviousWindow () /// The next window, or null when no window is tracked. public LogWindow GetNextWindow (LogWindow current = null) { - lock (_windowsLock) + var windows = GetWindowsInTabOrder(); + + if (windows.Count == 0) { - if (_windows.Count == 0) - { - return null; - } + return null; + } - var windows = _windows.Keys.ToList(); - var anchor = current ?? _activeWindow; - var currentIndex = anchor != null - ? windows.IndexOf(anchor) - : -1; + var anchor = current ?? _activeWindow; + var currentIndex = anchor != null + ? windows.IndexOf(anchor) + : -1; - // Move forward, wrap around to beginning if at end - var nextIndex = (currentIndex + 1) % windows.Count; + var nextIndex = (currentIndex + 1) % windows.Count; - return windows[nextIndex]; - } + return windows[nextIndex]; } /// - /// Resolves the window that precedes in the tracking order, without + /// Resolves the window that precedes in the tab order, without /// activating it. /// /// @@ -326,31 +323,48 @@ public LogWindow GetNextWindow (LogWindow current = null) /// The previous window, or null when no window is tracked. public LogWindow GetPreviousWindow (LogWindow current = null) { - lock (_windowsLock) + var windows = GetWindowsInTabOrder(); + + if (windows.Count == 0) { - if (_windows.Count == 0) - { - return null; - } + return null; + } + + var anchor = current ?? _activeWindow; - var windows = _windows.Keys.ToList(); - var anchor = current ?? _activeWindow; + // Without an anchor the walk starts at the first window, so "previous" wraps to the last + // one ("next" without an anchor lands on the first one the same way). + var currentIndex = anchor != null + ? windows.IndexOf(anchor) + : 0; - // Without an anchor the walk starts at the first window, so "previous" wraps to the last - // one ("next" without an anchor lands on the first one the same way). - var currentIndex = anchor != null - ? windows.IndexOf(anchor) - : 0; + var previousIndex = currentIndex - 1; - // Move backward, wrap around to end if at beginning - var previousIndex = currentIndex - 1; - if (previousIndex < 0) + if (previousIndex < 0) + { + previousIndex = windows.Count - 1; + } + + return windows[previousIndex]; + } + + private List GetWindowsInTabOrder () + { + var windows = GetAllWindowsFromDockPanel().ToList(); + + // Tracked windows the panel is not displaying right now stay reachable at the end. + lock (_windowsLock) + { + foreach (var window in _windows.Keys) { - previousIndex = windows.Count - 1; + if (!windows.Contains(window)) + { + windows.Add(window); + } } - - return windows[previousIndex]; } + + return windows; } /// @@ -500,10 +514,6 @@ protected virtual void Dispose (bool disposing) /// Gets all LogWindow instances currently held by the DockPanel's panes, in the order their tab strips display /// them. Panes of every dock state are enumerated, so floating windows are included. /// - /// - /// Only windows whose pane currently displays them are returned: a window hidden with - /// drops out of the enumeration even though its pane still exists. - /// /// Read-only list of all LogWindows in the DockPanel public IReadOnlyList GetAllWindowsFromDockPanel () {