📄 templatecategorysortorderfile.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision: 990 $</version>
// </file>
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
namespace ICSharpCode.SharpDevelop.Internal.Templates
{
/// <summary>
/// File that defines the sort order for the file and project template
/// categories.
/// </summary>
public class TemplateCategorySortOrderFile
{
public const int UndefinedSortOrder = -1;
public const string ProjectCategorySortOrderFileName = "ProjectCategorySortOrder.xml";
public const string FileCategorySortOrderFileName = "FileCategorySortOrder.xml";
Dictionary<string, int> sortOrders = new Dictionary<string, int>();
static List<TemplateCategorySortOrderFile> projectCategorySortOrderFiles;
static List<TemplateCategorySortOrderFile> fileCategorySortOrderFiles;
public TemplateCategorySortOrderFile(string fileName) : this(new XmlTextReader(new StreamReader(fileName, true)))
{
}
public TemplateCategorySortOrderFile(XmlTextReader reader)
{
using (reader) {
XmlDocument doc = new XmlDocument();
doc.Load(reader);
foreach (XmlElement category in doc.DocumentElement.SelectNodes("Category")) {
string name = StringParser.Parse(category.GetAttribute("Name"));
if (name.Length > 0 && category.HasAttribute("SortOrder")) {
sortOrders.Add(name, GetSortOrder(category.GetAttribute("SortOrder")));
}
foreach (XmlElement subCategory in category.SelectNodes("Category")) {
if (subCategory.HasAttribute("Name")) {
sortOrders.Add(String.Concat(name, ",", StringParser.Parse(subCategory.GetAttribute("Name"))), GetSortOrder(subCategory.GetAttribute("SortOrder")));
}
}
}
}
}
public int GetCategorySortOrder(string name)
{
if (sortOrders.ContainsKey(name)) {
return sortOrders[name];
}
return UndefinedSortOrder;
}
public int GetCategorySortOrder(string name, string subcategoryName)
{
string key = String.Concat(name, ",", subcategoryName);
return GetCategorySortOrder(key);
}
public static int GetProjectCategorySortOrder(string name)
{
if (projectCategorySortOrderFiles == null) {
ReadProjectCategorySortOrderFiles();
}
foreach (TemplateCategorySortOrderFile file in projectCategorySortOrderFiles) {
int sortOrder = file.GetCategorySortOrder(name);
if (sortOrder != UndefinedSortOrder) {
return sortOrder;
}
}
return UndefinedSortOrder;
}
public static int GetProjectCategorySortOrder(string name, string subcategoryName)
{
string key = String.Concat(name, ",", subcategoryName);
return GetProjectCategorySortOrder(key);
}
public static int GetFileCategorySortOrder(string name)
{
if (fileCategorySortOrderFiles == null) {
ReadFileCategorySortOrderFiles();
}
foreach (TemplateCategorySortOrderFile file in fileCategorySortOrderFiles) {
int sortOrder = file.GetCategorySortOrder(name);
if (sortOrder != UndefinedSortOrder) {
return sortOrder;
}
}
return UndefinedSortOrder;
}
public static int GetFileCategorySortOrder(string name, string subcategoryName)
{
string key = String.Concat(name, ",", subcategoryName);
return GetFileCategorySortOrder(key);
}
int GetSortOrder(string s)
{
int sortOrder;
if (Int32.TryParse(s, out sortOrder)) {
return sortOrder;
}
return UndefinedSortOrder;
}
static void ReadProjectCategorySortOrderFiles()
{
projectCategorySortOrderFiles = new List<TemplateCategorySortOrderFile>();
string dataTemplateDir = FileUtility.Combine(PropertyService.DataDirectory, "templates", "project");
List<string> files = FileUtility.SearchDirectory(dataTemplateDir, ProjectCategorySortOrderFileName);
foreach (string templateDirectory in AddInTree.BuildItems(ProjectTemplate.TemplatePath, null, false)) {
files.AddRange(FileUtility.SearchDirectory(templateDirectory, ProjectCategorySortOrderFileName));
}
foreach (string fileName in files) {
try {
projectCategorySortOrderFiles.Add(new TemplateCategorySortOrderFile(fileName));
} catch (Exception ex) {
LoggingService.Debug("Failed to load project category sort order file: " + fileName + " : " + ex.ToString());
}
}
}
static void ReadFileCategorySortOrderFiles()
{
fileCategorySortOrderFiles = new List<TemplateCategorySortOrderFile>();
string dataTemplateDir = FileUtility.Combine(PropertyService.DataDirectory, "templates", "file");
List<string> files = FileUtility.SearchDirectory(dataTemplateDir, FileCategorySortOrderFileName);
foreach (string templateDirectory in AddInTree.BuildItems(ProjectTemplate.TemplatePath, null, false)) {
files.AddRange(FileUtility.SearchDirectory(templateDirectory, FileCategorySortOrderFileName));
}
foreach (string fileName in files) {
try {
fileCategorySortOrderFiles.Add(new TemplateCategorySortOrderFile(fileName));
} catch(Exception ex) {
LoggingService.Debug("Failed to load project category sort order file: " + fileName + " : " + ex.ToString());
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -