コード例 #1
0
        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);
            }
        }