/// <inheritdoc/>
 protected override bool Ask(string question, MsgSeverity severity)
 {
     bool result = false;
     Log.Debug("Question: " + question);
     _owner.Invoke(new Action(() => result = Msg.YesNo(_owner, question, severity)));
     Log.Debug("Answer: " + result);
     return result;
 }
Example #2
0
        /// <summary>
        /// Asks the user a OK/Cancel-question using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="okCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.OK"/> option.</param>
        /// <param name="cancelCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Cancel"/> option; can be <c>null</c>.</param>
        /// <returns><c>true</c> if <paramref name="okCaption"/> was selected, <c>false</c> if <paramref name="cancelCaption"/> was selected.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="okCaption"/> and <paramref name="cancelCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static bool OkCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string okCaption, [CanBeNull, Localizable(true)] string cancelCaption = null)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text)) throw new ArgumentNullException(nameof(text));
            if (string.IsNullOrEmpty(okCaption)) throw new ArgumentNullException(nameof(okCaption));
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);

                // Display default names with custom explanations
                taskDialog.UseCommandLinks = true;

                if (string.IsNullOrEmpty(cancelCaption))
                { // Default cancel button
                    taskDialog.Buttons = new[]
                    {
                        new TaskDialogButton((int)DialogResult.OK, okCaption.Replace("\r\n", "\n"))
                    };
                    taskDialog.CommonButtons = TaskDialogCommonButtons.Cancel;
                }
                else
                { // Custom cancel button
                    taskDialog.Buttons = new[]
                    {
                        new TaskDialogButton((int)DialogResult.OK, okCaption.Replace("\r\n", "\n")),
                        new TaskDialogButton((int)DialogResult.Cancel, cancelCaption.Replace("\r\n", "\n"))
                    };
                }

                // Only Infos should default to OK
                if (severity >= MsgSeverity.Warn) taskDialog.DefaultButton = (int)DialogResult.Cancel;

                try
                {
                    return ShowTaskDialog(taskDialog, owner) == DialogResult.OK;
                }
                    #region Error handling
                catch (BadImageFormatException)
                {
                    return ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK;
                }
                catch (EntryPointNotFoundException)
                {
                    return ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK;
                }
                #endregion
            }
            else return ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK;
        }
Example #3
0
 /// <inheritdoc/>
 protected override bool Ask(string question, MsgSeverity severity)
 {
     Log.Debug("Question: " + question);
     switch (ApplicationUtils.Invoke(() => Msg.YesNoCancel(_owner, question, severity)))
     {
         case ResponseType.Yes:
             Log.Debug("Answer: Yes");
             return true;
         case ResponseType.No:
             Log.Debug("Answer: No");
             return false;
         case ResponseType.Cancel:
         default:
             Log.Debug("Answer: Cancel");
             throw new OperationCanceledException();
     }
 }
Example #4
0
 /// <summary>
 /// Displays a message to the user using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 public static void Inform([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     if (TaskDialog.TaskDialog.IsAvailable)
     {
         try
         {
             ShowTaskDialog(GetTaskDialog(text, severity), owner);
         }
         catch (BadImageFormatException)
         {
             ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
         }
         catch (EntryPointNotFoundException)
         {
             ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
         }
     }
     else ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
 }
Example #5
0
        /// <summary>
        /// Displays a message using a <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        private static TaskDialog.TaskDialog GetTaskDialog([NotNull, Localizable(true)] string text, MsgSeverity severity)
        {
            // Split everything from the second line onwards off from the main text
            string[] split = text.Replace("\r\n", "\n").Split(new[] {'\n'}, 2);
            var taskDialog = new TaskDialog.TaskDialog
            {
                PositionRelativeToWindow = true,
                WindowTitle = Application.ProductName,
                MainInstruction = split[0]
            };
            if (split.Length == 2) taskDialog.Content = split[1];

            // Handle RTL systems
            taskDialog.RightToLeftLayout = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;

            // Select icon based on message severity
            switch (severity)
            {
                case MsgSeverity.Warn:
                    taskDialog.MainIcon = TaskDialogIcon.Warning;
                    taskDialog.AllowDialogCancellation = true;
                    break;

                case MsgSeverity.Error:
                    taskDialog.MainIcon = TaskDialogIcon.Error;
                    taskDialog.AllowDialogCancellation = false; // Real errors shouldn't be easily ESCed away
                    break;

                default:
                case MsgSeverity.Info:
                    taskDialog.MainIcon = TaskDialogIcon.Information;
                    taskDialog.AllowDialogCancellation = true;
                    break;
            }

            return taskDialog;
        }
