From 1eed8fec6fd4e0a07a92ed5734470e9da4fb00b0 Mon Sep 17 00:00:00 2001 From: rowo360 <59574371+rowo360@users.noreply.github.com> Date: Wed, 12 Feb 2025 07:13:10 +0100 Subject: [PATCH] Add cancel button to 'Do you want to save?' message box --- .../testcentric.gui/IMessageDisplay.cs | 19 ++++++++++++++++++ .../testcentric.gui/MessageBoxDisplay.cs | 12 +++++++++++ .../Presenters/TestCentricPresenter.cs | 20 +++++++++++-------- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/TestCentric/testcentric.gui/IMessageDisplay.cs b/src/TestCentric/testcentric.gui/IMessageDisplay.cs index bb2e00ead..9dfdc7e01 100644 --- a/src/TestCentric/testcentric.gui/IMessageDisplay.cs +++ b/src/TestCentric/testcentric.gui/IMessageDisplay.cs @@ -18,6 +18,25 @@ public interface IMessageDisplay bool YesNo(string message); + MessageBoxResult YesNoCancel(string message); + bool OkCancel(string message); } + + /// + /// Enum representing the return value of a MessageBox + /// It contains the identical values in same order as the DialogResult enum from Windows Forms + /// It has the same intention as the interface to hide any implementation details to the caller. + /// + public enum MessageBoxResult + { + None, + OK, + Cancel, + Abort, + Retry, + Ignore, + Yes, + No, + } } diff --git a/src/TestCentric/testcentric.gui/MessageBoxDisplay.cs b/src/TestCentric/testcentric.gui/MessageBoxDisplay.cs index 8e00d1fb6..dcf14e8a4 100644 --- a/src/TestCentric/testcentric.gui/MessageBoxDisplay.cs +++ b/src/TestCentric/testcentric.gui/MessageBoxDisplay.cs @@ -59,6 +59,13 @@ public static bool YesNo(string message, string caption) return MessageBox.Show(message, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes; } + public static MessageBoxResult YesNoCancel(string message, string caption) + { + DialogResult dialogResult = MessageBox.Show(message, caption, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); + return dialogResult == DialogResult.Yes ? MessageBoxResult.Yes : + dialogResult == DialogResult.No ? MessageBoxResult.No : MessageBoxResult.Cancel; + } + public static bool OkCancel(string message) { return OkCancel(message, DEFAULT_CAPTION); @@ -88,6 +95,11 @@ bool IMessageDisplay.YesNo(string message) return YesNo(message, _caption); } + MessageBoxResult IMessageDisplay.YesNoCancel(string message) + { + return YesNoCancel(message, _caption); + } + bool IMessageDisplay.OkCancel(string message) { return OkCancel(message, _caption); diff --git a/src/TestCentric/testcentric.gui/Presenters/TestCentricPresenter.cs b/src/TestCentric/testcentric.gui/Presenters/TestCentricPresenter.cs index 002381ed8..dc4f0e26e 100644 --- a/src/TestCentric/testcentric.gui/Presenters/TestCentricPresenter.cs +++ b/src/TestCentric/testcentric.gui/Presenters/TestCentricPresenter.cs @@ -346,9 +346,8 @@ void OnRunFinished(ResultNode result) _model.StopTestRun(true); } - CloseProject(); - //if (CloseProject() == DialogResult.Cancel) - // e.Cancel = true; + if (CloseProject() == MessageBoxResult.Cancel) + e.Cancel = true; } if (!e.Cancel) @@ -684,15 +683,20 @@ private void SaveProject() #region Close Methods - public void CloseProject() + public MessageBoxResult CloseProject() { - if (!_options.Unattended && _model.TestCentricProject.IsDirty && - _view.MessageDisplay.YesNo($"Do you want to save {_model.TestCentricProject.Name}?")) + MessageBoxResult messageBoxResult = MessageBoxResult.OK; + if (!_options.Unattended && _model.TestCentricProject.IsDirty) { - SaveProject(); + messageBoxResult = _view.MessageDisplay.YesNoCancel($"Do you want to save {_model.TestCentricProject.Name}?"); + if (messageBoxResult == MessageBoxResult.Yes) + SaveProject(); } - _model.CloseProject(); + if (messageBoxResult != MessageBoxResult.Cancel) + _model.CloseProject(); + + return messageBoxResult; } #endregion