Skip to content

Commit 53279d4

Browse files
committed
Close #2048
1 parent 4eab52d commit 53279d4

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
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)

0 commit comments

Comments
 (0)