Example #6
0
        /// <inheritdoc/>
        public Future<DialogResult> Ask(string question, MsgSeverity severity)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(question)) throw new ArgumentNullException(nameof(question));
            #endregion

            if (Visible)
                return Msg.YesNoCancel(this, question, severity);
            else
            {
                _pendingQuestion = question;
                _pendingResult = new Future<DialogResult>();

                ShowTrayIcon(question.GetLeftPartAtFirstOccurrence(Environment.NewLine) + Environment.NewLine + Resources.ClickToChoose, ToolTipIcon.Info);

                return _pendingResult;
            }
        }
Example #7
0
 /// <summary>
 /// Asks the user to choose between two options (yes/no) using a <see cref="MessageDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><c>true</c> if Yes was chosen, <c>false</c> if No was chosen.</returns>
 public static bool YesNo([CanBeNull] Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     return ShowMessageDialog(owner, text, severity, ButtonsType.YesNo) == ResponseType.Yes;
 }
Example #8
0
        //--------------------//

        #region MessageDialog
        /// <summary>Displays a message using a <see cref="MessageDialog"/>.</summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="buttons">The buttons the user can click.</param>
        /// <param name="addCancel">Add an additional "Cancel" button.</param>
        private static ResponseType ShowMessageDialog([CanBeNull] Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, ButtonsType buttons, bool addCancel = false)
        {
            // Select icon based on message severity
            MessageType type;
            switch (severity)
            {
                case MsgSeverity.Warn:
                    type = MessageType.Warning;
                    break;
                case MsgSeverity.Error:
                    type = MessageType.Error;
                    break;
                default:
                case MsgSeverity.Info:
                    type = buttons.HasFlag(ButtonsType.YesNo) ? MessageType.Question : MessageType.Info;
                    break;
            }

            // Display MessageDialog
            using (var dialog = new MessageDialog(owner, DialogFlags.Modal, type, buttons, text))
            {
                if (addCancel) dialog.AddButton(Stock.Cancel, 2);
                dialog.Title = AppInfo.Current.ProductName;
                var response = (ResponseType)dialog.Run();
                dialog.Destroy();
                return response;
            }
        }
Example #9
0
 /// <inheritdoc/>
 protected override bool Ask(string question, MsgSeverity severity) => _request.OptionKeys.Contains("Force") || _request.ShouldContinue(question, "Zero Install");
Example #10
0
File: Msg.cs Project: isaveu/common
 /// <summary>
 /// Displays a message to the user using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 public static void Inform([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     if (TaskDialog.TaskDialog.IsAvailable)
     {
         try
         {
             ShowTaskDialog(GetTaskDialog(text, severity), owner);
         }
         catch (BadImageFormatException)
         {
             ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
         }
         catch (EntryPointNotFoundException)
         {
             ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
         }
     }
     else
     {
         ShowMesageBox(owner, text, severity, MessageBoxButtons.OK);
     }
 }
Example #11
0
File: Msg.cs Project: isaveu/common
        /// <summary>
        /// Displays a message using a <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        private static TaskDialog.TaskDialog GetTaskDialog([NotNull, Localizable(true)] string text, MsgSeverity severity)
        {
            // Split everything from the second line onwards off from the main text
            string[] split      = text.Replace("\r\n", "\n").Split(new[] { '\n' }, 2);
            var      taskDialog = new TaskDialog.TaskDialog
            {
                PositionRelativeToWindow = true,
                WindowTitle     = Application.ProductName,
                MainInstruction = split[0]
            };

            if (split.Length == 2)
            {
                taskDialog.Content = split[1];
            }

            // Handle RTL systems
            taskDialog.RightToLeftLayout = CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft;

            // Select icon based on message severity
            switch (severity)
            {
            case MsgSeverity.Warn:
                taskDialog.MainIcon = TaskDialogIcon.Warning;
                taskDialog.AllowDialogCancellation = true;
                break;

            case MsgSeverity.Error:
                taskDialog.MainIcon = TaskDialogIcon.Error;
                taskDialog.AllowDialogCancellation = false;     // Real errors shouldn't be easily ESCed away
                break;

            default:
            case MsgSeverity.Info:
                taskDialog.MainIcon = TaskDialogIcon.Information;
                taskDialog.AllowDialogCancellation = true;
                break;
            }

            return(taskDialog);
        }
