Пример #1
0
 public static void Initialize(VirtualFileSystem virtualFileSystem, AccountManager accountManager, HorizonClient horizonClient, StyleableWindow owner)
 {
     _owner             = owner;
     _virtualFileSystem = virtualFileSystem;
     _horizonClient     = horizonClient;
     _accountManager    = accountManager;
 }
Пример #2
0
        public static async Task <(UserResult Result, string Input)> ShowInputDialog(StyleableWindow window, string title, string message, string input = "", string subMessage = "", uint maxLength = int.MaxValue)
        {
            ContentDialog contentDialog = window.ContentDialog;

            UserResult result = UserResult.Cancel;

            InputDialog content = new InputDialog(message, input = "", subMessage = "", maxLength);

            if (contentDialog != null)
            {
                contentDialog.Title                = title;
                contentDialog.PrimaryButtonText    = LocaleManager.Instance["InputDialogOk"];
                contentDialog.SecondaryButtonText  = "";
                contentDialog.CloseButtonText      = LocaleManager.Instance["InputDialogCancel"];
                contentDialog.Content              = content;
                contentDialog.PrimaryButtonCommand = MiniCommand.Create(() =>
                {
                    result = UserResult.Ok;
                    input  = content.Input;
                });
                await contentDialog.ShowAsync();
            }

            return(result, input);
        }
Пример #3
0
        internal static async Task <bool> CreateChoiceDialog(StyleableWindow window, string title, string primary, string secondaryText)
        {
            if (_isChoiceDialogOpen)
            {
                return(false);
            }

            _isChoiceDialogOpen = true;

            UserResult response =
                await ShowContentDialog(
                    window,
                    title,
                    primary,
                    secondaryText,
                    LocaleManager.Instance["InputDialogYes"],
                    "",
                    LocaleManager.Instance["InputDialogNo"],
                    (int)Symbol.Help,
                    UserResult.Yes);

            _isChoiceDialogOpen = false;

            return(response == UserResult.Yes);
        }
Пример #4
0
 internal static async Task <bool> CreateStopEmulationDialog(StyleableWindow owner)
 {
     return(await CreateChoiceDialog(
                owner,
                LocaleManager.Instance["DialogStopEmulationTitle"],
                LocaleManager.Instance["DialogStopEmulationMessage"],
                LocaleManager.Instance["DialogExitSubMessage"]));
 }
Пример #5
0
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
        public static bool CanUpdate(bool showWarnings, StyleableWindow parent)
        {
#if !DISABLE_UPDATER
            if (RuntimeInformation.OSArchitecture != Architecture.X64)
            {
                if (showWarnings)
                {
                    ContentDialogHelper.CreateWarningDialog(parent, LocaleManager.Instance["DialogUpdaterArchNotSupportedMessage"],
                                                            LocaleManager.Instance["DialogUpdaterArchNotSupportedSubMessage"]);
                }

                return(false);
            }

            if (!NetworkInterface.GetIsNetworkAvailable())
            {
                if (showWarnings)
                {
                    ContentDialogHelper.CreateWarningDialog(parent, LocaleManager.Instance["DialogUpdaterNoInternetMessage"],
                                                            LocaleManager.Instance["DialogUpdaterNoInternetSubMessage"]);
                }

                return(false);
            }

            if (Program.Version.Contains("dirty") || !ReleaseInformations.IsValid())
            {
                if (showWarnings)
                {
                    ContentDialogHelper.CreateWarningDialog(parent, LocaleManager.Instance["DialogUpdaterDirtyBuildMessage"],
                                                            LocaleManager.Instance["DialogUpdaterDirtyBuildSubMessage"]);
                }

                return(false);
            }

            return(true);
#else
            if (showWarnings)
            {
                if (ReleaseInformations.IsFlatHubBuild())
                {
                    ContentDialogHelper.CreateWarningDialog(parent,
                                                            LocaleManager.Instance["UpdaterDisabledWarningTitle"], LocaleManager.Instance["DialogUpdaterFlatpakNotSupportedMessage"]);
                }
                else
                {
                    ContentDialogHelper.CreateWarningDialog(parent,
                                                            LocaleManager.Instance["UpdaterDisabledWarningTitle"], LocaleManager.Instance["DialogUpdaterDirtyBuildSubMessage"]);
                }
            }

            return(false);
#endif
        }
