示例#1
0
        private static OSMessageBoxResult ShowCore(string message, string title, Exception exception, string reportText, OSMessageBoxButton buttons, Dictionary <OSMessageBoxButton, string> customButtonLabels, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult, Action <OSMessageBoxResult> onComplete)
        {
            var result          = OSMessageBoxResult.None;
            var useErrorReport  = exception != null;
            var reportException = useErrorReport;

            if (useErrorReport)
            {
                foreach (Predicate <Exception> predicate in _exceptionFilters.GetInvocationList())
                {
                    reportException = predicate(exception);
                    if (!reportException)
                    {
                        break;
                    }
                }
            }
            var hideExtraButtons = false;

#if USE_BETA_ERROR_REPORT
            useErrorReport   = true;
            hideExtraButtons = exception == null;
#endif // USE_BETA_ERROR_REPORT
            if (useErrorReport)
            {
                var messageLine = message;
                var dialog      = ReportDialog.Create(title, messageLine);
                dialog.Exception  = reportException ? exception : null;
                dialog.ReportText = reportText;
                dialog.ShowCopyToClipboardButton = !hideExtraButtons;
                dialog.ShowSendEmailButton       = !hideExtraButtons;
                var buttonText = GetCustomTextForButton(OSMessageBoxButton.OK, null, buttons);
                var showResult = dialog.ShowDialog(buttonText);
                if (showResult.HasValue)
                {
                    result = showResult.Value ? OSMessageBoxResult.OK : OSMessageBoxResult.Cancel;
                    if (buttons != OSMessageBoxButton.OK)
                    {
                        result = showResult.Value ? OSMessageBoxResult.Yes : OSMessageBoxResult.No;
                    }
                }
            }
            else
            {
                var dialogMessage = new System.Text.StringBuilder(message);
                if (!string.IsNullOrWhiteSpace(reportText))
                {
                    dialogMessage.AppendLine().AppendLine().Append(reportText);
                }
                result = PlatformShowCore(dialogMessage.ToString(), title, exception, buttons, customButtonLabels, icon, defaultResult, onComplete);
            }
            return(result);
        }
示例#2
0
        private static OSMessageBoxResult PlatformShowCore(string message, string title, System.Exception exception, OSMessageBoxButton buttons, Dictionary <OSMessageBoxButton, string> customButtonLabels, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult, System.Action <OSMessageBoxResult> onComplete)
        {
            var result = OSMessageBoxResult.None;

            if (onComplete == null)
            {
                INTV.Shared.Utility.OSDispatcher.Current.InvokeOnMainDispatcher(() =>
                {
                    using (var messageBox = new NSAlert())
                    {
                        messageBox.MessageText     = title;
                        messageBox.InformativeText = message;
                        messageBox.AlertStyle      = (NSAlertStyle)icon;
                        messageBox.AddButton(GetCustomTextForButton(OSMessageBoxButton.OK, customButtonLabels, buttons));
                        var defaultButton      = messageBox.Buttons[0];
                        var defaultButtonIndex = 0;
                        NSButton buttonTwo     = null;
                        NSButton buttonThree   = null;
                        switch (buttons)
                        {
                        case OSMessageBoxButton.OK:
                            break;

                        case OSMessageBoxButton.YesNo:
                            if (defaultResult == OSMessageBoxResult.No)
                            {
                                defaultButtonIndex = 1;
                            }
                            buttonTwo = messageBox.AddButton(GetCustomTextForButton(OSMessageBoxButton.YesNo, customButtonLabels, buttons));
                            break;

                        case OSMessageBoxButton.YesNoCancel:
                            if (defaultResult == OSMessageBoxResult.Cancel)
                            {
                                defaultButtonIndex = 2;
                            }
                            buttonTwo   = messageBox.AddButton(GetCustomTextForButton(OSMessageBoxButton.YesNo, customButtonLabels, buttons));
                            buttonThree = messageBox.AddButton(GetCustomTextForButton(OSMessageBoxButton.YesNoCancel, customButtonLabels, buttons));
                            break;
                        }
                        if (customButtonLabels != null)
                        {
                            var buttonText = string.Empty;
                            System.Diagnostics.Debug.WriteLineIf((defaultButton != null) && customButtonLabels.TryGetValue(OSMessageBoxButton.OK, out buttonText) && (buttonText != GetCustomTextForButton(OSMessageBoxButton.OK, customButtonLabels, buttons)), "Custom button1 text not used.");
                            System.Diagnostics.Debug.WriteLineIf((buttonTwo != null) && customButtonLabels.TryGetValue(OSMessageBoxButton.YesNo, out buttonText) && (buttonText != GetCustomTextForButton(OSMessageBoxButton.YesNo, customButtonLabels, buttons)), "Custom button2 text not used.");
                            System.Diagnostics.Debug.WriteLineIf((buttonThree != null) && customButtonLabels.TryGetValue(OSMessageBoxButton.YesNoCancel, out buttonText) && (buttonText != GetCustomTextForButton(OSMessageBoxButton.YesNoCancel, customButtonLabels, buttons)), "Custom button3 text not used.");
                        }
                        if (defaultButtonIndex != 0)
                        {
                            defaultButton.KeyEquivalent = string.Empty;
                            messageBox.Buttons[defaultButtonIndex].KeyEquivalent = "\r";
                        }
                        result = (OSMessageBoxResult)(int)messageBox.RunModal();
                    }
                });
            }
            else
            {
                INTV.Shared.Utility.SingleInstanceApplication.MainThreadDispatcher.BeginInvoke(() =>
                {
                    result = ShowCore(message, title, exception, null, buttons, customButtonLabels, icon, defaultResult, null);
                    onComplete(result);
                });
            }
            return(result);
        }
