Skip to content

Commit

Permalink
Merge branch 'next' into inspectionBugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Hosch250 committed Jul 13, 2016
2 parents 4eab52d + 7b0a9b8 commit 196d5e7
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 17 deletions.
45 changes: 32 additions & 13 deletions RetailCoder.VBE/UI/CodeExplorer/Commands/ImportCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ namespace Rubberduck.UI.CodeExplorer.Commands
[CodeExplorerCommand]
public class ImportCommand : CommandBase, IDisposable
{
private readonly VBE _vbe;
private readonly IOpenFileDialog _openFileDialog;

public ImportCommand(IOpenFileDialog openFileDialog) : base(LogManager.GetCurrentClassLogger())
public ImportCommand(VBE vbe, IOpenFileDialog openFileDialog) : base(LogManager.GetCurrentClassLogger())
{
_vbe = vbe;
_openFileDialog = openFileDialog;

_openFileDialog.AddExtension = true;
Expand All @@ -26,23 +28,24 @@ public ImportCommand(IOpenFileDialog openFileDialog) : base(LogManager.GetCurren
_openFileDialog.CheckFileExists = true;
}

protected override void ExecuteImpl(object parameter)
protected override bool CanExecuteImpl(object parameter)
{
VBProject project;
return parameter != null || _vbe.VBProjects.Count == 1 || _vbe.ActiveVBProject != null;
}

if (parameter is ICodeExplorerDeclarationViewModel)
{
project = ((ICodeExplorerDeclarationViewModel) parameter).Declaration.QualifiedName.QualifiedModuleName.Project;
}
else
protected override void ExecuteImpl(object parameter)
{
var project = GetNodeProject((CodeExplorerItemViewModel)parameter);
if (project == null)
{
var node = ((CodeExplorerItemViewModel) parameter).Parent;
while (!(node is ICodeExplorerDeclarationViewModel))
if (_vbe.VBProjects.Count == 1)
{
node = node.Parent;
project = _vbe.VBProjects.Item(1);
}
else if (_vbe.ActiveVBProject != null)
{
project = _vbe.ActiveVBProject;
}

project = ((ICodeExplorerDeclarationViewModel) node).Declaration.QualifiedName.QualifiedModuleName.Project;
}

if (_openFileDialog.ShowDialog() == DialogResult.OK)
Expand All @@ -60,6 +63,22 @@ protected override void ExecuteImpl(object parameter)
}
}

private VBProject GetNodeProject(CodeExplorerItemViewModel parameter)
{
if (parameter is ICodeExplorerDeclarationViewModel)
{
return parameter.GetSelectedDeclaration().QualifiedName.QualifiedModuleName.Project;
}

var node = parameter.Parent;
while (!(node is ICodeExplorerDeclarationViewModel))
{
node = node.Parent;
}

return ((ICodeExplorerDeclarationViewModel)node).Declaration.QualifiedName.QualifiedModuleName.Project;
}

public void Dispose()
{
if (_openFileDialog != null)
Expand Down
7 changes: 3 additions & 4 deletions RubberduckTests/CodeExplorer/CodeExplorerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using System.Windows.Input;
using Microsoft.Vbe.Interop;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
Expand Down Expand Up @@ -171,7 +170,7 @@ public void ImportModule()
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
var commands = new List<CommandBase>
{
new ImportCommand(openFileDialog.Object)
new ImportCommand(vbe.Object, openFileDialog.Object)
};

var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
Expand Down Expand Up @@ -213,7 +212,7 @@ public void ImportMultipleModules()
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
var commands = new List<CommandBase>
{
new ImportCommand(openFileDialog.Object)
new ImportCommand(vbe.Object, openFileDialog.Object)
};

var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
Expand Down Expand Up @@ -256,7 +255,7 @@ public void ImportModule_Cancel()
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
var commands = new List<CommandBase>
{
new ImportCommand(openFileDialog.Object)
new ImportCommand(vbe.Object, openFileDialog.Object)
};

var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
Expand Down

0 comments on commit 196d5e7

Please sign in to comment.