예제 #1
0
        public void ShowDevOptionsDialog()
        {
            if (_devOptionsDialog != null || !IsEnabled)
            {
                return;
            }

            DispatcherHelpers.RunOnDispatcher(() =>
            {
                var options = new[]
                {
                    new DevOptionHandler(
                        "Reload JavaScript",
                        HandleReloadJavaScript),
                    new DevOptionHandler(
                        IsRemoteDebuggingEnabled
                            ? "Stop JS Remote Debugging"
                            : "Start JS Remote Debugging",
                        () =>
                    {
                        IsRemoteDebuggingEnabled = !IsRemoteDebuggingEnabled;
                        HandleReloadJavaScript();
                    }),
                    new DevOptionHandler(
                        _devSettings.IsHotModuleReplacementEnabled
                            ? "Disable Hot Reloading"
                            : "Enable Hot Reloading",
                        () =>
                    {
                        _devSettings.IsHotModuleReplacementEnabled = !_devSettings.IsHotModuleReplacementEnabled;
                        HandleReloadJavaScript();
                    }),
                    new DevOptionHandler(
                        _devSettings.IsReloadOnJavaScriptChangeEnabled
                            ? "Disable Live Reload"
                            : "Enable Live Reload",
                        () =>
                        _devSettings.IsReloadOnJavaScriptChangeEnabled =
                            !_devSettings.IsReloadOnJavaScriptChangeEnabled),
                    new DevOptionHandler(
                        _devSettings.IsElementInspectorEnabled
                            ? "Hide Inspector"
                            : "Show Inspector",
                        () =>
                    {
                        _devSettings.IsElementInspectorEnabled = !_devSettings.IsElementInspectorEnabled;
                        _currentReactContext?
                        .GetJavaScriptModule <RCTDeviceEventEmitter>()
                        .emit("toggleElementInspector", null);
                    }),
                };

                _devOptionsDialogOpen     = true;
                _devOptionsDialog         = new DevOptionDialog();
                _devOptionsDialog.Closed += (_, __) =>
                {
                    _devOptionsDialogOpen    = false;
                    _dismissDevOptionsDialog = null;
                    _devOptionsDialog        = null;
                };

                foreach (var option in options)
                {
                    _devOptionsDialog.Add(option.Name, option.OnSelect);
                }

                if (_redBoxDialog != null)
                {
                    _dismissRedBoxDialog();
                }

#if WINDOWS_UWP
                var asyncInfo            = _devOptionsDialog.ShowAsync();
                _dismissDevOptionsDialog = asyncInfo.Cancel;

                foreach (var option in options)
                {
                    option.HideDialog = _dismissDevOptionsDialog;
                }
#else
                if (Application.Current != null && Application.Current.MainWindow != null && Application.Current.MainWindow.IsLoaded)
                {
                    _devOptionsDialog.Owner = Application.Current.MainWindow;
                }
                else
                {
                    _devOptionsDialog.Topmost = true;
                    _devOptionsDialog.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                }

                _dismissDevOptionsDialog = _devOptionsDialog.Close;
                _devOptionsDialog.Show();

                foreach (var option in options)
                {
                    option.HideDialog = _dismissDevOptionsDialog;
                }
#endif
            });
        }