Пример #6
0
 internal static async Task CreateWarningDialog(StyleableWindow window, string primary, string secondaryText)
 {
     await ShowContentDialog(
         window,
         LocaleManager.Instance["DialogWarningTitle"],
         primary,
         secondaryText,
         "",
         "",
         LocaleManager.Instance["InputDialogOk"],
         (int)Symbol.Important);
 }
Пример #7
0
 internal static async Task ShowNotAvailableMessage(StyleableWindow window)
 {
     // Temporary placeholder for features to be added
     await ShowContentDialog(
         window,
         "Feature Not Available",
         "The selected feature is not available in this version.",
         "",
         "",
         "",
         LocaleManager.Instance["InputDialogOk"],
         (int)Symbol.Important);
 }
Пример #8
0
        internal static async Task CreateErrorDialog(StyleableWindow owner, string errorMessage, string secondaryErrorMessage = "")
        {
            Logger.Error?.Print(LogClass.Application, errorMessage);

            await ShowContentDialog(
                owner,
                LocaleManager.Instance["DialogErrorTitle"],
                LocaleManager.Instance["DialogErrorMessage"],
                errorMessage,
                secondaryErrorMessage,
                "",
                LocaleManager.Instance["InputDialogOk"],
                (int)Symbol.Dismiss);
        }
Пример #9
0
        private async static Task <UserResult> ShowContentDialog(
            StyleableWindow window,
            string title,
            string primaryText,
            string secondaryText,
            string primaryButton,
            string secondaryButton,
            string closeButton,
            int iconSymbol,
            UserResult primaryButtonResult = UserResult.Ok)
        {
            UserResult result = UserResult.None;

            ContentDialog contentDialog = window.ContentDialog;

            await ShowDialog();

            async Task ShowDialog()
            {
                if (contentDialog != null)
                {
                    contentDialog.Title               = title;
                    contentDialog.PrimaryButtonText   = primaryButton;
                    contentDialog.SecondaryButtonText = secondaryButton;
                    contentDialog.CloseButtonText     = closeButton;
                    contentDialog.Content             = CreateDialogTextContent(primaryText, secondaryText, iconSymbol);

                    contentDialog.PrimaryButtonCommand = MiniCommand.Create(() =>
                    {
                        result = primaryButtonResult;
                    });
                    contentDialog.SecondaryButtonCommand = MiniCommand.Create(() =>
                    {
                        result = UserResult.No;
                    });
                    contentDialog.CloseButtonCommand = MiniCommand.Create(() =>
                    {
                        result = UserResult.Cancel;
                    });

                    await contentDialog.ShowAsync(ContentDialogPlacement.Popup);
                }
                ;
            }

            return(result);
        }
Пример #10
0
 public static async Task <UserResult> CreateInfoDialog(
     StyleableWindow window,
     string primary,
     string secondaryText,
     string acceptButton,
     string closeButton,
     string title)
 {
     return(await ShowContentDialog(
                window,
                title,
                primary,
                secondaryText,
                acceptButton,
                "",
                closeButton,
                (int)Symbol.Important));
 }
Пример #11
0
        public AmiiboWindowViewModel(StyleableWindow owner, string lastScannedAmiiboId, string titleId)
        {
            _owner      = owner;
            _httpClient = new HttpClient {
                Timeout = TimeSpan.FromMilliseconds(5000)
            };
            LastScannedAmiiboId = lastScannedAmiiboId;
            TitleId             = titleId;

            Directory.CreateDirectory(Path.Join(AppDataManager.BaseDirPath, "system", "amiibo"));

            _amiiboJsonPath = Path.Join(AppDataManager.BaseDirPath, "system", "amiibo", "Amiibo.json");
            _amiiboList     = new List <Amiibo.AmiiboApi>();
            _amiiboSeries   = new ObservableCollection <string>();
            _amiibos        = new AvaloniaList <Amiibo.AmiiboApi>();

            _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.Ui.Common/Resources/Logo_Amiibo.png");

            _ = LoadContentAsync();
        }
Пример #12
0
 internal static async Task <UserResult> CreateConfirmationDialog(
     StyleableWindow window,
     string primaryText,
     string secondaryText,
     string acceptButtonText,
     string cancelButtonText,
     string title,
     UserResult primaryButtonResult = UserResult.Yes)
 {
     return(await ShowContentDialog(
                window,
                string.IsNullOrWhiteSpace(title)?LocaleManager.Instance["DialogConfirmationTitle"] : title,
                primaryText,
                secondaryText,
                acceptButtonText,
                "",
                cancelButtonText,
                (int)Symbol.Help,
                primaryButtonResult));
 }
