public static bool RestoreLayout(TabablzControl rootTabControl, LayoutStructure layoutStructure, string language, string primary = null, string accent = null, bool?darkMode = null) { try { if (!ApplicationService.IsStarting) { LanguageHelper.ChangeLanguage(language); DepopulateTabControl(ref rootTabControl); } SetColors(primary, accent, darkMode); VerifyWindowPositions(layoutStructure); foreach (var layoutStructureWindow in layoutStructure.Windows) { TabablzControl tabControl; Window currentWindow = null; if (layoutStructure.Windows.First() == layoutStructureWindow) { tabControl = rootTabControl; var window = Window.GetWindow(rootTabControl); window.Left = layoutStructureWindow.Left; window.Top = layoutStructureWindow.Top; window.Width = layoutStructureWindow.Width; window.Height = layoutStructureWindow.Height; window.Topmost = layoutStructureWindow.Topmost; window.WindowState = layoutStructureWindow.WindowState; } else { var newTabHost = IoC.Get <IInterTabClient>().GetNewHost(rootTabControl.InterTabController.InterTabClient, null, rootTabControl); tabControl = newTabHost.TabablzControl; currentWindow = newTabHost.Container; currentWindow.Left = layoutStructureWindow.Left; currentWindow.Top = layoutStructureWindow.Top; currentWindow.Width = layoutStructureWindow.Width; currentWindow.Height = layoutStructureWindow.Height; currentWindow.Topmost = layoutStructureWindow.Topmost; currentWindow.WindowState = layoutStructureWindow.WindowState; currentWindow.Show(); } var layoutStructureTabSets = layoutStructureWindow.TabSets.ToDictionary(tabSet => tabSet.Id); if (layoutStructureWindow.Branches.Any()) { var branchIndex = layoutStructureWindow.Branches.ToDictionary(b => b.Id); var rootBranch = GetRoot(branchIndex); //do the nasty recursion to build the layout, populate the tabs after, keep it simple... foreach (var tuple in BuildLayout(tabControl, rootBranch, branchIndex)) { PopulateTabControl(tuple.Item2, layoutStructureTabSets[tuple.Item1]); } } else { var layoutStructureTabSet = layoutStructureTabSets.Values.FirstOrDefault(); if (layoutStructureTabSet != null) { PopulateTabControl(tabControl, layoutStructureTabSet); } } } return(true); } catch { return(false); } }