public static DialogWindow Show(IStagedSetupWizard setupWizard, bool advanceToIncompleteStage = false)
        {
            var type = setupWizard.GetType();

            var wizardWindow = new StagedSetupWindow(setupWizard);

            wizardWindow.Closed += (s, e) => allWindows.Remove(type);
            allWindows[type]     = wizardWindow;

            wizardWindow.Size = setupWizard.WindowSize;

            var homePage = setupWizard.HomePageGenerator();

            SetSizeAndShow(wizardWindow, homePage);

            if (advanceToIncompleteStage)
            {
                wizardWindow.NextIncompleteStage();
            }
            else
            {
                wizardWindow.ChangeToPage(homePage);
            }

            return(wizardWindow);
        }
        public StagedSetupWindow(IStagedSetupWizard setupWizard)
        {
            this.setupWizard = setupWizard;

            var theme = AppContext.Theme;

            var row = new FlowLayoutWidget()
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch
            };

            row.AddChild(leftPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
            {
                BackgroundColor = theme.MinimalShade,
                HAnchor         = HAnchor.Absolute,
                VAnchor         = VAnchor.Stretch,
                Margin          = new BorderDouble(right: theme.DefaultContainerPadding),
                Padding         = theme.DefaultContainerPadding,
                Width           = 250
            });

            int i = 1;

            foreach (var stage in setupWizard.Stages.Where(s => s.Visible))
            {
                var stageWidget = new WizardStageRow(
                    $"{i++}. {stage.Title}",
                    "",
                    stage,
                    theme)
                {
                    TabStop     = true,
                    ToolTipText = stage.HelpText
                };
                stageWidget.Name    = stage.Title + " Row";
                stageWidget.Enabled = stage.Enabled;
                stageWidget.Click  += (s, e) =>
                {
                    // Only allow leftnav when not running SetupWizard
                    if (this.ActiveStage == null)
                    {
                        this.ActiveStage = stage;
                    }
                };

                rowsByStage.Add(stage, stageWidget);

                leftPanel.AddChild(stageWidget);
            }

            row.AddChild(rightPanel = new GuiWidget()
            {
                HAnchor = HAnchor.Stretch,
                VAnchor = VAnchor.Stretch
            });

            this.Title = setupWizard.Title;

            // Multi-part wizard should not try to resize per page
            this.UseChildWindowSize = false;

            this.AddChild(row);
        }