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

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

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

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

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

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

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

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

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

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

@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -41,7 +41,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
/// <summary>
/// This class defines and holds the new project templates.
/// </summary>
public class ProjectTemplate
public class ProjectTemplate : IComparable
{
public static ArrayList ProjectTemplates = new ArrayList();
@ -55,10 +55,18 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -55,10 +55,18 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
string icon = 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;
ArrayList actions = new ArrayList();
CombineDescriptor combineDescriptor = null;
ProjectDescriptor projectDescriptor = null;
@ -242,19 +250,16 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -242,19 +250,16 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
action.Run(projectCreateInformation);
}
}
static void LoadProjectTemplate(string fileName)
{
try {
} catch (Exception e) {
throw new ApplicationException("error while loading " + fileName + " original exception was : " + e.ToString());
}
}
public const string TemplatePath = "/SharpDevelop/BackendBindings/Templates";
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) {
try {
ProjectTemplates.Add(new ProjectTemplate(fileName));
@ -262,6 +267,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -262,6 +267,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
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 @@ -207,6 +207,7 @@ namespace ICSharpCode.SharpDevelop
AddInTree.Doozers.Add("BrowserSchemeExtension", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.SchemeExtensionDoozer());
AddInTree.Doozers.Add("CodeCompletionBinding", new ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.CodeCompletionBindingDoozer());
AddInTree.Doozers.Add("Debugger", new DebuggerDoozer());
AddInTree.Doozers.Add("Directory", new DirectoryDoozer());
MenuCommand.LinkCommandCreator = delegate(string link) { return new LinkCommand(link); };
}

Loading…
Cancel
Save