Skip to content

Commit

Permalink
Merge pull request #4044 from Vogel612/windows-forms-purge
Browse files Browse the repository at this point in the history
Follow Up to 4006
  • Loading branch information
Vogel612 committed Jun 21, 2018
2 parents 38be737 + 114589e commit bcd87f2
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 35 deletions.
2 changes: 1 addition & 1 deletion Rubberduck.Core/App.cs
Expand Up @@ -153,7 +153,7 @@ private void ApplyCultureConfig()
{
Logger.Error(exception, "Error Setting Culture for Rubberduck");
// not accessing resources here, because setting resource culture literally just failed.
_messageBox.NotifyError(exception.Message, "Rubberduck");
_messageBox.NotifyWarn(exception.Message, "Rubberduck");
_config.UserSettings.GeneralSettings.Language.Code = currentCulture.Name;
_configService.SaveConfiguration(_config);
}
Expand Down
6 changes: 3 additions & 3 deletions Rubberduck.Core/UI/CodeExplorer/Commands/RemoveCommand.cs
Expand Up @@ -57,14 +57,14 @@ protected override bool EvaluateCanExecute(object parameter)
protected override void OnExecute(object parameter)
{
var message = string.Format(CodeExplorerUI.ExportBeforeRemove_Prompt, ((CodeExplorerComponentViewModel)parameter).Name);
var result = _messageBox.Confirm(message, CodeExplorerUI.ExportBeforeRemove_Caption, true);
var result = _messageBox.Confirm(message, CodeExplorerUI.ExportBeforeRemove_Caption, ConfirmationOutcome.Yes);

if (!result.HasValue)
if (result == ConfirmationOutcome.Cancel)
{
return;
}

if (result.Value && !ExportFile((CodeExplorerComponentViewModel)parameter))
if (result == ConfirmationOutcome.Yes && !ExportFile((CodeExplorerComponentViewModel)parameter))
{
return;
}
Expand Down
74 changes: 59 additions & 15 deletions Rubberduck.Interaction/IMessageBox.cs
Expand Up @@ -5,13 +5,49 @@ namespace Rubberduck.Interaction
{
public interface IMessageBox
{
/// <summary>
/// Show a message to the user. Will only return after the user has acknowledged the message.
/// </summary>
/// <param name="text">The message to show to the user</param>
void Message(string text);
void NotifyError(string text, string caption);
/// <summary>
/// Notify the user of a warning. Will only return after the user has acknowledged the warning.
/// </summary>
/// <param name="text">The Warning text to show the user</param>
/// <param name="caption">The caption of the dialog window</param>
void NotifyWarn(string text, string caption);
/// <summary>
/// Ask the user a question. Neither user selection must have any non-reversible consequences.
/// Will only return on user-input.
/// </summary>
/// <param name="text">The Question to ask the user</param>
/// <param name="caption">The caption of the dialog window</param>
/// <returns>true, if the user selects "Yes", false if the user selects "No"</returns>
bool Question(string text, string caption);
bool ConfirmYesNo(string text, string caption);
bool ConfirmYesNo(string text, string caption, bool suggestion);
bool? Confirm(string text, string caption, bool? suggestion);
/// <summary>
/// Ask the user for a simple confirmation. If the user selects an option, non-reversible consequences are acceptable.
/// Will only return on user-input.
/// </summary>
/// <param name="text">The question to ask the user</param>
/// <param name="caption">The caption of the dialog window</param>
/// <param name="suggestion">The pre-selected result for the user, defaults to <b>Yes</b></param>
/// <returns>true, if the user selects "Yes", false if the user selects "No"</returns>
bool ConfirmYesNo(string text, string caption, bool suggestion = true);
/// <summary>
/// Ask the user for a confirmation. If the user selects an option that is not "Cancel",
/// non-reversible consequences are acceptable.
/// Will only return on user-input.
/// </summary>
/// <param name="text">The question to ask the user</param>
/// <param name="caption">The caption of the dialog window</param>
/// <param name="suggestion">The pre-selected result for the user, defaults to <b>Cancel</b></param>
/// <returns>Yes, No or Cancel respectively, according to the user's input</returns>
ConfirmationOutcome Confirm(string text, string caption, ConfirmationOutcome suggestion = ConfirmationOutcome.Cancel);
}

public enum ConfirmationOutcome
{
Yes, No, Cancel
}

public class MessageBox : IMessageBox
Expand All @@ -21,11 +57,6 @@ public void Message(string text)
Forms.MessageBox.Show(text);
}

public void NotifyError(string text, string caption)
{
Forms.MessageBox.Show(text, caption, Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Error);
}

public void NotifyWarn(string text, string caption)
{
Forms.MessageBox.Show(text, caption, Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Exclamation);
Expand All @@ -46,22 +77,35 @@ public bool ConfirmYesNo(string text, string caption, bool suggestion)
return Forms.MessageBox.Show(text, caption, Forms.MessageBoxButtons.YesNo, Forms.MessageBoxIcon.Exclamation, suggestion ? Forms.MessageBoxDefaultButton.Button1 : Forms.MessageBoxDefaultButton.Button2) == Forms.DialogResult.Yes;
}

public bool? Confirm(string text, string caption, bool? suggestion)
public ConfirmationOutcome Confirm(string text, string caption, ConfirmationOutcome suggestion = ConfirmationOutcome.Yes)
{
var suggestionButton = suggestion.HasValue ? (suggestion.Value ? Forms.MessageBoxDefaultButton.Button1 : Forms.MessageBoxDefaultButton.Button2) : Forms.MessageBoxDefaultButton.Button3;
Forms.MessageBoxDefaultButton suggestionButton;
switch (suggestion)
{
// default required to shut the compiler up about "unassigned variable"
default:
case ConfirmationOutcome.Yes:
suggestionButton = Forms.MessageBoxDefaultButton.Button1;
break;
case ConfirmationOutcome.No:
suggestionButton = Forms.MessageBoxDefaultButton.Button2;
break;
case ConfirmationOutcome.Cancel:
suggestionButton = Forms.MessageBoxDefaultButton.Button3;
break;
}
var result = Forms.MessageBox.Show(text, caption, Forms.MessageBoxButtons.YesNoCancel, Forms.MessageBoxIcon.Exclamation, suggestionButton);

switch (result)
{
case Forms.DialogResult.Cancel:
return null;
return ConfirmationOutcome.Cancel;
case Forms.DialogResult.Yes:
return true;
return ConfirmationOutcome.Yes;
case Forms.DialogResult.No:
return false;
return ConfirmationOutcome.No;
default:
return suggestion;

}
}
}
Expand Down
6 changes: 3 additions & 3 deletions RubberduckTests/CodeExplorer/CodeExplorerTests.cs
Expand Up @@ -773,7 +773,7 @@ public void RemoveCommand_RemovesModuleWhenPromptOk()
saveFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.OK);

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool?>())).Returns(true);
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ConfirmationOutcome>())).Returns(ConfirmationOutcome.Yes);

