diff --git a/Rubberduck.Core/UI/CodeExplorer/Commands/ImportCommand.cs b/Rubberduck.Core/UI/CodeExplorer/Commands/ImportCommand.cs index df2af27c10..4fae3d032c 100644 --- a/Rubberduck.Core/UI/CodeExplorer/Commands/ImportCommand.cs +++ b/Rubberduck.Core/UI/CodeExplorer/Commands/ImportCommand.cs @@ -146,6 +146,7 @@ private IVBProject TargetProjectFromVbe() return dict; } + private int _cachedFilterIndex = 1; protected virtual ICollection FilesToImport(object parameter) { using (var dialog = _dialogFactory.CreateOpenFileDialog()) @@ -157,8 +158,14 @@ protected virtual ICollection FilesToImport(object parameter) dialog.Multiselect = true; dialog.ShowHelp = false; dialog.Title = DialogsTitle; + dialog.FilterIndex = _cachedFilterIndex; dialog.Filter = $"{RubberduckUI.ImportCommand_OpenDialog_Filter_VBFiles} ({FilterExtension})|{FilterExtension}|" + + $"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_NonDocumentModules} ({AllNonDocumentModulesExtension})|{AllNonDocumentModulesExtension}|" + + $"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_StandardModules} ({StandardModuleExtension})|{StandardModuleExtension}|" + + $"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_ClassModules} ({ClassModuleExtension})|{ClassModuleExtension}|" + + $"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_FormModules} ({FormModuleExtension})|{FormModuleExtension}|" + + $"{Resources.CodeExplorer.CodeExplorerUI.ImportCommand_OpenDialog_Filter_DocumentModules} ({DocumentModuleExtension})|{DocumentModuleExtension}|" + $"{RubberduckUI.ImportCommand_OpenDialog_Filter_AllFiles}, (*.*)|*.*"; if (dialog.ShowDialog() != DialogResult.OK) @@ -166,6 +173,8 @@ protected virtual ICollection FilesToImport(object parameter) return new List(); } + _cachedFilterIndex = dialog.FilterIndex; + var fileNames = dialog.FileNames; var fileExtensions = fileNames.Select(Path.GetExtension); if (fileExtensions.Any(fileExt => !ImportableExtensions.Contains(fileExt))) @@ -562,6 +571,18 @@ protected override void OnExecute(object parameter) private string FilterExtension => string.Join("; ", ImportableExtensions.Select(ext => $"*{ext}")); + private string AllNonDocumentModulesExtension => string.Join("; ", + ImportableExtensions.Where(ext => !ext.EndsWith("doccls")) + .Select(ext => $"*{ext}")); + + private string StandardModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("bas")).First(); + + private string ClassModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith(".cls")).First(); + + private string FormModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("frm")).First(); + + private string DocumentModuleExtension => "*" + ImportableExtensions.Where(ext => ext.EndsWith("doccls")).First(); + protected IDictionary> ComponentTypesForExtension { get; } } } \ No newline at end of file diff --git a/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.Designer.cs b/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.Designer.cs index 1f58086ca7..b646e3a135 100644 --- a/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.Designer.cs +++ b/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.Designer.cs @@ -788,6 +788,51 @@ public class CodeExplorerUI { } } + /// + /// Looks up a localized string similar to Class modules. + /// + public static string ImportCommand_OpenDialog_Filter_ClassModules { + get { + return ResourceManager.GetString("ImportCommand_OpenDialog_Filter_ClassModules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Document modules. + /// + public static string ImportCommand_OpenDialog_Filter_DocumentModules { + get { + return ResourceManager.GetString("ImportCommand_OpenDialog_Filter_DocumentModules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Form modules. + /// + public static string ImportCommand_OpenDialog_Filter_FormModules { + get { + return ResourceManager.GetString("ImportCommand_OpenDialog_Filter_FormModules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Non-document modules. + /// + public static string ImportCommand_OpenDialog_Filter_NonDocumentModules { + get { + return ResourceManager.GetString("ImportCommand_OpenDialog_Filter_NonDocumentModules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Standard modules. + /// + public static string ImportCommand_OpenDialog_Filter_StandardModules { + get { + return ResourceManager.GetString("ImportCommand_OpenDialog_Filter_StandardModules", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.resx b/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.resx index c6337af7be..28935557cc 100644 --- a/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.resx +++ b/Rubberduck.Resources/CodeExplorer/CodeExplorerUI.resx @@ -461,4 +461,19 @@ Continue? Annotate + + Class modules + + + Document modules + + + Form modules + + + Non-document modules + + + Standard modules + \ No newline at end of file diff --git a/Rubberduck.Resources/Rubberduck.Resources.csproj b/Rubberduck.Resources/Rubberduck.Resources.csproj index 1d1ae891d0..215a912a20 100644 --- a/Rubberduck.Resources/Rubberduck.Resources.csproj +++ b/Rubberduck.Resources/Rubberduck.Resources.csproj @@ -27,6 +27,9 @@ + + True + True