Example #12
0
File: Msg.cs Project: isaveu/common
        //--------------------//

        #region MessageBox
        /// <summary>Displays a message using a <see cref="MessageBox"/>.</summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="buttons">The buttons the user can click.</param>
        private static DialogResult ShowMesageBox([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, MessageBoxButtons buttons)
        {
            // Handle RTL systems
            MessageBoxOptions localizedOptions;

            if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft)
            {
                localizedOptions = MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign;
            }
            else
            {
                localizedOptions = 0;
            }

            // Select icon based on message severity
            MessageBoxIcon icon;

            switch (severity)
            {
            case MsgSeverity.Warn:
                icon = MessageBoxIcon.Warning;
                break;

            case MsgSeverity.Error:
                icon = MessageBoxIcon.Error;
                break;

            default:
            case MsgSeverity.Info:
                icon = MessageBoxIcon.Information;
                break;
            }

            // Display MessageDialog
            return(MessageBox.Show(owner, text, Application.ProductName, buttons, icon, MessageBoxDefaultButton.Button1, localizedOptions));
        }
Example #13
0
File: Msg.cs Project: isaveu/common
 /// <summary>
 /// Asks the user to choose between three options (yes/no/cancel) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><see cref="DialogResult.Yes"/> if Yes was chosen,
 /// <see cref="DialogResult.No"/> if No was chosen,
 /// <see cref="DialogResult.Cancel"/> otherwise.</returns>
 public static DialogResult YesNoCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     return(YesNoCancel(owner, text, severity, Resources.Yes, Resources.No));
 }
Example #14
0
File: Msg.cs Project: isaveu/common
        /// <summary>
        /// Asks the user to choose between three options (yes/no/cancel) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="yesCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Yes"/> option.</param>
        /// <param name="noCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.No"/> option.</param>
        /// <returns><see cref="DialogResult.Yes"/> if <paramref name="yesCaption"/> was chosen,
        /// <see cref="DialogResult.No"/> if <paramref name="noCaption"/> was chosen,
        /// <see cref="DialogResult.Cancel"/> otherwise.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="yesCaption"/> and <paramref name="noCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static DialogResult YesNoCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string yesCaption, [NotNull, Localizable(true)] string noCaption)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(nameof(text));
            }
            if (string.IsNullOrEmpty(yesCaption))
            {
                throw new ArgumentNullException(nameof(yesCaption));
            }
            if (string.IsNullOrEmpty(noCaption))
            {
                throw new ArgumentNullException(nameof(noCaption));
            }
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);
                taskDialog.AllowDialogCancellation = true;
                taskDialog.CommonButtons           = TaskDialogCommonButtons.Cancel;

                // Display fully customized text
                taskDialog.UseCommandLinks = true;
                taskDialog.Buttons         = new[]
                {
                    new TaskDialogButton((int)DialogResult.Yes, yesCaption.Replace("\r\n", "\n")),
                    new TaskDialogButton((int)DialogResult.No, noCaption.Replace("\r\n", "\n"))
                };

                // Infos and Warnings (like Save) should default to yes
                if (severity >= MsgSeverity.Error)
                {
                    taskDialog.DefaultButton = (int)DialogResult.Cancel;
                }

                try
                {
                    return(ShowTaskDialog(taskDialog, owner));
                }
                #region Error handling
                catch (BadImageFormatException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel));
                }
                catch (EntryPointNotFoundException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel));
                }
                #endregion
            }
            else
            {
                return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel));
            }
        }
