Skip to content

Commit 44f4bad

Browse files
Hosch250retailcoder
authored andcommitted
Fix NRE and add icons to CE (#1500)
* Fix NRE and add icons to CE * Allow importing multiple modules
1 parent 8e38ea7 commit 44f4bad

File tree

6 files changed

+74
-10
lines changed

6 files changed

+74
-10
lines changed
715 Bytes
Loading

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,6 +1249,7 @@
12491249
<None Include="Resources\Microsoft\Mask\PromoteLocal_6784_32.bmp" />
12501250
<Content Include="Resources\Microsoft\Mask\ReorderParameters_6780_32.bmp" />
12511251
<Content Include="Resources\Microsoft\Mask\TestManager_8590_32.bmp" />
1252+
<Resource Include="Resources\printer.png" />
12521253
<Content Include="Resources\Rubberduck\RD-AboutWindow.png" />
12531254
<Content Include="Resources\Rubberduck\RD-InstallBanner.bmp" />
12541255
<Content Include="Resources\Rubberduck\RD-InstallWindow.bmp" />

RetailCoder.VBE/UI/CodeExplorer/CodeExplorerControl.xaml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
mc:Ignorable="d"
1515
d:DesignHeight="300" d:DesignWidth="300" d:DataContext="{d:DesignInstance codeExplorer:CodeExplorerViewModel}">
1616
<UserControl.Resources>
17+
<BitmapImage x:Key="RefreshImage" UriSource="../../Resources/arrow-circle-double.png" />
18+
<BitmapImage x:Key="UndoImage" UriSource="../../Resources/arrow-circle-left.png" />
19+
<BitmapImage x:Key="PrintImage" UriSource="../../Resources/printer.png" />
20+
1721
<BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
1822
<converters:BoolToHiddenVisibilityConverter x:Key="BoolToHiddenVisibility" />
1923
<converters:InvertBoolValueConverter x:Key="InvertBoolValue" />
@@ -351,7 +355,11 @@
351355
<ContextMenu DataContext="{Binding DataContext, Source={x:Reference CodeExplorer}}">
352356
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=CodeExplorer_RefreshComponent}"
353357
Command="{Binding RefreshComponentCommand}"
354-
CommandParameter="{Binding SelectedItem}" />
358+
CommandParameter="{Binding SelectedItem}">
359+
<MenuItem.Icon>
360+
<Image Source="{StaticResource RefreshImage}" />
361+
</MenuItem.Icon>
362+
</MenuItem>
355363
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=Navigate}"
356364
FontWeight="Bold"
357365
Command="{Binding NavigateCommand}"
@@ -400,14 +408,22 @@
400408
<Separator />
401409
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=CodeExplorer_Print}"
402410
Command="{Binding PrintCommand}"
403-
CommandParameter="{Binding SelectedItem}" />
411+
CommandParameter="{Binding SelectedItem}">
412+
<MenuItem.Icon>
413+
<Image Source="{StaticResource PrintImage}" />
414+
</MenuItem.Icon>
415+
</MenuItem>
404416
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=SourceControlPanel_Caption}">
405417
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=CodeExplorer_Commit}"
406418
Command="{Binding CommitCommand}"
407419
CommandParameter="{Binding SelectedItem}" />
408420
<MenuItem Header="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=CodeExplorer_Undo}"
409421
Command="{Binding UndoCommand}"
410-
CommandParameter="{Binding SelectedItem}" />
422+
CommandParameter="{Binding SelectedItem}">
423+
<MenuItem.Icon>
424+
<Image Source="{StaticResource UndoImage}" />
425+
</MenuItem.Icon>
426+
</MenuItem>
411427
</MenuItem>
412428
</ContextMenu>
413429
</Setter.Value>

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public CodeExplorer_ImportCommand(IOpenFileDialog openFileDialog)
1717
_openFileDialog.AddExtension = true;
1818
_openFileDialog.AutoUpgradeEnabled = true;
1919
_openFileDialog.CheckFileExists = true;
20-
_openFileDialog.Multiselect = false;
20+
_openFileDialog.Multiselect = true;
2121
_openFileDialog.ShowHelp = false; // we don't want 1996's file picker.
2222
_openFileDialog.Filter = @"VB Files|*.cls;*.bas;*.frm";
2323
_openFileDialog.CheckFileExists = true;
@@ -37,13 +37,16 @@ public override void Execute(object parameter)
3737

