private void SetupInstallButtons()

in src/dotnet/RiderPlugin.UnrealLink/Settings/UnrealLinkOptionsPage.cs [150:222]


        private void SetupInstallButtons()
        {
            AddHeader(Strings.Settings_ManualInstallation_Header_Text);
            var owner = Shell.Instance.GetComponents<RealSolutionManagerBase>()
                .FirstOrDefault(it => it.CurrentSolution != null);
            var solution = owner?.CurrentSolution;
            var unrealPluginInstaller = solution?.GetComponent<UnrealPluginInstaller>();

            var installInEngineButton = AddButton(Strings.InstallRiderLinkInEngine_Text, () =>
            {
                unrealPluginInstaller?.HandleManualInstallPlugin(
                    new InstallPluginDescription(PluginInstallLocation.Engine, ForceInstall.Yes)
                    );
            });
            AddCommentText(Strings.InstallRiderLinkPluginInEngineDescription_Text);

            var installInGameButton = AddButton(Strings.InstallRiderLinkInGame_Text, () =>
            {
                unrealPluginInstaller?.HandleManualInstallPlugin(
                    new InstallPluginDescription(PluginInstallLocation.Game, ForceInstall.Yes)
                    );
            });
            AddCommentText(Strings.InstallRiderLinkPluginInGameDescription_Text);

            var extractInEngineButton = AddButton(Strings.ExtractRiderLinkInEngine_Text, () =>
            {
                unrealPluginInstaller?.HandleManualInstallPlugin(
                    new InstallPluginDescription(PluginInstallLocation.Engine, ForceInstall.Yes, false)
                );
            });
            AddCommentText(Strings.ExtractRiderLinkPluginInEngineDescription_Text);

            var extractInGameButton = AddButton(Strings.ExtractRiderLinkInGame_Text, () =>
            {
                unrealPluginInstaller?.HandleManualInstallPlugin(
                    new InstallPluginDescription(PluginInstallLocation.Game, ForceInstall.Yes, false)
                );
            });
            AddCommentText(Strings.ExtractRiderLinkPluginInGameDescription_Text);

            var installationInProgressText = AddText(Strings.RiderLinkInstallationIsInProgress_Text);
            installationInProgressText.Visible.Value = ControlVisibility.Hidden;

            var unrealHost = solution?.GetComponent<UnrealHost>();
            unrealHost?.myModel.RiderLinkInstallationInProgress.Advise(unrealPluginInstaller.Lifetime,
                installationInProgress =>
                {
                    installInEngineButton.Enabled.Value = !installationInProgress;
                    foreach (var beControl in installInEngineButton.Descendants<BeControl>())
                    {
                        beControl.Enabled.Value = !installationInProgress;
                    }
                    installInGameButton.Enabled.Value = !installationInProgress;
                    foreach (var beControl in installInGameButton.Descendants<BeControl>())
                    {
                        beControl.Enabled.Value = !installationInProgress;
                    }
                    extractInEngineButton.Enabled.Value = !installationInProgress;
                    foreach (var beControl in extractInEngineButton.Descendants<BeControl>())
                    {
                        beControl.Enabled.Value = !installationInProgress;
                    }
                    extractInGameButton.Enabled.Value = !installationInProgress;
                    foreach (var beControl in extractInGameButton.Descendants<BeControl>())
                    {
                        beControl.Enabled.Value = !installationInProgress;
                    }
                    installationInProgressText.Visible.Value = installationInProgress ?
                        ControlVisibility.Visible :
                        ControlVisibility.Hidden;
                }
            );
        }