Example #15
0
File: Msg.cs Project: isaveu/common
        /// <summary>
        /// Asks the user to choose between two options (yes/no) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="yesCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Yes"/> option.</param>
        /// <param name="noCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.No"/> option.</param>
        /// <returns><c>true</c> if <paramref name="yesCaption"/> was chosen, <c>false</c> if <paramref name="noCaption"/> was chosen.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="yesCaption"/> and <paramref name="noCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static bool YesNo([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string yesCaption, [NotNull, Localizable(true)] string noCaption)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(nameof(text));
            }
            if (string.IsNullOrEmpty(yesCaption))
            {
                throw new ArgumentNullException(nameof(yesCaption));
            }
            if (string.IsNullOrEmpty(noCaption))
            {
                throw new ArgumentNullException(nameof(noCaption));
            }
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);

                // Display fully customized text
                taskDialog.UseCommandLinks = true;
                taskDialog.Buttons         = new[]
                {
                    new TaskDialogButton((int)DialogResult.Yes, yesCaption.Replace("\r\n", "\n")),
                    new TaskDialogButton((int)DialogResult.No, noCaption.Replace("\r\n", "\n"))
                };

                try
                {
                    return(ShowTaskDialog(taskDialog, owner) == DialogResult.Yes);
                }
                #region Error handling
                catch (BadImageFormatException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
                }
                catch (EntryPointNotFoundException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
                }
                #endregion
            }
            else
            {
                return(ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
            }
        }
Example #16
0
File: Msg.cs Project: isaveu/common
 /// <summary>
 /// Asks the user a OK/Cancel-question using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><c>true</c> if OK was selected, <c>false</c> if Cancel was selected.</returns>
 /// <remarks>If a <see cref="MessageBox"/> is used, OK and Cancel are not display to the user, so don't rely on them!</remarks>
 public static bool OkCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     return(OkCancel(owner, text, severity, "OK", Resources.Cancel));
 }
Example #17
0
File: Msg.cs Project: isaveu/common
        /// <summary>
        /// Asks the user a OK/Cancel-question using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="okCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.OK"/> option.</param>
        /// <param name="cancelCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Cancel"/> option; can be <c>null</c>.</param>
        /// <returns><c>true</c> if <paramref name="okCaption"/> was selected, <c>false</c> if <paramref name="cancelCaption"/> was selected.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="okCaption"/> and <paramref name="cancelCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static bool OkCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string okCaption, [CanBeNull, Localizable(true)] string cancelCaption = null)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentNullException(nameof(text));
            }
            if (string.IsNullOrEmpty(okCaption))
            {
                throw new ArgumentNullException(nameof(okCaption));
            }
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);

                // Display default names with custom explanations
                taskDialog.UseCommandLinks = true;

                if (string.IsNullOrEmpty(cancelCaption))
                { // Default cancel button
                    taskDialog.Buttons = new[]
                    {
                        new TaskDialogButton((int)DialogResult.OK, okCaption.Replace("\r\n", "\n"))
                    };
                    taskDialog.CommonButtons = TaskDialogCommonButtons.Cancel;
                }
                else
                { // Custom cancel button
                    taskDialog.Buttons = new[]
                    {
                        new TaskDialogButton((int)DialogResult.OK, okCaption.Replace("\r\n", "\n")),
                        new TaskDialogButton((int)DialogResult.Cancel, cancelCaption.Replace("\r\n", "\n"))
                    };
                }

                // Only Infos should default to OK
                if (severity >= MsgSeverity.Warn)
                {
                    taskDialog.DefaultButton = (int)DialogResult.Cancel;
                }

                try
                {
                    return(ShowTaskDialog(taskDialog, owner) == DialogResult.OK);
                }
                #region Error handling
                catch (BadImageFormatException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK);
                }
                catch (EntryPointNotFoundException)
                {
                    return(ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK);
                }
                #endregion
            }
            else
            {
                return(ShowMesageBox(owner, text, severity, MessageBoxButtons.OKCancel) == DialogResult.OK);
            }
        }
Example #18
0
 /// <summary>
 /// Asks the user a OK/Cancel-question using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><c>true</c> if OK was selected, <c>false</c> if Cancel was selected.</returns>
 /// <remarks>If a <see cref="MessageBox"/> is used, OK and Cancel are not display to the user, so don't rely on them!</remarks>
 public static bool OkCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     return OkCancel(owner, text, severity, "OK", Resources.Cancel);
 }
