Browse Source

Hide NewProjectDialog behind IUIService.

pull/32/merge
Daniel Grunwald 13 years ago
parent
commit
aecdac2308
  1. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  2. 4
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  3. 14
      src/Main/Base/Project/Services/IUIService.cs
  4. 4
      src/Main/Base/Project/Src/Commands/FileMenuCommands.cs
  5. 2
      src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/CustomTypeConverter/BooleanTypeConverter.cs
  6. 2
      src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/CustomTypeConverter/TemplateTypeConverter.cs
  7. 6
      src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs
  8. 13
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  9. 2
      src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs
  10. 6
      src/Main/Base/Project/Src/Internal/Templates/File/FileTemplate.cs
  11. 2
      src/Main/Base/Project/Src/Internal/Templates/File/ScriptRunner.cs
  12. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  13. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
  14. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs
  15. 6
      src/Main/Base/Project/Templates/FileTemplate.cs
  16. 23
      src/Main/Base/Project/Templates/ITemplateService.cs
  17. 9
      src/Main/Base/Project/Templates/ProjectTemplate.cs
  18. 16
      src/Main/Base/Project/Templates/ProjectTemplateResult.cs
  19. 19
      src/Main/Base/Project/Templates/TemplateBase.cs
  20. 4
      src/Main/Core/Project/Src/AddInTree/CoreStartup.cs
  21. 4
      src/Main/Core/Project/Src/Services/PropertyService/IPropertyService.cs
  22. 4
      src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs
  23. 10
      src/Main/Core/Project/Src/Services/PropertyService/PropertyServiceImpl.cs
  24. 20
      src/Main/SharpDevelop/Services/UIService.cs
  25. 2
      src/Main/SharpDevelop/SharpDevelop.csproj
  26. 55
      src/Main/SharpDevelop/Templates/TemplateService.cs

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -74,6 +74,8 @@
class="ICSharpCode.SharpDevelop.ClipboardWrapper"/> class="ICSharpCode.SharpDevelop.ClipboardWrapper"/>
<Service id="ICSharpCode.SharpDevelop.IFileSystem" <Service id="ICSharpCode.SharpDevelop.IFileSystem"
class="ICSharpCode.SharpDevelop.FileSystem"/> class="ICSharpCode.SharpDevelop.FileSystem"/>
<Service id="ICSharpCode.SharpDevelop.Templates.ITemplateService"
class="ICSharpCode.SharpDevelop.Templates.TemplateService"/>
<Service id="ICSharpCode.SharpDevelop.Project.IBuildService" <Service id="ICSharpCode.SharpDevelop.Project.IBuildService"
class="ICSharpCode.SharpDevelop.Project.BuildService"/> class="ICSharpCode.SharpDevelop.Project.BuildService"/>
<Service id="ICSharpCode.SharpDevelop.Project.IProjectService" <Service id="ICSharpCode.SharpDevelop.Project.IProjectService"

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