Пример #13
0
        public static async Task <(UserResult Result, string Input)> ShowInputDialog(StyleableWindow window, string title, SoftwareKeyboardUiArgs args)
        {
            ContentDialog contentDialog = window.ContentDialog;

            UserResult result = UserResult.Cancel;

            SwkbdAppletDialog content = new SwkbdAppletDialog(args.HeaderText, args.SubtitleText, args.GuideText)
            {
                Message = args.InitialText ?? ""
            };

            string input = string.Empty;

            content.SetInputLengthValidation(args.StringLengthMin, args.StringLengthMax);

            if (contentDialog != null)
            {
                content._host                        = contentDialog;
                contentDialog.Title                  = title;
                contentDialog.PrimaryButtonText      = args.SubmitText;
                contentDialog.IsPrimaryButtonEnabled = content._checkLength(content.Message.Length);
                contentDialog.SecondaryButtonText    = "";
                contentDialog.CloseButtonText        = LocaleManager.Instance["InputDialogCancel"];
                contentDialog.Content                = content;
                TypedEventHandler <ContentDialog, ContentDialogClosedEventArgs> handler = (sender, eventArgs) =>
                {
                    if (eventArgs.Result == ContentDialogResult.Primary)
                    {
                        result = UserResult.Ok;
                        input  = content.Input.Text;
                    }
                };
                contentDialog.Closed += handler;
                await contentDialog.ShowAsync();

                contentDialog.Closed -= handler;
            }

            return(result, input);
        }
Пример #14
0
        internal static async Task <string> CreateInputDialog(
            string title,
            string mainText,
            string subText,
            StyleableWindow owner,
            uint maxLength = int.MaxValue,
            string input   = "")
        {
            var result = await InputDialog.ShowInputDialog(
                owner,
                title,
                mainText,
                input,
                subText,
                maxLength);

            if (result.Result == UserResult.Ok)
            {
                return(result.Input);
            }

            return(string.Empty);
        }
Пример #15
0
        public async static Task <UserResult> ShowDeferredContentDialog(
            StyleableWindow window,
            string title,
            string primaryText,
            string secondaryText,
            string primaryButton,
            string secondaryButton,
            string closeButton,
            int iconSymbol,
            ManualResetEvent deferResetEvent,
            Func <Window, Task> doWhileDeferred = null)
        {
            bool startedDeferring = false;

            UserResult result = UserResult.None;

            ContentDialog contentDialog = new ContentDialog
            {
                Title                = title,
                PrimaryButtonText    = primaryButton,
                SecondaryButtonText  = secondaryButton,
                CloseButtonText      = closeButton,
                Content              = CreateDialogTextContent(primaryText, secondaryText, iconSymbol),
                PrimaryButtonCommand = MiniCommand.Create(() =>
                {
                    result = primaryButton == LocaleManager.Instance["InputDialogYes"] ? UserResult.Yes : UserResult.Ok;
                }),
            };

            contentDialog.SecondaryButtonCommand = MiniCommand.Create(() =>
            {
                contentDialog.PrimaryButtonClick -= DeferClose;
                result = UserResult.No;
            });
            contentDialog.CloseButtonCommand = MiniCommand.Create(() =>
            {
                contentDialog.PrimaryButtonClick -= DeferClose;
                result = UserResult.Cancel;
            });
            contentDialog.PrimaryButtonClick += DeferClose;
            await contentDialog.ShowAsync(ContentDialogPlacement.Popup);

            return(result);

            async void DeferClose(ContentDialog sender, ContentDialogButtonClickEventArgs args)
            {
                if (startedDeferring)
                {
                    return;
                }

                contentDialog.PrimaryButtonClick -= DeferClose;

                startedDeferring = true;

                var deferral = args.GetDeferral();

                result = primaryButton == LocaleManager.Instance["InputDialogYes"] ? UserResult.Yes : UserResult.Ok;

                contentDialog.PrimaryButtonClick -= DeferClose;

#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
                Task.Run(() =>
                {
                    deferResetEvent.WaitOne();

                    Dispatcher.UIThread.Post(() =>
                    {
                        deferral.Complete();
                    });
                });
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed

                if (doWhileDeferred != null)
                {
                    await doWhileDeferred(window);

                    deferResetEvent.Set();
                }
            }
        }