Example #19
0
 /// <summary>
 /// Fakes asking the user a question.
 /// </summary>
 /// <returns>The current value of <see cref="AnswerQuestionWith"/>.</returns>
 protected override bool Ask(string question, MsgSeverity severity)
 {
     LastQuestion = question;
     return(AnswerQuestionWith);
 }
Example #20
0
        /// <summary>
        /// Asks the user to choose between two options (yes/no) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="yesCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Yes"/> option.</param>
        /// <param name="noCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.No"/> option.</param>
        /// <returns><c>true</c> if <paramref name="yesCaption"/> was chosen, <c>false</c> if <paramref name="noCaption"/> was chosen.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="yesCaption"/> and <paramref name="noCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static bool YesNo([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string yesCaption, [NotNull, Localizable(true)] string noCaption)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text)) throw new ArgumentNullException(nameof(text));
            if (string.IsNullOrEmpty(yesCaption)) throw new ArgumentNullException(nameof(yesCaption));
            if (string.IsNullOrEmpty(noCaption)) throw new ArgumentNullException(nameof(noCaption));
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);

                // Display fully customized text
                taskDialog.UseCommandLinks = true;
                taskDialog.Buttons = new[]
                {
                    new TaskDialogButton((int)DialogResult.Yes, yesCaption.Replace("\r\n", "\n")),
                    new TaskDialogButton((int)DialogResult.No, noCaption.Replace("\r\n", "\n"))
                };

                try
                {
                    return (ShowTaskDialog(taskDialog, owner) == DialogResult.Yes);
                }
                    #region Error handling
                catch (BadImageFormatException)
                {
                    return (ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
                }
                catch (EntryPointNotFoundException)
                {
                    return (ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
                }
                #endregion
            }
            else return (ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNo) == DialogResult.Yes);
        }
Example #21
0
 /// <inheritdoc/>
 protected override bool Ask(string question, MsgSeverity severity) => _request.OptionKeys.Contains("Force") || _request.ShouldContinue(question, "Zero Install");
Example #22
0
        /// <summary>
        /// Asks the user to choose between three options (yes/no/cancel) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
        /// </summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="yesCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.Yes"/> option.</param>
        /// <param name="noCaption">The title and a short description (separated by a linebreak) of the <see cref="DialogResult.No"/> option.</param>
        /// <returns><see cref="DialogResult.Yes"/> if <paramref name="yesCaption"/> was chosen,
        /// <see cref="DialogResult.No"/> if <paramref name="noCaption"/> was chosen,
        /// <see cref="DialogResult.Cancel"/> otherwise.</returns>
        /// <remarks>If a <see cref="MessageBox"/> is used, <paramref name="yesCaption"/> and <paramref name="noCaption"/> are not display to the user, so don't rely on them!</remarks>
        public static DialogResult YesNoCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, [NotNull, Localizable(true)] string yesCaption, [NotNull, Localizable(true)] string noCaption)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(text)) throw new ArgumentNullException(nameof(text));
            if (string.IsNullOrEmpty(yesCaption)) throw new ArgumentNullException(nameof(yesCaption));
            if (string.IsNullOrEmpty(noCaption)) throw new ArgumentNullException(nameof(noCaption));
            #endregion

            if (TaskDialog.TaskDialog.IsAvailable)
            {
                var taskDialog = GetTaskDialog(text, severity);
                taskDialog.AllowDialogCancellation = true;
                taskDialog.CommonButtons = TaskDialogCommonButtons.Cancel;

                // Display fully customized text
                taskDialog.UseCommandLinks = true;
                taskDialog.Buttons = new[]
                {
                    new TaskDialogButton((int)DialogResult.Yes, yesCaption.Replace("\r\n", "\n")),
                    new TaskDialogButton((int)DialogResult.No, noCaption.Replace("\r\n", "\n"))
                };

                // Infos and Warnings (like Save) should default to yes
                if (severity >= MsgSeverity.Error) taskDialog.DefaultButton = (int)DialogResult.Cancel;

                try
                {
                    return ShowTaskDialog(taskDialog, owner);
                }
                    #region Error handling
                catch (BadImageFormatException)
                {
                    return ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel);
                }
                catch (EntryPointNotFoundException)
                {
                    return ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel);
                }
                #endregion
            }
            else return ShowMesageBox(owner, text, severity, MessageBoxButtons.YesNoCancel);
        }
