Browse Source

Patch by Scott Ferrett: List of project file extensions to open when the file was specified on the command line was hardcoded to csproj,vbproj,booproj; now it can be extended using the AddIn tree.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1055 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
42dcc8da05
  1. 10
      AddIns/ICSharpCode.SharpDevelop.addin
  2. BIN
      data/resources/StringResources.cz.resources
  3. BIN
      data/resources/StringResources.de.resources
  4. BIN
      data/resources/StringResources.es.resources
  5. BIN
      data/resources/StringResources.fr.resources
  6. BIN
      data/resources/StringResources.hu.resources
  7. BIN
      data/resources/StringResources.it.resources
  8. BIN
      data/resources/StringResources.se.resources
  9. BIN
      data/resources/StringResources.tr.resources
  10. 8
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin
  11. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  12. 8
      src/Main/Base/Project/Src/Commands/AutostartCommands.cs
  13. 7
      src/Main/Base/Project/Src/Gui/Pads/FileScout.cs
  14. 3
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
  15. 38
      src/Main/Base/Project/Src/Services/ProjectService/ProjectLoader.cs
  16. 40
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  17. 68
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
  18. BIN
      src/Main/StartUp/Project/Resources/StringResources.resources

10
AddIns/ICSharpCode.SharpDevelop.addin

@ -109,15 +109,23 @@ @@ -109,15 +109,23 @@
<Path name = "/SharpDevelop/Workbench/Combine/FileFilter">
<FileFilter id = "Solution"
name = "Solutions (*.sln)"
class = "ICSharpCode.SharpDevelop.Project.LoadSolution"
extensions = "*.sln"/>
<FileFilter id = "Combine"
name = "${res:SharpDevelop.FileFilter.CombineFiles}"
class = "ICSharpCode.SharpDevelop.Project.LoadSolution"
extensions = "*.cmbx"/>
<FileFilter id = "Prjx"
name = "${res:SharpDevelop.FileFilter.PrjxFiles}"
class = "ICSharpCode.SharpDevelop.Project.LoadSolution"
extensions = "*.prjx"/>
<FileFilter id = "Project"
name = "${res:SharpDevelop.FileFilter.ProjectFiles}"
extensions = "*.prjx;*.vbproj;*.csproj"/>
class = "ICSharpCode.SharpDevelop.Project.LoadProject"
extensions = "*.vbproj;*.csproj"/>
<FileFilter id = "AllFiles"
name = "${res:SharpDevelop.FileFilter.AllFiles}"

BIN
data/resources/StringResources.cz.resources

Binary file not shown.

BIN
data/resources/StringResources.de.resources

Binary file not shown.

BIN
data/resources/StringResources.es.resources

Binary file not shown.

BIN
data/resources/StringResources.fr.resources

Binary file not shown.

BIN
data/resources/StringResources.hu.resources

Binary file not shown.

BIN
data/resources/StringResources.it.resources

Binary file not shown.

BIN
data/resources/StringResources.se.resources

Binary file not shown.

BIN
data/resources/StringResources.tr.resources

Binary file not shown.

8
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.addin

@ -15,6 +15,14 @@ @@ -15,6 +15,14 @@
<Import assembly = ":ICSharpCode.SharpDevelop"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/Combine/FileFilter">
<FileFilter id = "BooProject"
insertbefore="AllFiles"
name = "${res:SharpDevelop.FileFilter.BooPrjFiles}"
class = "ICSharpCode.SharpDevelop.Project.LoadProject"
extensions = "*.booproj"/>
</Path>
<Path name = "/SharpDevelop/Workbench/FileFilter">
<FileFilter id = "Boo"
insertbefore="AllFiles"

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -747,6 +747,7 @@ @@ -747,6 +747,7 @@
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\WebServiceDiscoveryClientProtocol.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AsyncDiscoveryState.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\DiscoveryNetworkCredential.cs" />
<Compile Include="Src\Services\ProjectService\ProjectLoader.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

8
src/Main/Base/Project/Src/Commands/AutostartCommands.cs

@ -109,11 +109,9 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -109,11 +109,9 @@ namespace ICSharpCode.SharpDevelop.Commands
foreach (string file in fileList) {
didLoadCombineOrFile = true;
try {
string ext = Path.GetExtension(file);
if (ProjectService.IsSolutionExtension(ext)) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(ProjectService.LoadSolution), file);
} else if (ProjectService.IsProjectExtension(ext)) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(ProjectService.LoadProject), file);
IProjectLoader loader = ProjectService.GetProjectLoader(file);
if (loader != null) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file);
} else {
FileService.OpenFile(file);
}

7
src/Main/Base/Project/Src/Gui/Pads/FileScout.cs

