Browse Source

Allow addins to have their project/file templates stored in the addin directory.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@478 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
d43964af7c
  1. 4
      src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.addin
  2. 4
      src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj
  3. 2
      src/AddIns/BackendBindings/ILAsmBinding/Project/Templates/ConsoleProject.xpt
  4. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  5. 32
      src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs
  6. 29
      src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs
  7. 28
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
  8. 1
      src/Main/StartUp/Project/SharpDevelopMain.cs

4
src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.addin

@ -17,6 +17,10 @@
extensions = "*.il"/> extensions = "*.il"/>
</Path> </Path>
<Path name = "/SharpDevelop/BackendBindings/Templates">
<Directory id = "ILAsm" path = "./Templates" />
</Path>
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/SyntaxModes"> <Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/SyntaxModes">
<SyntaxMode id = "IL Syntax Mode" <SyntaxMode id = "IL Syntax Mode"
name = "ILAsm" name = "ILAsm"

4
src/AddIns/BackendBindings/ILAsmBinding/Project/ILAsmBinding.csproj

@ -54,6 +54,10 @@
<Name>ICSharpCode.Core</Name> <Name>ICSharpCode.Core</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<Folder Include="Templates" />
<Content Include="Templates\ConsoleProject.xpt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project> </Project>

2
data/templates/project/ILAsm/ConsoleProject.xpt → src/AddIns/BackendBindings/ILAsmBinding/Project/Templates/ConsoleProject.xpt

@ -1,4 +1,4 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<Template originator = "Mike Krueger" <Template originator = "Mike Krueger"
created = "06/10/2001" created = "06/10/2001"
lastModified = "02/01/2003"> lastModified = "02/01/2003">

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

@ -701,6 +701,7 @@
<Compile Include="Src\Gui\Components\AutoHide\AutoHideContainer.cs" /> <Compile Include="Src\Gui\Components\AutoHide\AutoHideContainer.cs" />
<Compile Include="Src\Services\RefactoringService\LocalVariableRefactoring.cs" /> <Compile Include="Src\Services\RefactoringService\LocalVariableRefactoring.cs" />
<Compile Include="Src\Services\RefactoringService\FindReferencesAndRenameHelper.cs" /> <Compile Include="Src\Services\RefactoringService\FindReferencesAndRenameHelper.cs" />
<Compile Include="Src\Internal\Doozers\DirectoryDoozer.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

32
src/Main/Base/Project/Src/Internal/Doozers/DirectoryDoozer.cs

@ -0,0 +1,32 @@
// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections;
using System.IO;
namespace ICSharpCode.Core
{
/// <summary>
/// Creates path names using a relative to the folder containing the addin file.
/// </summary>
/// <attribute name="path">
/// Path relative to the directory which contains the .addin file defining the codon.
/// </attribute>
/// <returns>
/// A string containing the full path name.
/// </returns>
public class DirectoryDoozer : IDoozer
{
public bool HandleConditions { get { return false; } }
public object BuildItem(object caller, Codon codon, ArrayList subItems)
{
return Path.Combine(Path.GetDirectoryName(codon.AddIn.FileName), codon.Properties["path"]);
}
}
}

29
src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs

@ -134,7 +134,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
/// <summary> /// <summary>
/// This class defines and holds the new file templates. /// This class defines and holds the new file templates.
/// </summary> /// </summary>
public class FileTemplate public class FileTemplate : IComparable
{ {
public static ArrayList FileTemplates = new ArrayList(); public static ArrayList FileTemplates = new ArrayList();
@ -156,6 +156,15 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
XmlElement fileoptions = null; XmlElement fileoptions = null;
int IComparable.CompareTo(object other)
{
FileTemplate pt = other as FileTemplate;
if (pt == null) return -1;
int res = category.CompareTo(pt.category);
if (res != 0) return res;
return name.CompareTo(pt.name);
}
public string Author { public string Author {
get { get {
return author; return author;
@ -302,25 +311,21 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
static void LoadFileTemplate(string filename)
{
FileTemplates.Add(new FileTemplate(filename));
}
static FileTemplate() static FileTemplate()
{ {
List<string> files = FileUtility.SearchDirectory(PropertyService.DataDirectory + string dataTemplateDir = FileUtility.Combine(PropertyService.DataDirectory, "templates", "file");
Path.DirectorySeparatorChar + "templates" + List<string> files = FileUtility.SearchDirectory(dataTemplateDir, "*.xft");
Path.DirectorySeparatorChar + "file", "*.xft"); foreach (string templateDirectory in AddInTree.BuildItems(ProjectTemplate.TemplatePath, null, false)) {
files.AddRange(FileUtility.SearchDirectory(templateDirectory, "*.xft"));
}
foreach (string file in files) { foreach (string file in files) {
try { try {
if (Path.GetExtension(file) == ".xft") { FileTemplates.Add(new FileTemplate(file));
LoadFileTemplate(file);
}
} catch(Exception e) { } catch(Exception e) {
MessageService.ShowError(e, "Error loading template file " + file + "."); MessageService.ShowError(e, "Error loading template file " + file + ".");
} }
} }
FileTemplates.Sort();
} }
} }
} }

28
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
/// <summary> /// <summary>
/// This class defines and holds the new project templates. /// This class defines and holds the new project templates.
/// </summary> /// </summary>
public class ProjectTemplate public class ProjectTemplate : IComparable
{ {
public static ArrayList ProjectTemplates = new ArrayList(); public static ArrayList ProjectTemplates = new ArrayList();
@ -55,11 +55,19 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
string icon = null; string icon = null;
string wizardpath = null; string wizardpath = null;
int IComparable.CompareTo(object other)
{
ProjectTemplate pt = other as ProjectTemplate;
if (pt == null) return -1;
int res = category.CompareTo(pt.category);
if (res != 0) return res;
return name.CompareTo(pt.name);
}
bool newProjectDialogVisible = true; bool newProjectDialogVisible = true;
ArrayList actions = new ArrayList(); ArrayList actions = new ArrayList();
CombineDescriptor combineDescriptor = null; CombineDescriptor combineDescriptor = null;
ProjectDescriptor projectDescriptor = null; ProjectDescriptor projectDescriptor = null;
@ -243,18 +251,15 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
} }
static void LoadProjectTemplate(string fileName) public const string TemplatePath = "/SharpDevelop/BackendBindings/Templates";
{
try {
} catch (Exception e) {
throw new ApplicationException("error while loading " + fileName + " original exception was : " + e.ToString());
}
}
static ProjectTemplate() static ProjectTemplate()
{ {
List<string> files = FileUtility.SearchDirectory(FileUtility.Combine(PropertyService.DataDirectory, "templates", "project"), "*.xpt"); string dataTemplateDir = FileUtility.Combine(PropertyService.DataDirectory, "templates", "project");
List<string> files = FileUtility.SearchDirectory(dataTemplateDir, "*.xpt");
foreach (string templateDirectory in AddInTree.BuildItems(TemplatePath, null, false)) {
files.AddRange(FileUtility.SearchDirectory(templateDirectory, "*.xpt"));
}
foreach (string fileName in files) { foreach (string fileName in files) {
try { try {
ProjectTemplates.Add(new ProjectTemplate(fileName)); ProjectTemplates.Add(new ProjectTemplate(fileName));
@ -262,6 +267,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
MessageService.ShowError(e, ResourceService.GetString("Internal.Templates.ProjectTemplate.LoadingError") + "\n(" + fileName + ")\n"); MessageService.ShowError(e, ResourceService.GetString("Internal.Templates.ProjectTemplate.LoadingError") + "\n(" + fileName + ")\n");
} }
} }
ProjectTemplates.Sort();
} }
} }
} }

1
src/Main/StartUp/Project/SharpDevelopMain.cs

@ -207,6 +207,7 @@ namespace ICSharpCode.SharpDevelop
AddInTree.Doozers.Add("BrowserSchemeExtension", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer()); AddInTree.Doozers.Add("BrowserSchemeExtension", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer());
AddInTree.Doozers.Add("CodeCompletionBinding", new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer()); AddInTree.Doozers.Add("CodeCompletionBinding", new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer());
AddInTree.Doozers.Add("Debugger", new DebuggerDoozer()); AddInTree.Doozers.Add("Debugger", new DebuggerDoozer());
AddInTree.Doozers.Add("Directory", new DirectoryDoozer());
MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); }; MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); };
} }

Loading…
Cancel
Save