Example #23
0
 /// <summary>
 /// Displays a message to the user using a <see cref="MessageDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 public static void Inform([CanBeNull] Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     ShowMessageDialog(owner, text, severity, ButtonsType.Ok);
 }
Example #24
0
 /// <summary>
 /// Asks the user to choose between three options (yes/no/cancel) using a <see cref="MessageBox"/> or <see cref="TaskDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><see cref="DialogResult.Yes"/> if Yes was chosen,
 /// <see cref="DialogResult.No"/> if No was chosen,
 /// <see cref="DialogResult.Cancel"/> otherwise.</returns>
 public static DialogResult YesNoCancel([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     return YesNoCancel(owner, text, severity, Resources.Yes, Resources.No);
 }
Example #25
0
 /// <summary>
 /// Asks the user to choose between three options (yes/no/cancel) using a <see cref="MessageDialog"/>.
 /// </summary>
 /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
 /// <param name="text">The message to be displayed.</param>
 /// <param name="severity">How severe/important the message is.</param>
 /// <returns><see cref="ResponseType.Yes"/> if Yes was chosen,
 /// <see cref="ResponseType.No"/> if No was chosen,
 /// <see cref="ResponseType.Cancel"/> otherwise.</returns>
 public static ResponseType YesNoCancel([CanBeNull] Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity)
 {
     // ReSharper disable once BitwiseOperatorOnEnumWithoutFlags
     return ShowMessageDialog(owner, text, severity, ButtonsType.YesNo, addCancel: true);
 }
Example #26
0
        //--------------------//

        #region MessageBox
        /// <summary>Displays a message using a <see cref="MessageBox"/>.</summary>
        /// <param name="owner">The parent window the displayed window is modal to; can be <c>null</c>.</param>
        /// <param name="text">The message to be displayed.</param>
        /// <param name="severity">How severe/important the message is.</param>
        /// <param name="buttons">The buttons the user can click.</param>
        private static DialogResult ShowMesageBox([CanBeNull] IWin32Window owner, [NotNull, Localizable(true)] string text, MsgSeverity severity, MessageBoxButtons buttons)
        {
            // Handle RTL systems
            MessageBoxOptions localizedOptions;
            if (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft) localizedOptions = MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign;
            else localizedOptions = 0;

            // Select icon based on message severity
            MessageBoxIcon icon;
            switch (severity)
            {
                case MsgSeverity.Warn:
                    icon = MessageBoxIcon.Warning;
                    break;
                case MsgSeverity.Error:
                    icon = MessageBoxIcon.Error;
                    break;
                default:
                case MsgSeverity.Info:
                    icon = MessageBoxIcon.Information;
                    break;
            }

            // Display MessageDialog
            return MessageBox.Show(owner, text, Application.ProductName, buttons, icon, MessageBoxDefaultButton.Button1, localizedOptions);
        }
Example #27
0
        /// <summary>
        /// Returns icon for severity
        /// </summary>
        /// <param name="severity">severity</param>
        /// <returns>icon for severity</returns>
        public Icon GetSeverityIcon(MsgSeverity severity)
        {
            if (_iconsTable.Contains(severity))
            {

                return _iconsTable[severity] as Icon;
            } else
            {
                return System.Drawing.SystemIcons.Question;
            }
        }
Example #28
0
        /// <inheritdoc/>
        protected override bool Ask(string question, MsgSeverity severity)
        {
            Log.Debug("Question: " + question);
            Console.Error.WriteLine(question);

            // Loop until the user has made a valid choice
            while (true)
            {
                switch (CliUtils.ReadString(@"[Y/N]").ToLower())
                {
                    case "y":
                    case "yes":
                        Log.Debug("Answer: Yes");
                        return true;
                    case "n":
                    case "no":
                        Log.Debug("Answer: No");
                        return false;
                }
            }
        }