@ -474,10 +474,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -474,10 +474,9 @@ namespace ICSharpCode.SharpDevelop.Gui
void FileSelected(object sender, EventArgs e)
{
foreach (FileList.FileListItem item in filelister.SelectedItems) {
if (ProjectService.IsSolutionExtension(Path.GetExtension(item.FullName))) {
ProjectService.LoadSolution(item.FullName);
} else if (ProjectService.IsProjectExtension(Path.GetExtension(item.FullName))) {
ProjectService.LoadProject(item.FullName);
IProjectLoader loader = ProjectService.GetProjectLoader(item.FullName);
if (loader != null) {
loader.Load(item.FullName);
} else {
FileService.OpenFile(item.FullName);
}

3
src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs

@ -196,7 +196,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -196,7 +196,8 @@ namespace ICSharpCode.SharpDevelop.Gui
void LoadSolutionProjectsThreadEndedEvent(object sender, EventArgs e)
{
this.BeginInvoke(new MethodInvoker(this.RefreshSecondaryViewContents));
// do not invoke on this: it's possible that "this" is disposed while this method is executing
WorkbenchSingleton.SafeThreadAsyncCall(new MethodInvoker(this.RefreshSecondaryViewContents));
}
void LeaveTabPage(object sender, EventArgs e)

38
src/Main/Base/Project/Src/Services/ProjectService/ProjectLoader.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
using System;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Interface called to load (convert) project and solution files
/// </summary>
public interface IProjectLoader
{
/// <summary>
/// Load/Convert the project solution
/// </summary>
void Load(string fileName);
}
/// <summary>
/// Loader for MSBuild project files
/// </summary>
public class LoadProject : IProjectLoader
{
public void Load(string fileName)
{
ProjectService.LoadProject(fileName);
}
}
/// <summary>
/// Loader for sln files as well as Sharpdevelop cmbx and prjx files
/// </summary>
public class LoadSolution : IProjectLoader
{
public void Load(string fileName)
{
ProjectService.LoadSolution(fileName);
}
}
}

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

@ -63,32 +63,28 @@ namespace ICSharpCode.SharpDevelop.Project @@ -63,32 +63,28 @@ namespace ICSharpCode.SharpDevelop.Project
FileService.FileRenamed += FileServiceFileRenamed;
FileService.FileRemoved += FileServiceFileRemoved;
}
public static bool IsSolutionExtension(string ext)
{
return ext.Equals(".SLN", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".CMBX", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".PRJX", StringComparison.OrdinalIgnoreCase);
// prjx converter is called by Solution.Load, so treat prjx as solution
}
public static bool IsProjectExtension(string ext)
{
return ext.Equals(".CSPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".VBPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".BOOPROJ", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".ILPROJ", StringComparison.OrdinalIgnoreCase);
public static IProjectLoader GetProjectLoader(string fileName)
{
AddInTreeNode addinTreeNode = AddInTree.GetTreeNode("/SharpDevelop/Workbench/Combine/FileFilter");
foreach (Codon codon in addinTreeNode.Codons) {
string pattern = codon.Properties.Get("extensions", "");
if (FileUtility.MatchesPattern(fileName, pattern) && codon.Properties.Contains("class")) {
object binding = codon.AddIn.CreateObject(codon.Properties["class"]);
return binding as IProjectLoader;
}
}
return null;
}
public static void LoadSolutionOrProject(string fileName)
{
string ext = Path.GetExtension(fileName);
if (ProjectService.IsSolutionExtension(ext))
ProjectService.LoadSolution(fileName);
else if (ProjectService.IsProjectExtension(ext))
ProjectService.LoadProject(fileName);
else
IProjectLoader loader = GetProjectLoader(fileName);
if (loader != null) {
loader.Load(fileName);
} else {
MessageService.ShowError(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.InvalidProjectOrCombine}", new string[,] {{"FileName", fileName}}));
}
}
static void FileServiceFileRenamed(object sender, FileRenameEventArgs e)

68
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -333,7 +333,73 @@ namespace ICSharpCode.Core @@ -333,7 +333,73 @@ namespace ICSharpCode.Core
FileAttributes attr = File.GetAttributes(filename);
return (attr & FileAttributes.Directory) != 0;
}
//TODO This code is Windows specific
static bool MatchN (string src, int srcidx, string pattern, int patidx)
{
int patlen = pattern.Length;
int srclen = src.Length;
char next_char;
for (;;) {
if (patidx == patlen)
return (srcidx == srclen);
next_char = pattern[patidx++];
if (next_char == '?') {
if (srcidx == src.Length)
return false;
srcidx++;
}
else if (next_char != '*') {
if ((srcidx == src.Length) || (src[srcidx] != next_char))
return false;
srcidx++;
}
else {
if (patidx == pattern.Length)
return true;
while (srcidx < srclen) {
if (MatchN(src, srcidx, pattern, patidx))
return true;
srcidx++;
}
return false;
}
}
}
static bool Match(string src, string pattern)
{
if (pattern[0] == '*') {
// common case optimization
int i = pattern.Length;
int j = src.Length;
while (--i > 0) {
if (pattern[i] == '*')
return MatchN(src, 0, pattern, 0);
if (j-- == 0)
return false;
if ((pattern[i] != src[j]) && (pattern[i] != '?'))
return false;
}
return true;
}
return MatchN(src, 0, pattern, 0);
}
public static bool MatchesPattern(string filename, string pattern)
{
filename = filename.ToUpper();
pattern = pattern.ToUpper();
string[] patterns = pattern.Split(';');
foreach (string p in patterns) {
if (Match(filename, p)) {
return true;
}
}
return false;
}
// Observe SAVE functions
public static FileOperationResult ObservedSave(FileOperationDelegate saveFile, string fileName, string message, FileErrorPolicy policy)
{

BIN
src/Main/StartUp/Project/Resources/StringResources.resources

Binary file not shown.
Loading…
Cancel
Save