示例#3
0
 /// <summary>
 /// Show a message box and wait for a result.
 /// </summary>
 /// <param name="message">The detailed message to display.</param>
 /// <param name="title">Title for the message box.</param>
 /// <param name="exception">Exception information to report, if applicable.</param>
 /// <param name="buttons">The buttons to show in the dialog box.</param>
 /// <param name="icon">The icon to show in the dialog box.</param>
 /// <returns>The result of the dialog.</returns>
 public static OSMessageBoxResult Show(string message, string title, Exception exception, OSMessageBoxButton buttons, OSMessageBoxIcon icon)
 {
     return(Show(message, title, exception, buttons, icon, OSMessageBoxResult.OK));
 }
示例#4
0
 /// <summary>
 /// Show a message box and wait for a result.
 /// </summary>
 /// <param name="message">The detailed message to display.</param>
 /// <param name="title">Title for the message box.</param>
 /// <param name="exception">Exception information to report, if applicable.</param>
 /// <param name="buttons">The buttons to show in the dialog box.</param>
 /// <param name="icon">The icon to show in the dialog box.</param>
 /// <param name="defaultResult">The default result.</param>
 /// <returns>The result of the dialog.</returns>
 public static OSMessageBoxResult Show(string message, string title, Exception exception, OSMessageBoxButton buttons, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult)
 {
     return(ShowCore(message, title, exception, null, buttons, null, icon, defaultResult, null));
 }
示例#5
0
 /// <summary>
 /// Show a message box and wait for a result.
 /// </summary>
 /// <param name="message">The detailed message to display.</param>
 /// <param name="title">Title for the message box.</param>
 /// <param name="buttons">The buttons to show in the dialog box.</param>
 /// <param name="customButtonLabels">Custom button names.</param>
 /// <param name="icon">The icon to show in the dialog box.</param>
 /// <returns>The result of the dialog.</returns>
 /// <remarks>Custom button names are not supported in Windows.</remarks>
 public static OSMessageBoxResult Show(string message, string title, OSMessageBoxButton buttons, Dictionary <OSMessageBoxButton, string> customButtonLabels, OSMessageBoxIcon icon)
 {
     return(ShowCore(message, title, null, null, buttons, customButtonLabels, icon, OSMessageBoxResult.OK, null));
 }
示例#6
0
 /// <summary>
 /// Show a message box and wait for a result.
 /// </summary>
 /// <param name="message">The detailed message to display.</param>
 /// <param name="title">Title for the message box.</param>
 /// <param name="exception">Exception information to report, if applicable.</param>
 /// <param name="reportText">Additional report text. If <paramref name="exception"/> is non-<c>null</c>, will be included in the error details, otherwise it will be part of the general message.</param>
 /// <param name="buttons">The buttons to show in the dialog box.</param>
 /// <param name="icon">The icon to show in the dialog box.</param>
 /// <param name="defaultResult">The default result.</param>
 /// <param name="onComplete">Upon completion of the dialog, this delegate will be called, if not <c>null</c>,</param>
 public static void Show(string message, string title, Exception exception, string reportText, OSMessageBoxButton buttons, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult, Action <OSMessageBoxResult> onComplete)
 {
     ShowCore(message, title, exception, reportText, buttons, null, icon, defaultResult, onComplete);
 }
