@@ -11,10 +11,12 @@ namespace Rubberduck.UI.CodeExplorer.Commands
11
11
[ CodeExplorerCommand ]
12
12
public class ImportCommand : CommandBase , IDisposable
13
13
{
14
+ private readonly VBE _vbe ;
14
15
private readonly IOpenFileDialog _openFileDialog ;
15
16
16
- public ImportCommand ( IOpenFileDialog openFileDialog ) : base ( LogManager . GetCurrentClassLogger ( ) )
17
+ public ImportCommand ( VBE vbe , IOpenFileDialog openFileDialog ) : base ( LogManager . GetCurrentClassLogger ( ) )
17
18
{
19
+ _vbe = vbe ;
18
20
_openFileDialog = openFileDialog ;
19
21
20
22
_openFileDialog . AddExtension = true ;
@@ -26,23 +28,24 @@ public ImportCommand(IOpenFileDialog openFileDialog) : base(LogManager.GetCurren
26
28
_openFileDialog . CheckFileExists = true ;
27
29
}
28
30
29
- protected override void ExecuteImpl ( object parameter )
31
+ protected override bool CanExecuteImpl ( object parameter )
30
32
{
31
- VBProject project ;
33
+ return parameter != null || _vbe . VBProjects . Count == 1 || _vbe . ActiveVBProject != null ;
34
+ }
32
35
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 )
38
40
{
39
- var node = ( ( CodeExplorerItemViewModel ) parameter ) . Parent ;
40
- while ( ! ( node is ICodeExplorerDeclarationViewModel ) )
41
+ if ( _vbe . VBProjects . Count == 1 )
41
42
{
42
- node = node . Parent ;
43
+ project = _vbe . VBProjects . Item ( 1 ) ;
44
+ }
45
+ else if ( _vbe . ActiveVBProject != null )
46
+ {
47
+ project = _vbe . ActiveVBProject ;
43
48
}
44
-
45
- project = ( ( ICodeExplorerDeclarationViewModel ) node ) . Declaration . QualifiedName . QualifiedModuleName . Project ;
46
49
}
47
50
48
51
if ( _openFileDialog . ShowDialog ( ) == DialogResult . OK )
@@ -60,6 +63,22 @@ protected override void ExecuteImpl(object parameter)
60
63
}
61
64
}
62
65
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
+
63
82
public void Dispose ( )
64
83
{
65
84
if ( _openFileDialog != null )
0 commit comments