Browse Source

Put the SortOrder in the AddIn-Tree; and remove the SortOrder.xml files.

pull/45/merge
Daniel Grunwald 12 years ago
parent
commit
feab288aca
  1. 5
      data/templates/file/CSharp/FileCategorySortOrder.xml
  2. 5
      data/templates/file/VB/FileCategorySortOrder.xml
  3. 5
      data/templates/project/CSharp/ProjectCategorySortOrder.xml
  4. 5
      data/templates/project/VB/ProjectCategorySortOrder.xml
  5. 10
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  6. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  7. 13
      src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs
  8. 13
      src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs
  9. 6
      src/Main/Base/Project/Templates/TemplateCategory.cs
  10. 16
      src/Main/SharpDevelop/Templates/TemplateCategoryDoozer.cs
  11. 13
      src/Main/SharpDevelop/Templates/TemplateService.cs

5
data/templates/file/CSharp/FileCategorySortOrder.xml

@ -1,5 +0,0 @@
<Categories>
<Category Name="C#">
<Category Name="${res:Templates.File.Categories.WindowsApplications}" SortOrder="10"/>
</Category>
</Categories>

5
data/templates/file/VB/FileCategorySortOrder.xml

@ -1,5 +0,0 @@
<Categories>
<Category Name="VB">
<Category Name="${res:Templates.File.Categories.WindowsApplications}" SortOrder="10"/>
</Category>
</Categories>

5
data/templates/project/CSharp/ProjectCategorySortOrder.xml

@ -1,5 +0,0 @@
<Categories>
<Category Name="C#">
<Category Name="${res:Templates.File.Categories.WindowsApplications}" SortOrder="10"/>
</Category>
</Categories>

5
data/templates/project/VB/ProjectCategorySortOrder.xml

@ -1,5 +0,0 @@
<Categories>
<Category Name="VB">
<Category Name="${res:Templates.File.Categories.WindowsApplications}" SortOrder="10"/>
</Category>
</Categories>

10
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -62,6 +62,16 @@
<CodeCompletionBinding id = "CSharp" extensions = ".cs" class = "CSharpBinding.Completion.CSharpCompletionBinding"/> <CodeCompletionBinding id = "CSharp" extensions = ".cs" class = "CSharpBinding.Completion.CSharpCompletionBinding"/>
</Path> </Path>
<Path name = "/SharpDevelop/BackendBindings/Templates">
<!-- The contents of the template categories is provided by the data/templates folder
in which SharpDevelop looks by default. We explicitly list the category only in order to assign
the sortOrder.
-->
<TemplateCategory id = "C#">
<TemplateCategory id = "${res:Templates.File.Categories.WindowsApplications}" sortOrder="10" />
</TemplateCategory>
</Path>
<Path name="/SharpDevelop/Workbench/LanguageBindings"> <Path name="/SharpDevelop/Workbench/LanguageBindings">
<LanguageBinding <LanguageBinding
id="CSharp" id="CSharp"

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

@ -49,6 +49,7 @@
<Doozer name="TaskBoundAdditionalLogger" class="ICSharpCode.SharpDevelop.Project.TaskBoundAdditionalLoggerDoozer"/> <Doozer name="TaskBoundAdditionalLogger" class="ICSharpCode.SharpDevelop.Project.TaskBoundAdditionalLoggerDoozer"/>
<Doozer name="TaskBoundLoggerFilter" class="ICSharpCode.SharpDevelop.Project.TaskBoundLoggerFilterDoozer"/> <Doozer name="TaskBoundLoggerFilter" class="ICSharpCode.SharpDevelop.Project.TaskBoundLoggerFilterDoozer"/>
<Doozer name="TemplateFile" class="ICSharpCode.SharpDevelop.Templates.TemplateFileDoozer"/> <Doozer name="TemplateFile" class="ICSharpCode.SharpDevelop.Templates.TemplateFileDoozer"/>
<Doozer name="TemplateCategory" class="ICSharpCode.SharpDevelop.Templates.TemplateCategoryDoozer"/>
</Import> </Import>
<Import assembly=":SharpDevelop"> <Import assembly=":SharpDevelop">
<Doozer name="Parser" class="ICSharpCode.SharpDevelop.Parser.ParserDoozer"/> <Doozer name="Parser" class="ICSharpCode.SharpDevelop.Parser.ParserDoozer"/>

13
src/Main/Base/Project/Src/Gui/Dialogs/NewFileDialog.cs