示例#7
0
 /// <summary>
 /// Show a message box and wait for a result.
 /// </summary>
 /// <param name="message">The detailed message to display.</param>
 /// <param name="title">Title for the message box.</param>
 /// <param name="exception">Exception information to report, if applicable.</param>
 /// <param name="buttons">The buttons to show in the dialog box.</param>
 /// <param name="icon">The icon to show in the dialog box.</param>
 /// <param name="onComplete">Upon completion of the dialog, this delegate will be called, if not <c>null</c>,</param>
 public static void Show(string message, string title, Exception exception, OSMessageBoxButton buttons, OSMessageBoxIcon icon, Action <OSMessageBoxResult> onComplete)
 {
     Show(message, title, exception, null, buttons, icon, OSMessageBoxResult.OK, onComplete);
 }
示例#8
0
        private static OSMessageBoxResult PlatformShowCore(string message, string title, Exception exception, OSMessageBoxButton buttons, Dictionary <OSMessageBoxButton, string> customButtonLabels, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult, Action <OSMessageBoxResult> onComplete)
        {
            var result      = OSMessageBoxResult.None;
            var appInstance = INTV.Shared.Utility.SingleInstanceApplication.Instance;

            INTV.Shared.Utility.OSDispatcher.Current.InvokeOnMainDispatcher(() =>
            {
                var owner = (appInstance == null) ? null : appInstance.MainWindow;
                result    = OSMessageBoxResult.None;
                if (onComplete == null)
                {
                    result = (OSMessageBoxResult)System.Windows.MessageBox.Show(owner, message, title, (System.Windows.MessageBoxButton)buttons, (System.Windows.MessageBoxImage)icon, (System.Windows.MessageBoxResult)defaultResult);
                }
                else
                {
                    INTV.Shared.Utility.SingleInstanceApplication.MainThreadDispatcher.BeginInvoke(() =>
                    {
                        result = ShowCore(message, title, exception, null, buttons, customButtonLabels, icon, defaultResult, null);
                        onComplete(result);
                    });
                }
            });
            return(result);
        }
示例#9
0
        private static OSMessageBoxResult PlatformShowCore(string message, string title, System.Exception exception, OSMessageBoxButton buttons, Dictionary <OSMessageBoxButton, string> customButtonLabels, OSMessageBoxIcon icon, OSMessageBoxResult defaultResult, System.Action <OSMessageBoxResult> onComplete)
        {
            var result = OSMessageBoxResult.None;

            if (onComplete == null)
            {
                INTV.Shared.Utility.OSDispatcher.Current.InvokeOnMainDispatcher(() =>
                {
                    var nativeButtons = Gtk.ButtonsType.Ok;
                    switch (buttons)
                    {
                    case OSMessageBoxButton.OK:
                    case OSMessageBoxButton.YesNo:
                        nativeButtons = (Gtk.ButtonsType)buttons;
                        break;

                    case OSMessageBoxButton.YesNoCancel:
                        nativeButtons = Gtk.ButtonsType.None;         // we'll add buttons below
                        break;
                    }

                    var parent = Gtk.Window.ListToplevels().FirstOrDefault(w => w.IsActive || w.IsFocus);
                    if (parent == null)
                    {
                        parent = INTV.Shared.Utility.SingleInstanceApplication.Instance.MainWindow;
                    }

                    using (var messageBox = new Gtk.MessageDialog(parent, Gtk.DialogFlags.Modal, (Gtk.MessageType)icon, nativeButtons, "{0}", message))
                    {
                        messageBox.Title           = title;
                        messageBox.MessageType     = (Gtk.MessageType)icon;
                        messageBox.DefaultResponse = (Gtk.ResponseType)defaultResult;
                        switch (buttons)
                        {
                        case OSMessageBoxButton.OK:
                        case OSMessageBoxButton.YesNo:
                            break;

                        case OSMessageBoxButton.YesNoCancel:
                            messageBox.AddButton(Resources.Strings.YesButton_Text, Gtk.ResponseType.Yes);
                            messageBox.AddButton(Resources.Strings.NoButton_Text, Gtk.ResponseType.No);
                            messageBox.AddButton(Resources.Strings.CancelButtonText, Gtk.ResponseType.Cancel);
                            break;
                        }
                        result = (OSMessageBoxResult)messageBox.Run();
                        VisualHelpers.Close(messageBox);
                    }
                });
            }
            else
            {
                INTV.Shared.Utility.SingleInstanceApplication.MainThreadDispatcher.BeginInvoke(() =>
                {
                    result = ShowCore(message, title, exception, null, buttons, customButtonLabels, icon, defaultResult, null);
                    onComplete(result);
                });
            }

            return(result);
        }