From 5d150115a8ce6405b0f25dbdedf9efcf8ebf797f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:22:20 +0000 Subject: [PATCH] Create OptionsWindow for docked settings panel Co-authored-by: Kvarkas <3611964+Kvarkas@users.noreply.github.com> --- mRemoteNG/App/Windows.cs | 7 ++- mRemoteNG/UI/Forms/frmMain.cs | 5 +- mRemoteNG/UI/Window/OptionsWindow.cs | 89 ++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 mRemoteNG/UI/Window/OptionsWindow.cs diff --git a/mRemoteNG/App/Windows.cs b/mRemoteNG/App/Windows.cs index d026d3aff..96c57da2b 100644 --- a/mRemoteNG/App/Windows.cs +++ b/mRemoteNG/App/Windows.cs @@ -28,6 +28,7 @@ namespace mRemoteNG.App internal static ErrorAndInfoWindow ErrorsForm { get; set; } = new ErrorAndInfoWindow(); private static UpdateWindow UpdateForm { get; set; } = new UpdateWindow(); internal static SSHTransferWindow SshtransferForm { get; private set; } = new SSHTransferWindow(); + internal static OptionsWindow OptionsFormWindow { get; private set; } public static void Show(WindowType windowType) @@ -44,8 +45,10 @@ namespace mRemoteNG.App _adimportForm.Show(dockPanel); break; case WindowType.Options: - FrmMain.OptionsForm.SetActivatedPage(Language.StartupExit); - FrmMain.OptionsForm.Visible = true; + if (OptionsFormWindow == null || OptionsFormWindow.IsDisposed) + OptionsFormWindow = new OptionsWindow(); + OptionsFormWindow.SetActivatedPage(Language.StartupExit); + OptionsFormWindow.Show(dockPanel); break; case WindowType.SSHTransfer: if (SshtransferForm == null || SshtransferForm.IsDisposed) diff --git a/mRemoteNG/UI/Forms/frmMain.cs b/mRemoteNG/UI/Forms/frmMain.cs index 08c6e1c84..b1a38662c 100644 --- a/mRemoteNG/UI/Forms/frmMain.cs +++ b/mRemoteNG/UI/Forms/frmMain.cs @@ -398,8 +398,9 @@ namespace mRemoteNG.UI.Forms if (CTaskDialog.CommandButtonResult != 1) return; - OptionsForm.SetActivatedPage(Language.Updates); - OptionsForm.ShowDialog(this); + App.Windows.Show(WindowType.Options); + if (App.Windows.OptionsFormWindow != null) + App.Windows.OptionsFormWindow.SetActivatedPage(Language.Updates); } private async Task CheckForUpdates() diff --git a/mRemoteNG/UI/Window/OptionsWindow.cs b/mRemoteNG/UI/Window/OptionsWindow.cs new file mode 100644 index 000000000..62c473dd3 --- /dev/null +++ b/mRemoteNG/UI/Window/OptionsWindow.cs @@ -0,0 +1,89 @@ +using System; +using System.Runtime.Versioning; +using System.Windows.Forms; +using mRemoteNG.Themes; +using mRemoteNG.UI.Forms; +using WeifenLuo.WinFormsUI.Docking; +using mRemoteNG.Resources.Language; + +namespace mRemoteNG.UI.Window +{ + [SupportedOSPlatform("windows")] + public partial class OptionsWindow : BaseWindow + { + private FrmOptions _optionsForm; + + #region Public Methods + + public OptionsWindow() : this(new DockContent()) + { + } + + public OptionsWindow(DockContent panel) + { + WindowType = WindowType.Options; + DockPnl = panel; + InitializeComponent(); + Icon = Resources.ImageConverter.GetImageAsIcon(Properties.Resources.Settings_16x); + FontOverrider.FontOverride(this); + } + + #endregion + + #region Form Stuff + + private void Options_Load(object sender, EventArgs e) + { + ApplyTheme(); + ThemeManager.getInstance().ThemeChanged += ApplyTheme; + ApplyLanguage(); + LoadOptionsForm(); + } + + private new void ApplyTheme() + { + if (!ThemeManager.getInstance().ActiveAndExtended) return; + base.ApplyTheme(); + } + + private void ApplyLanguage() + { + Text = Language.Options; + TabText = Language.Options; + } + + private void LoadOptionsForm() + { + if (_optionsForm == null || _optionsForm.IsDisposed) + { + _optionsForm = FrmMain.OptionsForm; + _optionsForm.TopLevel = false; + _optionsForm.FormBorderStyle = FormBorderStyle.None; + _optionsForm.Dock = DockStyle.Fill; + Controls.Add(_optionsForm); + _optionsForm.Show(); + } + } + + public void SetActivatedPage(string pageName) + { + _optionsForm?.SetActivatedPage(pageName); + } + + #endregion + + private void InitializeComponent() + { + SuspendLayout(); + // + // OptionsWindow + // + ClientSize = new System.Drawing.Size(800, 600); + Name = "OptionsWindow"; + Text = Language.Options; + TabText = Language.Options; + Load += Options_Load; + ResumeLayout(false); + } + } +}