@ -239,6 +239,9 @@
<Compile Include="Templates\FileTemplateOptions.cs" /> <Compile Include="Templates\FileTemplateOptions.cs" />
<Compile Include="Templates\FileTemplateResult.cs" /> <Compile Include="Templates\FileTemplateResult.cs" />
<Compile Include="Templates\ITemplateService.cs" /> <Compile Include="Templates\ITemplateService.cs" />
<Compile Include="Templates\ProjectTemplate.cs" />
<Compile Include="Templates\ProjectTemplateResult.cs" />
<Compile Include="Templates\TemplateBase.cs" />
<Compile Include="Templates\TemplateLoadException.cs" /> <Compile Include="Templates\TemplateLoadException.cs" />
<Compile Include="Util\AtomicBoolean.cs" /> <Compile Include="Util\AtomicBoolean.cs" />
<Compile Include="Util\ChrootFileSystem.cs" /> <Compile Include="Util\ChrootFileSystem.cs" />
@ -464,7 +467,6 @@
<Compile Include="Src\Internal\Templates\File\FileDescriptionTemplate.cs" /> <Compile Include="Src\Internal\Templates\File\FileDescriptionTemplate.cs" />
<Compile Include="Src\Internal\Templates\File\FileTemplate.cs" /> <Compile Include="Src\Internal\Templates\File\FileTemplate.cs" />
<Compile Include="Src\Internal\Templates\TextTemplate.cs" /> <Compile Include="Src\Internal\Templates\TextTemplate.cs" />
<Compile Include="Src\Internal\Templates\File\INewFileCreator.cs" />
<Compile Include="Src\Project\BeforeBuildCustomToolFileNameFilter.cs" /> <Compile Include="Src\Project\BeforeBuildCustomToolFileNameFilter.cs" />
<Compile Include="Src\Project\BeforeBuildCustomToolProjectItems.cs" /> <Compile Include="Src\Project\BeforeBuildCustomToolProjectItems.cs" />
<Compile Include="Src\Project\BeforeBuildCustomToolRunner.cs" /> <Compile Include="Src\Project\BeforeBuildCustomToolRunner.cs" />

14
src/Main/Base/Project/Services/IUIService.cs

@ -30,9 +30,17 @@ namespace ICSharpCode.SharpDevelop
/// May be <c>null</c> to create an untitled file.</param> /// May be <c>null</c> to create an untitled file.</param>
/// <param name="templates">The list of templates that are available in the dialog. /// <param name="templates">The list of templates that are available in the dialog.
/// Pass <c>null</c> to use the default list (<see cref="ITemplateService.FileTemplates"/>)</param> /// Pass <c>null</c> to use the default list (<see cref="ITemplateService.FileTemplates"/>)</param>
/// <returns> /// <returns>Returns a <see cref="FileTemplateResult"/>; or null if no file was created.</returns>
/// Returns the FileTemplateResult; or null if no file was created.
/// </returns>
FileTemplateResult ShowNewFileDialog(IProject project, DirectoryName directory, IEnumerable<FileTemplate> templates = null); FileTemplateResult ShowNewFileDialog(IProject project, DirectoryName directory, IEnumerable<FileTemplate> templates = null);
/// <summary>
/// Show the 'New Project' dialog.
/// </summary>
/// <param name="solutionFolder">The parent solution folder to which the new project should be added.
/// May be <c>null</c> to create a new solution.</param>
/// <param name="templates">The list of templates that are available in the dialog.
/// Pass <c>null</c> to use the default list (<see cref="ITemplateService.ProjectTemplates"/>)</param>
/// <returns>Returns a <see cref="ProjectTemplateResult"/>; or null if no project was created.</returns>
ProjectTemplateResult ShowNewProjectDialog(ISolutionFolder solutionFolder, IEnumerable<ProjectTemplate> templates = null);
} }
} }

4
src/Main/Base/Project/Src/Commands/FileMenuCommands.cs

@ -13,9 +13,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{ {
public override void Run() public override void Run()
{ {
using (NewProjectDialog npdlg = new NewProjectDialog(true)) { SD.UIService.ShowNewProjectDialog(null);
npdlg.ShowDialog(SD.WinForms.MainWin32Window);
}
} }
} }

2
src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/CustomTypeConverter/BooleanTypeConverter.cs

