⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractclassscoutnode.cs

📁 全功能c#编译器
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
//     <version value="$version"/>
// </file>

using System;
using System.IO;
using System.Windows.Forms;
using System.Diagnostics;
using System.Drawing;
using System.Collections.Specialized;
using System.Collections.Utility;

using ICSharpCode.Core.Properties;
using SharpDevelop.Internal.Parser;
using ICSharpCode.SharpDevelop.Services;
using ICSharpCode.Core.AddIns;
using ICSharpCode.Core.Services;
using ICSharpCode.SharpDevelop.Internal.Project;

namespace ICSharpCode.SharpDevelop.Gui.Pads
{
	/// <summary>
	/// This class reperesents the base class for all nodes in the
	/// class browser.
	/// </summary>
	public class AbstractClassScoutNode : TreeNode
	{
		protected string contextmenuAddinTreePath = String.Empty;
		static AmbienceService ambienceService = (AmbienceService)ServiceManager.Services.GetService(typeof(AmbienceService));
		static ClassBrowserIconsService classBrowserIconService = (ClassBrowserIconsService)ServiceManager.Services.GetService(typeof(ClassBrowserIconsService));
		
		/// <summary>
		/// Gets the add-in tree path for the context menu. 
		/// </summary>
		/// <remarks>
		/// I choosed to give back the add-in tree path instead of a popup menu 
		/// or a menuitem collection, because I don't want to add a magic library 
		/// or Windows.Forms dependency.
		/// </remarks>
		public virtual string ContextmenuAddinTreePath {
			get {
				return contextmenuAddinTreePath;
			}
			set {
				contextmenuAddinTreePath = value;
			}
		}
		
		public AbstractClassScoutNode(string name) : base(name)
		{
		}
		
		public void BeforeExpand()
		{
			BuildClassNode(this);
		}
		
		void BuildClassNode(TreeNode node)
		{
			
			IAmbience languageConversion= ambienceService.CurrentAmbience;
			languageConversion.ConversionFlags = ConversionFlags.None;
			
			ClassScoutTag classScoutTag = node.Tag as ClassScoutTag;
			if (classScoutTag == null) {
				return;
			}
			IClass c = classScoutTag.Tag as IClass;
			if (c == null) {
				return;
			}
			node.Nodes.Clear();
			
			
			AbstractClassScoutNode classNode = (AbstractClassScoutNode)node;
			
			// don't insert delegate 'members'
			if (c.ClassType == ClassType.Delegate) {
				return;
			}
			
			foreach (IClass innerClass in c.InnerClasses) {
				AbstractClassScoutNode newClassNode = new AbstractClassScoutNode(innerClass.Name);
				newClassNode.SelectedImageIndex = newClassNode.ImageIndex = classBrowserIconService.GetIcon(innerClass);
				newClassNode.ContextmenuAddinTreePath = "/SharpDevelop/Views/ClassScout/ContextMenu/ClassNode";
				newClassNode.Tag = new ClassScoutTag(innerClass.Region.BeginLine, innerClass.CompilationUnit.FileName, innerClass);
				classNode.Nodes.Add(newClassNode);
				BuildClassNode(newClassNode);
			}
			
			foreach (IMethod method in c.Methods) {
				TreeNode methodNode = new AbstractClassScoutNode(languageConversion.Convert(method));
				methodNode.Tag = new ClassScoutTag(method.Region.BeginLine, classScoutTag.FileName);
				methodNode.SelectedImageIndex = methodNode.ImageIndex = classBrowserIconService.GetIcon(method);
				classNode.Nodes.Add(methodNode);
			}
			
			foreach (IProperty property in c.Properties) {
				TreeNode propertyNode = new AbstractClassScoutNode(languageConversion.Convert(property));
				propertyNode.Tag = new ClassScoutTag(property.Region.BeginLine, classScoutTag.FileName);
				propertyNode.SelectedImageIndex = propertyNode.ImageIndex = classBrowserIconService.GetIcon(property);
				classNode.Nodes.Add(propertyNode);
			}
			
			foreach (IIndexer indexer in c.Indexer) {
				TreeNode indexerNode = new AbstractClassScoutNode(languageConversion.Convert(indexer));
				indexerNode.Tag = new ClassScoutTag(indexer.Region.BeginLine, classScoutTag.FileName);
				indexerNode.SelectedImageIndex = indexerNode.ImageIndex = classBrowserIconService.GetIcon(indexer);
				classNode.Nodes.Add(indexerNode);
			}
			
			foreach (IField field in c.Fields) {
				TreeNode fieldNode = new AbstractClassScoutNode(languageConversion.Convert(field));
				fieldNode.Tag = new ClassScoutTag(field.Region.BeginLine, classScoutTag.FileName);
				fieldNode.SelectedImageIndex = fieldNode.ImageIndex = classBrowserIconService.GetIcon(field);
				classNode.Nodes.Add(fieldNode);
			}
			
			foreach (IEvent e in c.Events) {
				TreeNode eventNode = new AbstractClassScoutNode(languageConversion.Convert(e));
				eventNode.Tag = new ClassScoutTag(e.Region.BeginLine, classScoutTag.FileName);
				eventNode.SelectedImageIndex = eventNode.ImageIndex = classBrowserIconService.GetIcon(e);
				classNode.Nodes.Add(eventNode);
			}
			
			SortUtility.QuickSort(classNode.Nodes, TreeNodeComparer.Default);
		}		
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -