Files
mRemoteNG/mRemoteNG/Config/Settings/DockPanelLayoutLoader.cs
2025-10-21 22:19:22 +01:00

91 lines
2.9 KiB
C#

using mRemoteNG.App;
using mRemoteNG.App.Info;
using mRemoteNG.UI.Forms;
using mRemoteNG.UI.Window;
using System;
using System.IO;
using mRemoteNG.Messages;
using WeifenLuo.WinFormsUI.Docking;
using System.Runtime.Versioning;
namespace mRemoteNG.Config.Settings
{
[SupportedOSPlatform("windows")]
public class DockPanelLayoutLoader
{
private readonly FrmMain _mainForm;
private readonly MessageCollector _messageCollector;
public DockPanelLayoutLoader(FrmMain mainForm, MessageCollector messageCollector)
{
if (mainForm == null)
throw new ArgumentNullException(nameof(mainForm));
if (messageCollector == null)
throw new ArgumentNullException(nameof(messageCollector));
_mainForm = mainForm;
_messageCollector = messageCollector;
}
public void LoadPanelsFromXml()
{
try
{
while (_mainForm.pnlDock.Contents.Count > 0)
{
DockContent dc = (DockContent)_mainForm.pnlDock.Contents[0];
dc.Close();
}
#if !PORTABLE
string oldPath =
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\" + GeneralAppInfo.ProductName + "\\" + SettingsFileInfo.LayoutFileName;
#endif
string newPath = SettingsFileInfo.SettingsPath + "\\" + SettingsFileInfo.LayoutFileName;
if (File.Exists(newPath))
{
_mainForm.pnlDock.LoadFromXml(newPath, GetContentFromPersistString);
#if !PORTABLE
}
else if (File.Exists(oldPath))
{
_mainForm.pnlDock.LoadFromXml(oldPath, GetContentFromPersistString);
#endif
}
else
{
_mainForm.SetDefaultLayout();
}
}
catch (Exception ex)
{
_messageCollector.AddExceptionMessage("LoadPanelsFromXML failed", ex);
}
}
private IDockContent? GetContentFromPersistString(string persistString)
{
// pnlLayout.xml persistence XML fix for refactoring to mRemoteNG
if (persistString.StartsWith("mRemote."))
persistString = persistString.Replace("mRemote.", "mRemoteNG.");
try
{
if (persistString == typeof(ConfigWindow).ToString())
return AppWindows.ConfigForm;
if (persistString == typeof(ConnectionTreeWindow).ToString())
return AppWindows.TreeForm;
if (persistString == typeof(ErrorAndInfoWindow).ToString())
return AppWindows.ErrorsForm;
}
catch (Exception ex)
{
_messageCollector.AddExceptionMessage("GetContentFromPersistString failed", ex);
}
return null;
}
}
}