3838
if (_openFileDialog.ShowDialog() == DialogResult.OK)
3939
{
40-
var fileExt = _openFileDialog.FileName.Split('.').Last();
41-
if (!new[]{"bas", "cls", "frm"}.Contains(fileExt))
40+
var fileExts = _openFileDialog.FileNames.Select(s => s.Split('.').Last());
41+
if (fileExts.Any(fileExt => !new[] {"bas", "cls", "frm"}.Contains(fileExt)))
4242
{
4343
return;
4444
}
4545

46-
project.VBComponents.Import(_openFileDialog.FileName);
46+
foreach (var filename in _openFileDialog.FileNames)
47+
{
48+
project.VBComponents.Import(filename);
49+
}
4750
}
4851
}
4952

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public override bool CanExecute(object parameter)
4242
panelVM.SetTab(SourceControlTab.Changes);
4343
var changesVM = panelVM.SelectedItem.ViewModel as ChangesViewViewModel;
4444

45-
return changesVM != null && changesVM.IncludedChanges.Select(s => s.FilePath).Contains(GetFileName(node));
45+
return changesVM != null && changesVM.IncludedChanges != null &&
46+
changesVM.IncludedChanges.Select(s => s.FilePath).Contains(GetFileName(node));
4647
}
4748

4849
public override void Execute(object parameter)

RubberduckTests/CodeExplorer/CodeExplorerTests.cs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public void ImportModule()
162162
openFileDialog.Setup(o => o.ShowHelp);
163163
openFileDialog.Setup(o => o.Filter);
164164
openFileDialog.Setup(o => o.CheckFileExists);
165-
openFileDialog.Setup(o => o.FileName).Returns("C:\\Users\\Rubberduck\\Desktop\\StdModule1.bas");
165+
openFileDialog.Setup(o => o.FileNames).Returns(new[] {"C:\\Users\\Rubberduck\\Desktop\\StdModule1.bas"});
166166
openFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.OK);
167167

168168
var state = new RubberduckParserState();
@@ -177,10 +177,53 @@ public void ImportModule()
177177
parser.Parse();
178178
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
179179

180-
vm.SelectedItem = vm.Projects.First().Items.First().Items.First();
180+
vm.SelectedItem = vm.Projects.First();
181+
vm.ImportCommand.Execute(vm.SelectedItem);
182+
183+
vbComponents.Verify(c => c.Import("C:\\Users\\Rubberduck\\Desktop\\StdModule1.bas"), Times.Once);
184+
}
185+
186+
[TestMethod]
187+
public void ImportMultipleModules()
188+
{
189+
var builder = new MockVbeBuilder();
190+
var project = builder.ProjectBuilder("TestProject1", vbext_ProjectProtection.vbext_pp_none)
191+
.AddComponent("Module1", vbext_ComponentType.vbext_ct_StdModule, "");
192+
193+
var vbComponents = project.MockVBComponents;
194+
195+
var vbe = builder.AddProject(project.Build()).Build();
196+
var mockHost = new Mock<IHostApplication>();
197+
mockHost.SetupAllProperties();
198+
199+
var openFileDialog = new Mock<IOpenFileDialog>();
200+
openFileDialog.Setup(o => o.AddExtension);
201+
openFileDialog.Setup(o => o.AutoUpgradeEnabled);
202+
openFileDialog.Setup(o => o.CheckFileExists);
203+
openFileDialog.Setup(o => o.Multiselect);
204+
openFileDialog.Setup(o => o.ShowHelp);
205+
openFileDialog.Setup(o => o.Filter);
206+
openFileDialog.Setup(o => o.CheckFileExists);
207+
openFileDialog.Setup(o => o.FileNames).Returns(new[] { "C:\\Users\\Rubberduck\\Desktop\\StdModule1.bas", "C:\\Users\\Rubberduck\\Desktop\\ClsModule1.cls" });
208+
openFileDialog.Setup(o => o.ShowDialog()).Returns(DialogResult.OK);
209+
210+
var state = new RubberduckParserState();
211+
var commands = new List<ICommand>
212+
{
213+
new CodeExplorer_ImportCommand(openFileDialog.Object)
214+
};
215+
216+
var vm = new CodeExplorerViewModel(new FolderHelper(state, GetDelimiterConfigLoader()), state, commands);
217+
218+
var parser = MockParser.Create(vbe.Object, state);
219+
parser.Parse();
220+
if (parser.State.Status >= ParserState.Error) { Assert.Inconclusive("Parser Error"); }
221+
222+
vm.SelectedItem = vm.Projects.First();
181223
vm.ImportCommand.Execute(vm.SelectedItem);
182224

183225
vbComponents.Verify(c => c.Import("C:\\Users\\Rubberduck\\Desktop\\StdModule1.bas"), Times.Once);
226+
vbComponents.Verify(c => c.Import("C:\\Users\\Rubberduck\\Desktop\\ClsModule1.cls"), Times.Once);
184227
}
185228

186229
[TestMethod]

0 commit comments

Comments
 (0)