@ -98,15 +98,22 @@ namespace ICSharpCode.SharpDevelop.Gui
void InitializeTemplates(IEnumerable<TemplateCategory> templateCategories) void InitializeTemplates(IEnumerable<TemplateCategory> templateCategories)
{ {
foreach (var templateCategory in templateCategories) { foreach (var templateCategory in Sorted(templateCategories)) {
categoryTreeView.Nodes.Add(CreateCategory(templateCategory)); var cat = CreateCategory(templateCategory);
if (!cat.IsEmpty)
categoryTreeView.Nodes.Add(cat);
} }
} }
IEnumerable<TemplateCategory> Sorted(IEnumerable<TemplateCategory> templateCategories)
{
return templateCategories.OrderByDescending(c => c.SortOrder).ThenBy(c => StringParser.Parse(c.DisplayName));
}
Category CreateCategory(TemplateCategory templateCategory) Category CreateCategory(TemplateCategory templateCategory)
{ {
Category node = new NewFileDialog.Category(templateCategory.DisplayName); Category node = new NewFileDialog.Category(templateCategory.DisplayName);
foreach (var subcategory in templateCategory.Subcategories) { foreach (var subcategory in Sorted(templateCategory.Subcategories)) {
var subnode = CreateCategory(subcategory); var subnode = CreateCategory(subcategory);
if (!subnode.IsEmpty) if (!subnode.IsEmpty)
node.Nodes.Add(subnode); node.Nodes.Add(subnode);

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

@ -89,17 +89,24 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs
} }
IEnumerable<TemplateCategory> Sorted(IEnumerable<TemplateCategory> templateCategories)
{
return templateCategories.OrderByDescending(c => c.SortOrder).ThenBy(c => StringParser.Parse(c.DisplayName));
}
protected virtual void InitializeTemplates(IEnumerable<TemplateCategory> templateCategories) protected virtual void InitializeTemplates(IEnumerable<TemplateCategory> templateCategories)
{ {
foreach (var templateCategory in templateCategories) { foreach (var templateCategory in Sorted(templateCategories)) {
categoryTreeView.Nodes.Add(CreateCategory(templateCategory)); var cat = CreateCategory(templateCategory);
if (!cat.IsEmpty)
categoryTreeView.Nodes.Add(cat);
} }
} }
Category CreateCategory(TemplateCategory templateCategory) Category CreateCategory(TemplateCategory templateCategory)
{ {
Category node = new Category(templateCategory.DisplayName); Category node = new Category(templateCategory.DisplayName);
foreach (var subcategory in templateCategory.Subcategories) { foreach (var subcategory in Sorted(templateCategory.Subcategories)) {
var subnode = CreateCategory(subcategory); var subnode = CreateCategory(subcategory);
if (!subnode.IsEmpty) if (!subnode.IsEmpty)
node.Nodes.Add(subnode); node.Nodes.Add(subnode);

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

@ -16,6 +16,12 @@ namespace ICSharpCode.SharpDevelop.Templates
readonly string description; readonly string description;
readonly IImage icon; readonly IImage icon;
/// <summary>
/// An integer that is used for sorting; categories with higher values are listed first.
/// For equal values, the categories will be sorted by the display name.
/// </summary>
public int SortOrder { get; set; }
public override string Name { public override string Name {
get { return name; } get { return name; }
} }

16
src/Main/SharpDevelop/Templates/TemplateCategoryDoozer.cs

@ -2,7 +2,9 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.Utils;
namespace ICSharpCode.SharpDevelop.Templates namespace ICSharpCode.SharpDevelop.Templates
{ {
@ -12,6 +14,10 @@ namespace ICSharpCode.SharpDevelop.Templates
/// <attribute name="displayName" use="optional"> /// <attribute name="displayName" use="optional">
/// The display name to use. If not specified, the codon id is used instead. /// The display name to use. If not specified, the codon id is used instead.
/// </attribute> /// </attribute>
/// <attribute name="sortOrder" use="optional">
/// An integer that is used for sorting; categories with higher values are listed first.
/// For equal values, the categories will be sorted by the display name.
/// </attribute>
/// <children childTypes="TemplateBase"> /// <children childTypes="TemplateBase">
/// The &lt;TemplateCategory&gt; may have templates and subcategories as children. /// The &lt;TemplateCategory&gt; may have templates and subcategories as children.
/// </children> /// </children>
@ -36,13 +42,21 @@ namespace ICSharpCode.SharpDevelop.Templates
args.Codon.Properties["description"], args.Codon.Properties["description"],
icon icon
); );
int sortOrder;
if (int.TryParse(args.Codon.Properties["sortOrder"], out sortOrder))
category.SortOrder = sortOrder;
LoadSubItems(category, args);
return category;
}
void LoadSubItems(TemplateCategory category, BuildItemArgs args)
{
foreach (TemplateBase item in args.BuildSubItems<TemplateBase>()) { foreach (TemplateBase item in args.BuildSubItems<TemplateBase>()) {
if (item is TemplateCategory) if (item is TemplateCategory)
category.Subcategories.Add((TemplateCategory)item); category.Subcategories.Add((TemplateCategory)item);
else else
category.Templates.Add(item); category.Templates.Add(item);
} }
return category;
} }
} }
} }

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

@ -6,8 +6,8 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.Utils;
namespace ICSharpCode.SharpDevelop.Templates namespace ICSharpCode.SharpDevelop.Templates
{ {
@ -38,14 +38,15 @@ namespace ICSharpCode.SharpDevelop.Templates
{ {
var items = SD.AddInTree.BuildItems<TemplateBase>(TemplatePath, this, false); var items = SD.AddInTree.BuildItems<TemplateBase>(TemplatePath, this, false);
var categories = items.OfType<TemplateCategory>().ToList(); var categories = items.OfType<TemplateCategory>().ToList();
foreach (ICategory classicTemplate in items.Except(categories)) { foreach (var classicTemplate in items.Except(categories)) {
// compatibility with the SD <=4.x way of adding templates: // compatibility with the SD <=4.x way of adding templates:
// define category+subcategory in the .xft/.xpt file, // define category+subcategory in the .xft/.xpt file,
// and the category gets created automatically // and the category gets created automatically
var cat = GetOrCreateClassicCategory(categories, classicTemplate.Category); ICategory classicCategory = (ICategory)classicTemplate;
if (!string.IsNullOrEmpty(classicTemplate.Subcategory)) var cat = GetOrCreateClassicCategory(categories, classicCategory.Category);
cat = GetOrCreateClassicCategory(cat.Subcategories, classicTemplate.Subcategory); if (!string.IsNullOrEmpty(classicCategory.Subcategory))
cat.Templates.Add((TemplateBase)classicTemplate); cat = GetOrCreateClassicCategory(cat.Subcategories, classicCategory.Subcategory);
cat.Templates.Add(classicTemplate);
} }
return categories; return categories;
} }

Loading…
Cancel
Save