Skip to content

Commit 196d5e7

Browse files
authored
Merge branch 'next' into inspectionBugs
2 parents 4eab52d + 7b0a9b8 commit 196d5e7

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

RetailCoder.VBE/UI/CodeExplorer/Commands/ImportCommand.cs

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ namespace Rubberduck.UI.CodeExplorer.Commands
1111
[CodeExplorerCommand]
1212
public class ImportCommand : CommandBase, IDisposable
1313
{
14+
private readonly VBE _vbe;
1415
private readonly IOpenFileDialog _openFileDialog;
1516

16-
public ImportCommand(IOpenFileDialog openFileDialog) : base(LogManager.GetCurrentClassLogger())
17+
public ImportCommand(VBE vbe, IOpenFileDialog openFileDialog) : base(LogManager.GetCurrentClassLogger())
1718
{
19+
_vbe = vbe;
1820
_openFileDialog = openFileDialog;
1921

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

29-
protected override void ExecuteImpl(object parameter)
31+
protected override bool CanExecuteImpl(object parameter)
3032
{
31-
VBProject project;
33+
return parameter != null || _vbe.VBProjects.Count == 1 || _vbe.ActiveVBProject != null;
34+
}
3235

33-
if (parameter is ICodeExplorerDeclarationViewModel)
34-
{
35-
project = ((ICodeExplorerDeclarationViewModel) parameter).Declaration.QualifiedName.QualifiedModuleName.Project;
36-
}
37-
else
36+
protected override void ExecuteImpl(object parameter)
37+
{
38+
var project = GetNodeProject((CodeExplorerItemViewModel)parameter);
39+
if (project == null)
3840
{
39-
var node = ((CodeExplorerItemViewModel) parameter).Parent;
40-
while (!(node is ICodeExplorerDeclarationViewModel))
41+
if (_vbe.VBProjects.Count == 1)
4142
{
42-
node = node.Parent;
43+
project = _vbe.VBProjects.Item(1);
44+
}
45+
else if (_vbe.ActiveVBProject != null)
46+
{
47+
project = _vbe.ActiveVBProject;
4348
}
44-
45-
project = ((ICodeExplorerDeclarationViewModel) node).Declaration.QualifiedName.QualifiedModuleName.Project;
4649
}
4750

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

66+
private VBProject GetNodeProject(CodeExplorerItemViewModel parameter)
67+
{
68+
if (parameter is ICodeExplorerDeclarationViewModel)
69+
{
70+
return parameter.GetSelectedDeclaration().QualifiedName.QualifiedModuleName.Project;
71+
}
72+
73+
var node = parameter.Parent;
74+
while (!(node is ICodeExplorerDeclarationViewModel))
75+
{
76+
node = node.Parent;
77+
}
78+
79+
return ((ICodeExplorerDeclarationViewModel)node).Declaration.QualifiedName.QualifiedModuleName.Project;
80+
}
81+
6382
public void Dispose()
6483
{
6584
if (_openFileDialog != null)

RubberduckTests/CodeExplorer/CodeExplorerTests.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Linq;
33
using System.Threading;
44
using System.Windows.Forms;
5-
using System.Windows.Input;
65
using Microsoft.Vbe.Interop;
76
using Microsoft.VisualStudio.TestTools.UnitTesting;
87
using Moq;
@@ -171,7 +170,7 @@ public void ImportModule()
171170
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
172171
var commands = new List<CommandBase>
173172
{
174-
new ImportCommand(openFileDialog.Object)
173+
new ImportCommand(vbe.Object, openFileDialog.Object)
175174
};
176175

177176
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -213,7 +212,7 @@ public void ImportMultipleModules()
213212
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
214213
var commands = new List<CommandBase>
215214
{
216-
new ImportCommand(openFileDialog.Object)
215+
new ImportCommand(vbe.Object, openFileDialog.Object)
217216
};
218217

219218
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
@@ -256,7 +255,7 @@ public void ImportModule_Cancel()
256255
var state = new RubberduckParserState(vbe.Object, new Mock<ISinks>().Object);
257256
var commands = new List<CommandBase>
258257
{
259-
new ImportCommand(openFileDialog.Object)
258+
new ImportCommand(vbe.Object, openFileDialog.Object)
260259
};
261260

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

0 commit comments

Comments
 (0)