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

📄 projectitem.cs

📁 SharpDevelop2.0.0 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>$Revision: 1393 $</version>
// </file>

using System;
using System.IO;
using System.ComponentModel;
using System.Collections.Generic;
using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;

namespace ICSharpCode.SharpDevelop.Project
{
	public enum ItemType {
		Unknown,
		
		// ReferenceProjectItem
		Reference,
		ProjectReference,
		COMReference,
		
		Import,
		
		WebReferenceUrl,
		
		// FileProjectItem
		Compile,
		EmbeddedResource,
		Resource,
		None,
		Content,
		Folder,
		WebReferences,
		
		ApplicationDefinition,
		Page,
		
		BootstrapperFile
	}
	
	public abstract class ProjectItem : LocalizedObject, IDisposable, ICloneable
	{
		string        include;
		PropertyGroup properties = new PropertyGroup();
		IProject      project    = null;
		
		[Browsable(false)]
		public abstract ItemType ItemType {
			get;
		}
		
		[Browsable(false)]
		public IProject Project {
			get {
				return project;
			}
			set {
				project = value;
				fileNameCache = null;
			}
		}
		
		[Browsable(false)]
		public string Include {
			get {
				return include;
			}
			set {
				include = value;
				fileNameCache = null;
			}
		}
		
		public virtual void CopyExtraPropertiesTo(ProjectItem item)
		{
			string newInclude = item.Include;
			item.Properties.Merge(this.Properties);
			item.Include = newInclude;
		}
		
		public virtual ProjectItem Clone()
		{
			// TODO: Make me abstract in SD 2.1
			throw new NotSupportedException();
		}
		
		object ICloneable.Clone()
		{
			return this.Clone();
		}
		
		[Browsable(false)]
		public PropertyGroup Properties {
			get {
				return properties;
			}
		}
		
		string fileNameCache;
		
		[Browsable(false)]
		public virtual string FileName {
			get {
				if (project == null)
					return Include;
				if (fileNameCache == null)
					fileNameCache = Path.Combine(project.Directory, include);
				return fileNameCache;
			}
			set {
				fileNameCache = null;
				Include = FileUtility.GetRelativePath(project.Directory, value);
			}
		}
		
		[Browsable(false)]
		public virtual string Tag {
			get {
				return ItemType.ToString();
			}
		}
		
		public ProjectItem(IProject project)
		{
			this.project = project;
		}
		
		#region System.IDisposable interface implementation
		public virtual void Dispose()
		{
		}
		#endregion
		public override string ToString()
		{
			return String.Format("[ProjectItem: ItemType={0}, Include={1}, Properties={2}]",
			                     ItemType,
			                     Include,
			                     Properties);
		}
		
		public static ProjectItem ReadItem(XmlReader reader, IProject project, string itemType)
		{
			ProjectItem newItem = project != null ? project.CreateProjectItem(itemType) : ProjectItemFactory.CreateProjectItem(project, itemType);
			newItem.Include  = reader.GetAttribute("Include");
			if (!reader.IsEmptyElement) {
				PropertyGroup.ReadProperties(reader, newItem.Properties, itemType);
			}
			return newItem;
		}
		
		
		internal void WriteItem(XmlWriter writer)
		{
			writer.WriteStartElement(Tag);
			writer.WriteAttributeString("Include", Include);
			Properties.WriteProperties(writer);
			writer.WriteEndElement();
		}
		
		internal static void ReadItemGroup(XmlTextReader reader, IProject project, List<ProjectItem> items)
		{
			if (reader.IsEmptyElement) {
				return;
			}
			while (reader.Read()) {
				switch (reader.NodeType) {
					case XmlNodeType.EndElement:
						if (reader.LocalName == "ItemGroup") {
							return;
						}
						break;
					case XmlNodeType.Element:
						items.Add(ReadItem(reader, project, reader.LocalName));
						break;
				}
			}
		}
		
		internal static void WriteItemGroup(XmlWriter writer, List<ProjectItem> items)
		{
			writer.WriteStartElement("ItemGroup");
			foreach (ProjectItem item in items) {
				item.WriteItem(writer);
			}
			writer.WriteEndElement();
		}
		
		public override void InformSetValue(LocalizedPropertyDescriptor localizedPropertyDescriptor, object component, object value)
		{
			Project.Save();
		}
	}
}

⌨️ 快捷键说明

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