@ -9,7 +9,7 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui namespace ICSharpCode.SharpDevelop.Gui
{ {
public class BooleanTypeConverter : TypeConverter internal class BooleanTypeConverter : TypeConverter
{ {
string True { string True {
get { get {

2
src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/CustomTypeConverter/TemplateTypeConverter.cs

@ -10,7 +10,7 @@ using ICSharpCode.SharpDevelop.Internal.Templates;
namespace ICSharpCode.SharpDevelop.Gui namespace ICSharpCode.SharpDevelop.Gui
{ {
public class CustomTypeConverter : TypeConverter internal class CustomTypeConverter : TypeConverter
{ {
TemplateType templateType; TemplateType templateType;

6
src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs

@ -16,7 +16,7 @@ using Microsoft.Build.Exceptions;
namespace ICSharpCode.SharpDevelop.Project.Dialogs namespace ICSharpCode.SharpDevelop.Project.Dialogs
{ {
public partial class NewProjectDialog : Form internal partial class NewProjectDialog : Form
{ {
protected List<TemplateItem> alltemplates = new List<TemplateItem>(); protected List<TemplateItem> alltemplates = new List<TemplateItem>();
protected List<Category> categories = new List<Category>(); protected List<Category> categories = new List<Category>();
@ -276,7 +276,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs
public FileName NewProjectLocation; public FileName NewProjectLocation;
public FileName NewSolutionLocation; public FileName NewSolutionLocation;
public ISolutionFolderNode SolutionFolderNode { get; set; } public ISolutionFolder SolutionFolder;
string CheckProjectName(string solution, string name, string location) string CheckProjectName(string solution, string name, string location)
{ {
@ -366,7 +366,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs
} else { } else {
IProject project = item.Template.CreateProject(SD.ProjectService.CurrentSolution, cinfo); IProject project = item.Template.CreateProject(SD.ProjectService.CurrentSolution, cinfo);
NewProjectLocation = project.FileName; NewProjectLocation = project.FileName;
SolutionFolderNode.Folder.Items.Add(project); SolutionFolder.Items.Add(project);
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }

13
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs

@ -19,18 +19,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
node = node.Parent; node = node.Parent;
ISolutionFolderNode solutionFolderNode = node as ISolutionFolderNode; ISolutionFolderNode solutionFolderNode = node as ISolutionFolderNode;
if (solutionFolderNode != null) { if (solutionFolderNode != null) {
using (NewProjectDialog npdlg = new NewProjectDialog(false)) { SD.UIService.ShowNewProjectDialog(solutionFolderNode.Folder);
npdlg.SolutionFolderNode = solutionFolderNode;
npdlg.InitialProjectLocationDirectory = GetInitialDirectorySuggestion(solutionFolderNode.Folder);
// show the dialog to request project type and name
if (npdlg.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
if (npdlg.NewProjectLocation == null) {
MessageService.ShowError("No project has been created, there is nothing to add.");
return;
}
}
}
} }
} }

2
src/Main/Base/Project/Src/Internal/Templates/File/FileDescriptionTemplate.cs

@ -13,7 +13,7 @@ using ICSharpCode.SharpDevelop.Templates;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Internal.Templates
{ {
public class FileDescriptionTemplate internal class FileDescriptionTemplate
{ {
string name; string name;
string language; string language;

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

@ -16,7 +16,7 @@ using ICSharpCode.SharpDevelop.Templates;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Internal.Templates
{ {
public class TemplateProperty internal class TemplateProperty
{ {
string name; string name;
string localizedName; string localizedName;
@ -72,7 +72,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
} }
public class TemplateType internal class TemplateType
{ {
string name; string name;
Hashtable pairs = new Hashtable(); Hashtable pairs = new Hashtable();
@ -101,7 +101,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 : IComparable internal class FileTemplate : IComparable
{ {
public static List<FileTemplate> FileTemplates = new List<FileTemplate>(); public static List<FileTemplate> FileTemplates = new List<FileTemplate>();

2
src/Main/Base/Project/Src/Internal/Templates/File/ScriptRunner.cs

@ -13,7 +13,7 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Internal.Templates
{ {
public class ScriptRunner internal class ScriptRunner
{ {
FileTemplate item; FileTemplate item;
FileDescriptionTemplate file; FileDescriptionTemplate file;

2
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
/// <summary> /// <summary>
/// This class is used inside the solution templates for projects. /// This class is used inside the solution templates for projects.
/// </summary> /// </summary>
public sealed class ProjectDescriptor internal sealed class ProjectDescriptor
{ {
private class ProjectProperty private class ProjectProperty
{ {

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

@ -39,7 +39,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 : IComparable internal class ProjectTemplate : IComparable
{ {
static List<ProjectTemplate> projectTemplates; static List<ProjectTemplate> projectTemplates;

2
src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs

@ -11,7 +11,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Internal.Templates
{ {
public class SolutionDescriptor internal class SolutionDescriptor
{ {
SolutionFolderDescriptor mainFolder = new SolutionFolderDescriptor(""); SolutionFolderDescriptor mainFolder = new SolutionFolderDescriptor("");

6
src/Main/Base/Project/Templates/FileTemplate.cs

@ -9,12 +9,6 @@ namespace ICSharpCode.SharpDevelop.Templates
{ {
public abstract class FileTemplate public abstract class FileTemplate
{ {
public abstract string Name { get; }
public abstract string Category { get; }
public abstract string Subcategory { get; }
public abstract string Description { get; }
public abstract IImage Icon { get; }
/// <summary> /// <summary>
/// Gets whether this template is available for the specified project. /// Gets whether this template is available for the specified project.
/// </summary> /// </summary>

23
src/Main/Base/Project/Templates/ITemplateService.cs

@ -17,8 +17,27 @@ namespace ICSharpCode.SharpDevelop.Templates
IEnumerable<FileTemplate> FileTemplates { get; } IEnumerable<FileTemplate> FileTemplates { get; }
/// <summary> /// <summary>
/// Loads a file template (.xft file) from a stream. /// Gets the list of project templates that are available in the 'new project' dialog.
/// </summary> /// </summary>
FileTemplate LoadFileTemplate(Stream stream); IEnumerable<ProjectTemplate> ProjectTemplates { get; }
/// <summary>
/// Loads a file template (.xft or .xpt file) from disk.
/// </summary>
/// <returns><see cref="FileTemplate"/> or <see cref="ProjectTemplate"/> instance.</returns>
TemplateBase LoadTemplate(FileName fileName);
/// <summary>
/// Loads a file template (.xft or .xpt file) from a text reader.
/// </summary>
/// <param name="stream">The stream containing the .xft/.xpt file.</param>
/// <param name="fileSystem">File system used to open referenced input files.
/// This should usually be a <see cref="ReadOnlyChrootFileSystem"/> so that the file template
/// can use relative paths.
/// The template will keep a reference to the file system instance and use it when it is used to create
/// files/projects.
/// </param>
/// <returns><see cref="FileTemplate"/> or <see cref="ProjectTemplate"/> instance.</returns>
TemplateBase LoadTemplate(TextReader textReader, IReadOnlyFileSystem fileSystem);
} }
} }

9
src/Main/Base/Project/Src/Internal/Templates/File/INewFileCreator.cs → src/Main/Base/Project/Templates/ProjectTemplate.cs

@ -3,7 +3,12 @@
using System; using System;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Templates
{ {
public abstract class ProjectTemplate : TemplateBase
{
public ProjectTemplate()
{
}
}
} }

16
src/Main/Base/Project/Templates/ProjectTemplateResult.cs

@ -0,0 +1,16 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Templates
{
/// <summary>
/// Represents the result of creating new projects using a project template.
/// </summary>
public class ProjectTemplateResult
{
}
}

19
src/Main/Base/Project/Templates/TemplateBase.cs

@ -0,0 +1,19 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Templates
{
/// <summary>
/// Common base class for <see cref="FileTemplate"/> and <see cref="ProjectTemplate"/>.
/// </summary>
public abstract class TemplateBase
{
public abstract string Name { get; }
public abstract string Category { get; }
public abstract string Subcategory { get; }
public abstract string Description { get; }
public abstract IImage Icon { get; }
}
}

4
src/Main/Core/Project/Src/AddInTree/CoreStartup.cs

@ -205,8 +205,8 @@ namespace ICSharpCode.Core
applicationName); applicationName);
var container = ServiceSingleton.GetRequiredService<IServiceContainer>(); var container = ServiceSingleton.GetRequiredService<IServiceContainer>();
var propertyService = new PropertyServiceImpl( var propertyService = new PropertyServiceImpl(
configDirectory, DirectoryName.Create(configDirectory),
dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data"), DirectoryName.Create(dataDirectory ?? Path.Combine(FileUtility.ApplicationRootPath, "data")),
propertiesName); propertiesName);
var applicationStateInfoService = new ApplicationStateInfoService(); var applicationStateInfoService = new ApplicationStateInfoService();
addInTree = new AddInTreeImpl(applicationStateInfoService); addInTree = new AddInTreeImpl(applicationStateInfoService);

4
src/Main/Core/Project/Src/Services/PropertyService/IPropertyService.cs

@ -18,13 +18,13 @@ namespace ICSharpCode.Core
/// Gets the configuration directory. (usually "%ApplicationData%\%ApplicationName%") /// Gets the configuration directory. (usually "%ApplicationData%\%ApplicationName%")
/// </summary> /// </summary>
/// <seealso cref="CoreStartup.ConfigDirectory"/> /// <seealso cref="CoreStartup.ConfigDirectory"/>
string ConfigDirectory { get; } DirectoryName ConfigDirectory { get; }
/// <summary> /// <summary>
/// Gets the data directory (usually "ApplicationRootPath\data") /// Gets the data directory (usually "ApplicationRootPath\data")
/// </summary> /// </summary>
/// <seealso cref="CoreStartup.DataDirectory"/> /// <seealso cref="CoreStartup.DataDirectory"/>
string DataDirectory { get; } DirectoryName DataDirectory { get; }
/// <summary> /// <summary>
/// Gets the main properties container for this property service. /// Gets the main properties container for this property service.

4
src/Main/Core/Project/Src/Services/PropertyService/PropertyService.cs

@ -26,11 +26,11 @@ namespace ICSharpCode.Core
get { return Service.MainPropertiesContainer; } get { return Service.MainPropertiesContainer; }
} }
public static string ConfigDirectory { public static DirectoryName ConfigDirectory {
get { return Service.ConfigDirectory; } get { return Service.ConfigDirectory; }
} }
public static string DataDirectory { public static DirectoryName DataDirectory {
get { return Service.DataDirectory; } get { return Service.DataDirectory; }
} }

10
src/Main/Core/Project/Src/Services/PropertyService/PropertyServiceImpl.cs

@ -16,8 +16,8 @@ namespace ICSharpCode.Core
{ {
string propertyFileName; string propertyFileName;
string configDirectory; DirectoryName configDirectory;
string dataDirectory; DirectoryName dataDirectory;
Properties properties; Properties properties;
@ -30,7 +30,7 @@ namespace ICSharpCode.Core
properties = new Properties(); properties = new Properties();
} }
public PropertyServiceImpl(string configDirectory, string dataDirectory, string propertiesName) public PropertyServiceImpl(DirectoryName configDirectory, DirectoryName dataDirectory, string propertiesName)
{ {
this.configDirectory = configDirectory; this.configDirectory = configDirectory;
this.dataDirectory = dataDirectory; this.dataDirectory = dataDirectory;
@ -39,13 +39,13 @@ namespace ICSharpCode.Core
LoadPropertiesFromStream(FileName.Create(Path.Combine(configDirectory, propertyFileName))); LoadPropertiesFromStream(FileName.Create(Path.Combine(configDirectory, propertyFileName)));
} }
public string ConfigDirectory { public DirectoryName ConfigDirectory {
get { get {
return configDirectory; return configDirectory;
} }
} }
public string DataDirectory { public DirectoryName DataDirectory {
get { get {
return dataDirectory; return dataDirectory;
} }

20
src/Main/SharpDevelop/Services/UIService.cs

@ -5,10 +5,13 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Internal.Templates; using ICSharpCode.SharpDevelop.Internal.Templates;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Project.Commands;
using ICSharpCode.SharpDevelop.Project.Dialogs;
using ICSharpCode.SharpDevelop.Templates; using ICSharpCode.SharpDevelop.Templates;
namespace ICSharpCode.SharpDevelop namespace ICSharpCode.SharpDevelop
@ -48,5 +51,22 @@ namespace ICSharpCode.SharpDevelop
return result; return result;
} }
} }
public ProjectTemplateResult ShowNewProjectDialog(ISolutionFolder solutionFolder, IEnumerable<ICSharpCode.SharpDevelop.Templates.ProjectTemplate> templates)
{
using (NewProjectDialog npdlg = new NewProjectDialog(createNewSolution: solutionFolder == null)) {
npdlg.SolutionFolder = solutionFolder;
if (solutionFolder != null) {
npdlg.InitialProjectLocationDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolder);
}
// show the dialog to request project type and name
if (npdlg.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
return new ProjectTemplateResult();
} else {
return null;
}
}
}
} }
} }

2
src/Main/SharpDevelop/SharpDevelop.csproj

@ -150,6 +150,7 @@
<Compile Include="Startup\App.xaml.cs" /> <Compile Include="Startup\App.xaml.cs" />
<Compile Include="Startup\SharpDevelopMain.cs" /> <Compile Include="Startup\SharpDevelopMain.cs" />
<Compile Include="Startup\SplashScreen.cs" /> <Compile Include="Startup\SplashScreen.cs" />
<Compile Include="Templates\TemplateService.cs" />
<Compile Include="WinForms\SDWindowsFormsHost.cs" /> <Compile Include="WinForms\SDWindowsFormsHost.cs" />
<Compile Include="WinForms\WinFormsMenuService.cs" /> <Compile Include="WinForms\WinFormsMenuService.cs" />
<Compile Include="WinForms\WinFormsService.cs" /> <Compile Include="WinForms\WinFormsService.cs" />
@ -283,6 +284,7 @@
<Folder Include="Dom" /> <Folder Include="Dom" />
<Folder Include="Editor" /> <Folder Include="Editor" />
<Folder Include="Editor\Bookmarks" /> <Folder Include="Editor\Bookmarks" />
<Folder Include="Templates" />
<Folder Include="Project" /> <Folder Include="Project" />
<Folder Include="Project\Build" /> <Folder Include="Project\Build" />
<Folder Include="Project\Build\MSBuildEngine" /> <Folder Include="Project\Build\MSBuildEngine" />

55
src/Main/SharpDevelop/Templates/TemplateService.cs

@ -0,0 +1,55 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Templates
{
sealed class TemplateService : ITemplateService
{
const string TemplatePath = "/SharpDevelop/BackendBindings/Templates";
Lazy<IReadOnlyList<TemplateBase>> allTemplates;
public TemplateService()
{
allTemplates = new Lazy<IReadOnlyList<TemplateBase>>(LoadTemplates);
}
public IEnumerable<FileTemplate> FileTemplates {
get { return allTemplates.Value.OfType<FileTemplate>(); }
}
public IEnumerable<ProjectTemplate> ProjectTemplates {
get { return allTemplates.Value.OfType<ProjectTemplate>(); }
}
IReadOnlyList<TemplateBase> LoadTemplates()
{
return SD.AddInTree.BuildItems<TemplateBase>(TemplatePath, this, false);
}
public TemplateBase LoadTemplate(FileName fileName)
{
var fileSystem = SD.FileSystem;
using (TextReader reader = fileSystem.OpenText(fileName)) {
return LoadTemplate(reader, new ReadOnlyChrootFileSystem(fileSystem, fileName.GetParentDirectory()));
}
}
public TemplateBase LoadTemplate(TextReader textReader, IReadOnlyFileSystem fileSystem)
{
try {
throw new NotImplementedException();
} catch (XmlException ex) {
throw new TemplateLoadException(ex.Message, ex);
}
}
}
}
Loading…
Cancel
Save