Browse Source

Simplify code using FileFilter

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6299 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 15 years ago
parent
commit
c96e64b46f
  1. 20
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  2. 10
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs
  3. 25
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  4. 33
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs

20
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -168,10 +168,10 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -168,10 +168,10 @@ namespace ICSharpCode.SharpDevelop.Commands
fdiag.OverwritePrompt = true;
fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(null)).ToArray(typeof(string));
fdiag.Filter = String.Join("|", fileFilters);
for (int i = 0; i < fileFilters.Length; ++i) {
if (fileFilters[i].IndexOf(Path.GetExtension(file.FileName)) >= 0) {
var fileFilters = ProjectService.GetFileFilters();
fdiag.Filter = String.Join("|", fileFilters);
for (int i = 0; i < fileFilters.Count; ++i) {
if (fileFilters[i].ContainsExtension(Path.GetExtension(file.FileName))) {
fdiag.FilterIndex = i + 1;
break;
}
@ -220,9 +220,9 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -220,9 +220,9 @@ namespace ICSharpCode.SharpDevelop.Commands
using (OpenFileDialog fdiag = new OpenFileDialog()) {
fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string));
fdiag.Filter = String.Join("|", fileFilters);
bool foundFilter = false;
var fileFilters = ProjectService.GetFileFilters();
fdiag.Filter = String.Join("|", fileFilters);
bool foundFilter = false;
// search filter like in the current open file
if (!foundFilter) {
@ -230,8 +230,8 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -230,8 +230,8 @@ namespace ICSharpCode.SharpDevelop.Commands
if (content != null) {
string extension = Path.GetExtension(content.PrimaryFileName);
if (string.IsNullOrEmpty(extension) == false) {
for (int i = 0; i < fileFilters.Length; ++i) {
if (fileFilters[i].IndexOf(extension) >= 0) {
for (int i = 0; i < fileFilters.Count; ++i) {
if (fileFilters[i].ContainsExtension(extension)) {
fdiag.FilterIndex = i + 1;
foundFilter = true;
break;
@ -242,7 +242,7 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -242,7 +242,7 @@ namespace ICSharpCode.SharpDevelop.Commands
}
if (!foundFilter) {
fdiag.FilterIndex = fileFilters.Length;
fdiag.FilterIndex = fileFilters.Count;
}
fdiag.Multiselect = true;

10
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/FolderNodeCommands.cs

@ -45,14 +45,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -45,14 +45,14 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
int GetFileFilterIndex(IProject project, string[] fileFilters)
int GetFileFilterIndex(IProject project, IList<FileFilterDescriptor> fileFilters)
{
if (project != null) {
ProjectBindingDescriptor projectCodon = ProjectBindingService.GetCodonPerLanguageName(project.Language);
if (projectCodon != null) {
for (int i = 0; i < fileFilters.Length; ++i) {
for (int i = 0; i < fileFilters.Count; ++i) {
for (int j = 0; j < projectCodon.CodeFileExtensions.Length; ++j) {
if (fileFilters[i].ToUpperInvariant().IndexOf(projectCodon.CodeFileExtensions[j].ToUpperInvariant()) >= 0) {
if (fileFilters[i].ContainsExtension(projectCodon.CodeFileExtensions[j])) {
return i + 1;
}
}
@ -179,8 +179,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -179,8 +179,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
List<FileProjectItem> addedItems = new List<FileProjectItem>();
using (OpenFileDialog fdiag = new OpenFileDialog()) {
fdiag.AddExtension = true;
string[] fileFilters = (string[])(AddInTree.GetTreeNode("/SharpDevelop/Workbench/FileFilter").BuildChildItems(this)).ToArray(typeof(string));
fdiag.AddExtension = true;
var fileFilters = ProjectService.GetFileFilters();
fdiag.InitialDirectory = node.Directory;
fdiag.FilterIndex = GetFileFilterIndex(node.Project, fileFilters);

25
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
@ -429,18 +430,26 @@ namespace ICSharpCode.SharpDevelop.Project @@ -429,18 +430,26 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
/// <summary>
/// Gets the list of file filters.
/// </summary>
public static IList<FileFilterDescriptor> GetFileFilters()
{
return AddInTree.BuildItems<FileFilterDescriptor>("/SharpDevelop/Workbench/FileFilter", null);
}
/// <summary>
/// Returns a File Dialog filter that can be used to filter on all registered project formats
/// </summary>
public static string GetAllProjectsFilter(object caller, bool includeSolutions)
{
AddInTreeNode addinTreeNode = AddInTree.GetTreeNode("/SharpDevelop/Workbench/Combine/FileFilter");
var filters = AddInTree.BuildItems<FileFilterDescriptor>("/SharpDevelop/Workbench/Combine/FileFilter", null);
if (!includeSolutions)
filters.RemoveAll(f => f.ContainsExtension(".sln"));
StringBuilder b = new StringBuilder(StringParser.Parse("${res:SharpDevelop.Solution.AllKnownProjectFormats}|"));
bool first = true;
foreach (Codon c in addinTreeNode.Codons) {
string ext = c.Properties.Get("extensions", "");
if (!includeSolutions && ext == "*.sln")
continue;
foreach (var filter in filters) {
string ext = filter.Extensions;
if (ext != "*.*" && ext.Length > 0) {
if (!first) {
b.Append(';');
@ -450,11 +459,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -450,11 +459,9 @@ namespace ICSharpCode.SharpDevelop.Project
b.Append(ext);
}
}
foreach (string entry in addinTreeNode.BuildChildItems(caller)) {
if (!includeSolutions && entry.EndsWith("*.sln"))
continue;
foreach (var filter in filters) {
b.Append('|');
b.Append(entry);
b.Append(filter.ToString());
}
return b.ToString();
}

33
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/FileFilterDoozer.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.Core @@ -21,7 +21,7 @@ namespace ICSharpCode.Core
/// </attribute>
/// <usage>Only in /SharpDevelop/Workbench/FileFilter</usage>
/// <returns>
/// String in the format "name|extensions".
/// <see cref="FileFilterDescriptor"/> in the format "name|extensions".
/// </returns>
public class FileFilterDoozer : IDoozer
{
@ -37,7 +37,36 @@ namespace ICSharpCode.Core @@ -37,7 +37,36 @@ namespace ICSharpCode.Core
public object BuildItem(object caller, Codon codon, ArrayList subItems)
{
return StringParser.Parse(codon.Properties["name"]) + "|" + codon.Properties["extensions"];
return new FileFilterDescriptor {
Name = StringParser.Parse(codon.Properties["name"]),
Extensions = codon.Properties["extensions"]
};
}
}
public sealed class FileFilterDescriptor
{
public string Name { get; set; }
public string Extensions { get; set; }
/// <summary>
/// Gets whether this descriptor matches the specified file extension.
/// </summary>
/// <param name="extension">File extension starting with '.'</param>
public bool ContainsExtension(string extension)
{
if (string.IsNullOrEmpty(extension))
return false;
int index = this.Extensions.IndexOf("*" + extension, StringComparison.OrdinalIgnoreCase);
if (index < 0 || index + extension.Length < this.Extensions.Length)
return false;
return index + extension.Length < this.Extensions.Length
|| this.Extensions[index + extension.Length] == ';';
}
public override string ToString()
{
return Name + "|" + Extensions;
}
}
}

Loading…
Cancel
Save