var projectRepository = new ProjectsRepository(vbe.Object);
using (var state = new RubberduckParserState(vbe.Object, projectRepository, new DeclarationFinderFactory(), vbeEvents.Object))
Expand Down Expand Up @@ -859,7 +859,7 @@ public void RemoveCommand_GivenMsgBoxNO_RemovesModuleNoExport()
saveFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.OK);

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool?>())).Returns(false);
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ConfirmationOutcome>())).Returns(ConfirmationOutcome.No);

var projectRepository = new ProjectsRepository(vbe.Object);
using (var state = new RubberduckParserState(vbe.Object, projectRepository, new DeclarationFinderFactory(), vbeEvents.Object))
Expand Down Expand Up @@ -902,7 +902,7 @@ public void RemoveModule_Cancel()
saveFileDialog.Setup(o => o.OverwritePrompt);

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns((bool?)null);
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ConfirmationOutcome>())).Returns(ConfirmationOutcome.Cancel);

var projectRepository = new ProjectsRepository(vbe.Object);
using (var state = new RubberduckParserState(vbe.Object, projectRepository, new DeclarationFinderFactory(), vbeEvents.Object))
Expand Down
2 changes: 1 addition & 1 deletion RubberduckTests/Refactoring/IntroduceParameterTests.cs
Expand Up @@ -630,7 +630,7 @@ Sub IClass1_fizz(ByVal boo As Boolean)
{

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(false);
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(false);

var refactoring = new IntroduceParameterRefactoring(vbe.Object, state, messageBox.Object);

Expand Down
4 changes: 2 additions & 2 deletions RubberduckTests/Refactoring/RemoveParametersTests.cs
Expand Up @@ -1864,7 +1864,7 @@ public void RemoveParametersRefactoring_LastInterfaceParamsRemoved_AcceptPrompt(
var module2 = project.Object.VBComponents[1].CodeModule;

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(true);

//Specify Params to remove
var model = new RemoveParametersModel(state, qualifiedSelection, messageBox.Object);
Expand Down Expand Up @@ -1910,7 +1910,7 @@ public void RemoveParametersRefactoring_LastInterfaceParamRemoved_RejectPrompt()
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(project.Object.VBComponents[0]), selection);

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(false);
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(false);

//Specify Params to remove
var model = new RemoveParametersModel(state, qualifiedSelection, messageBox.Object);
Expand Down
16 changes: 8 additions & 8 deletions RubberduckTests/Refactoring/RenameTests.cs
Expand Up @@ -1232,7 +1232,7 @@ End Sub
};
PerformExpectedVersusActualRenameTests(tdo, inputOutput1, inputOutputWithSelection, inputOutput3);

tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Once);
}

[Test]
Expand Down Expand Up @@ -1310,7 +1310,7 @@ c1.Nothing 7
};
PerformExpectedVersusActualRenameTests(tdo, inputOutput1, inputOutputWithSelection, inputOutput3);

tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Once);
}

[Test]
Expand Down Expand Up @@ -1494,7 +1494,7 @@ public void RenameRefactoring_RenameInterface_AcceptPrompt()
};
PerformExpectedVersusActualRenameTests(tdo, inputOutput1, inputOutput2);

tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Once);
}

[Test]
Expand Down Expand Up @@ -1524,7 +1524,7 @@ public void RenameRefactoring_RenameInterface_RejectPrompt()
tdo.MsgBoxReturn = DialogResult.No;
PerformExpectedVersusActualRenameTests(tdo, inputOutput1, inputOutput2);

tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
tdo.MsgBox.Verify(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>()), Times.Once);
}

#endregion
Expand Down Expand Up @@ -1634,7 +1634,7 @@ public void RenameRefactoring_RenameCodeModule()
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);

var msgbox = new Mock<IMessageBox>();
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(true);

var vbeWrapper = vbe.Object;
var model = new RenameModel(vbeWrapper, state, qualifiedSelection) { NewName = newName };
Expand Down Expand Up @@ -1671,7 +1671,7 @@ public void RenameRefactoring_RenameProject()
{

var msgbox = new Mock<IMessageBox>();
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(true);

var vbeWrapper = vbe.Object;
var model = new RenameModel(vbeWrapper, state, default(QualifiedSelection)) { NewName = newName };
Expand Down Expand Up @@ -2280,7 +2280,7 @@ public void RenameRefactoring_RenameClassModule_DoesNotChangeMeReferences()
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);

var msgbox = new Mock<IMessageBox>();
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
msgbox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(true);

var vbeWrapper = vbe.Object;
var model = new RenameModel(vbeWrapper, state, qualifiedSelection) { NewName = newName };
Expand Down Expand Up @@ -2363,7 +2363,7 @@ public void RenameRefactoring_RenameClassModule_DoesNotChangeMeReferences()

tdo.MsgBox = new Mock<IMessageBox>();
// FIXME this might be a bit broken now
tdo.MsgBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(tdo.MsgBoxReturn == DialogResult.Yes);
tdo.MsgBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(tdo.MsgBoxReturn == DialogResult.Yes);

tdo.VBE = tdo.VBE ?? BuildProject(tdo.ProjectName, tdo.ModuleTestSetupDefs);
tdo.ParserState = MockParser.CreateAndParse(tdo.VBE, testLibraries: testLibraries);
Expand Down
4 changes: 2 additions & 2 deletions RubberduckTests/Refactoring/ReorderParametersTests.cs
Expand Up @@ -1391,7 +1391,7 @@ public void ReorderParametersRefactoring_InterfaceParamsSwapped_AcceptPrompt()
var module2 = project.Object.VBComponents[1].CodeModule;

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
messageBox.Setup(m => m.ConfirmYesNo(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool>())).Returns(true);

//Specify Params to remove
var model = new ReorderParametersModel(state, qualifiedSelection, messageBox.Object);
Expand Down Expand Up @@ -1438,7 +1438,7 @@ public void ReorderParametersRefactoring_ParamsSwapped_RejectPrompt()
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(project.Object.VBComponents[0]), selection);

var messageBox = new Mock<IMessageBox>();
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<bool?>())).Returns(false);
messageBox.Setup(m => m.Confirm(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<ConfirmationOutcome>())).Returns(ConfirmationOutcome.No);

//Specify Params to remove
var model = new ReorderParametersModel(state, qualifiedSelection, messageBox.Object);
Expand Down

0 comments on commit bcd87f2

Please sign in to comment.