Index: experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/NodeProperties.cs |
diff --git a/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/NodeProperties.cs b/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/NodeProperties.cs |
deleted file mode 100644 |
index 5815a39648f1ed78f8cb4f0ca4c444734f232871..0000000000000000000000000000000000000000 |
--- a/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/NodeProperties.cs |
+++ /dev/null |
@@ -1,792 +0,0 @@ |
-/// Copyright (c) Microsoft Corporation. All rights reserved. |
- |
-using System; |
-using System.ComponentModel; |
-using System.Diagnostics; |
-using System.Diagnostics.CodeAnalysis; |
-using System.Globalization; |
-using System.IO; |
-using System.Runtime.InteropServices; |
-using Microsoft.VisualStudio; |
-using Microsoft.VisualStudio.OLE.Interop; |
-using Microsoft.VisualStudio.Shell; |
-using Microsoft.VisualStudio.Shell.Interop; |
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider; |
- |
-namespace Microsoft.VisualStudio.Project |
-{ |
- |
- /// <summary> |
- /// All public properties on Nodeproperties or derived classes are assumed to be used by Automation by default. |
- /// Set this attribute to false on Properties that should not be visible for Automation. |
- /// </summary> |
- [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] |
- public sealed class AutomationBrowsableAttribute : System.Attribute |
- { |
- public AutomationBrowsableAttribute(bool browsable) |
- { |
- this.browsable = browsable; |
- } |
- |
- public bool Browsable |
- { |
- get |
- { |
- return this.browsable; |
- } |
- } |
- |
- private bool browsable; |
- } |
- |
- /// <summary> |
- /// To create your own localizable node properties, subclass this and add public properties |
- /// decorated with your own localized display name, category and description attributes. |
- /// </summary> |
- [CLSCompliant(false), ComVisible(true)] |
- public class NodeProperties : LocalizableProperties, |
- ISpecifyPropertyPages, |
- IVsGetCfgProvider, |
- IVsSpecifyProjectDesignerPages, |
- EnvDTE80.IInternalExtenderProvider, |
- IVsBrowseObject |
- { |
- #region fields |
- private HierarchyNode node; |
- #endregion |
- |
- #region properties |
- [Browsable(false)] |
- [AutomationBrowsable(false)] |
- public HierarchyNode Node |
- { |
- get { return this.node; } |
- } |
- |
- /// <summary> |
- /// Used by Property Pages Frame to set it's title bar. The Caption of the Hierarchy Node is returned. |
- /// </summary> |
- [Browsable(false)] |
- [AutomationBrowsable(false)] |
- public virtual string Name |
- { |
- get { return this.node.Caption; } |
- } |
- |
- #endregion |
- |
- #region ctors |
- public NodeProperties(HierarchyNode node) |
- { |
- if(node == null) |
- { |
- throw new ArgumentNullException("node"); |
- } |
- this.node = node; |
- } |
- #endregion |
- |
- #region ISpecifyPropertyPages methods |
- public virtual void GetPages(CAUUID[] pages) |
- { |
- this.GetCommonPropertyPages(pages); |
- } |
- #endregion |
- |
- #region IVsSpecifyProjectDesignerPages |
- /// <summary> |
- /// Implementation of the IVsSpecifyProjectDesignerPages. It will retun the pages that are configuration independent. |
- /// </summary> |
- /// <param name="pages">The pages to return.</param> |
- /// <returns></returns> |
- public virtual int GetProjectDesignerPages(CAUUID[] pages) |
- { |
- this.GetCommonPropertyPages(pages); |
- return VSConstants.S_OK; |
- } |
- #endregion |
- |
- #region IVsGetCfgProvider methods |
- public virtual int GetCfgProvider(out IVsCfgProvider p) |
- { |
- p = null; |
- return VSConstants.E_NOTIMPL; |
- } |
- #endregion |
- |
- #region IVsBrowseObject methods |
- /// <summary> |
- /// Maps back to the hierarchy or project item object corresponding to the browse object. |
- /// </summary> |
- /// <param name="hier">Reference to the hierarchy object.</param> |
- /// <param name="itemid">Reference to the project item.</param> |
- /// <returns>If the method succeeds, it returns S_OK. If it fails, it returns an error code. </returns> |
- public virtual int GetProjectItem(out IVsHierarchy hier, out uint itemid) |
- { |
- if(this.node == null) |
- { |
- throw new InvalidOperationException(); |
- } |
- hier = HierarchyNode.GetOuterHierarchy(this.node.ProjectMgr); |
- itemid = this.node.ID; |
- return VSConstants.S_OK; |
- } |
- #endregion |
- |
- #region overridden methods |
- /// <summary> |
- /// Get the Caption of the Hierarchy Node instance. If Caption is null or empty we delegate to base |
- /// </summary> |
- /// <returns>Caption of Hierarchy node instance</returns> |
- public override string GetComponentName() |
- { |
- string caption = this.Node.Caption; |
- if(string.IsNullOrEmpty(caption)) |
- { |
- return base.GetComponentName(); |
- } |
- else |
- { |
- return caption; |
- } |
- } |
- #endregion |
- |
- #region helper methods |
- protected string GetProperty(string name, string def) |
- { |
- string a = this.Node.ItemNode.GetMetadata(name); |
- return (a == null) ? def : a; |
- } |
- |
- protected void SetProperty(string name, string value) |
- { |
- this.Node.ItemNode.SetMetadata(name, value); |
- } |
- |
- /// <summary> |
- /// Retrieves the common property pages. The NodeProperties is the BrowseObject and that will be called to support |
- /// configuration independent properties. |
- /// </summary> |
- /// <param name="pages">The pages to return.</param> |
- private void GetCommonPropertyPages(CAUUID[] pages) |
- { |
- // We do not check whether the supportsProjectDesigner is set to false on the ProjectNode. |
- // We rely that the caller knows what to call on us. |
- if(pages == null) |
- { |
- throw new ArgumentNullException("pages"); |
- } |
- |
- if(pages.Length == 0) |
- { |
- throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "pages"); |
- } |
- |
- // Only the project should show the property page the rest should show the project properties. |
- if(this.node != null && (this.node is ProjectNode)) |
- { |
- // Retrieve the list of guids from hierarchy properties. |
- // Because a flavor could modify that list we must make sure we are calling the outer most implementation of IVsHierarchy |
- string guidsList = String.Empty; |
- IVsHierarchy hierarchy = HierarchyNode.GetOuterHierarchy(this.Node.ProjectMgr); |
- object variant = null; |
- ErrorHandler.ThrowOnFailure(hierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList, out variant)); |
- guidsList = (string)variant; |
- |
- Guid[] guids = Utilities.GuidsArrayFromSemicolonDelimitedStringOfGuids(guidsList); |
- if(guids == null || guids.Length == 0) |
- { |
- pages[0] = new CAUUID(); |
- pages[0].cElems = 0; |
- } |
- else |
- { |
- pages[0] = PackageUtilities.CreateCAUUIDFromGuidArray(guids); |
- } |
- } |
- else |
- { |
- pages[0] = new CAUUID(); |
- pages[0].cElems = 0; |
- } |
- } |
- #endregion |
- |
- #region IInternalExtenderProvider Members |
- |
- bool EnvDTE80.IInternalExtenderProvider.CanExtend(string extenderCATID, string extenderName, object extendeeObject) |
- { |
- EnvDTE80.IInternalExtenderProvider outerHierarchy = HierarchyNode.GetOuterHierarchy(this.Node) as EnvDTE80.IInternalExtenderProvider; |
- |
- |
- if(outerHierarchy != null) |
- { |
- return outerHierarchy.CanExtend(extenderCATID, extenderName, extendeeObject); |
- } |
- return false; |
- } |
- |
- object EnvDTE80.IInternalExtenderProvider.GetExtender(string extenderCATID, string extenderName, object extendeeObject, EnvDTE.IExtenderSite extenderSite, int cookie) |
- { |
- EnvDTE80.IInternalExtenderProvider outerHierarchy = HierarchyNode.GetOuterHierarchy(this.Node) as EnvDTE80.IInternalExtenderProvider; |
- |
- if(outerHierarchy != null) |
- { |
- return outerHierarchy.GetExtender(extenderCATID, extenderName, extendeeObject, extenderSite, cookie); |
- } |
- |
- return null; |
- } |
- |
- object EnvDTE80.IInternalExtenderProvider.GetExtenderNames(string extenderCATID, object extendeeObject) |
- { |
- EnvDTE80.IInternalExtenderProvider outerHierarchy = HierarchyNode.GetOuterHierarchy(this.Node) as EnvDTE80.IInternalExtenderProvider; |
- |
- if(outerHierarchy != null) |
- { |
- return outerHierarchy.GetExtenderNames(extenderCATID, extendeeObject); |
- } |
- |
- return null; |
- } |
- |
- #endregion |
- |
- #region ExtenderSupport |
- [Browsable(false)] |
- [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CATID")] |
- public virtual string ExtenderCATID |
- { |
- get |
- { |
- Guid catid = this.Node.ProjectMgr.GetCATIDForType(this.GetType()); |
- if(Guid.Empty.CompareTo(catid) == 0) |
- { |
- return null; |
- } |
- return catid.ToString("B"); |
- } |
- } |
- |
- [Browsable(false)] |
- public object ExtenderNames() |
- { |
- EnvDTE.ObjectExtenders extenderService = (EnvDTE.ObjectExtenders)this.Node.GetService(typeof(EnvDTE.ObjectExtenders)); |
- Debug.Assert(extenderService != null, "Could not get the ObjectExtenders object from the services exposed by this property object"); |
- if(extenderService == null) |
- { |
- throw new InvalidOperationException(); |
- } |
- return extenderService.GetExtenderNames(this.ExtenderCATID, this); |
- } |
- |
- public object Extender(string extenderName) |
- { |
- EnvDTE.ObjectExtenders extenderService = (EnvDTE.ObjectExtenders)this.Node.GetService(typeof(EnvDTE.ObjectExtenders)); |
- Debug.Assert(extenderService != null, "Could not get the ObjectExtenders object from the services exposed by this property object"); |
- if(extenderService == null) |
- { |
- throw new InvalidOperationException(); |
- } |
- return extenderService.GetExtender(this.ExtenderCATID, extenderName, this); |
- } |
- |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class FileNodeProperties : NodeProperties |
- { |
- #region properties |
- [SRCategoryAttribute(SR.Advanced)] |
- [LocDisplayName(SR.BuildAction)] |
- [SRDescriptionAttribute(SR.BuildActionDescription)] |
- public virtual BuildAction BuildAction |
- { |
- get |
- { |
- string value = this.Node.ItemNode.ItemName; |
- if(value == null || value.Length == 0) |
- { |
- return BuildAction.None; |
- } |
- return (BuildAction)Enum.Parse(typeof(BuildAction), value); |
- } |
- set |
- { |
- this.Node.ItemNode.ItemName = value.ToString(); |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FileName)] |
- [SRDescriptionAttribute(SR.FileNameDescription)] |
- public string FileName |
- { |
- get |
- { |
- return this.Node.Caption; |
- } |
- set |
- { |
- this.Node.SetEditLabel(value); |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FullPath)] |
- [SRDescriptionAttribute(SR.FullPathDescription)] |
- public string FullPath |
- { |
- get |
- { |
- return this.Node.Url; |
- } |
- } |
- |
- #region non-browsable properties - used for automation only |
- [Browsable(false)] |
- public string Extension |
- { |
- get |
- { |
- return Path.GetExtension(this.Node.Caption); |
- } |
- } |
- #endregion |
- |
- #endregion |
- |
- #region ctors |
- public FileNodeProperties(HierarchyNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- |
- #region overridden methods |
- public override string GetClassName() |
- { |
- return SR.GetString(SR.FileProperties, CultureInfo.CurrentUICulture); |
- } |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class DependentFileNodeProperties : NodeProperties |
- { |
- #region properties |
- [SRCategoryAttribute(SR.Advanced)] |
- [LocDisplayName(SR.BuildAction)] |
- [SRDescriptionAttribute(SR.BuildActionDescription)] |
- public virtual BuildAction BuildAction |
- { |
- get |
- { |
- string value = this.Node.ItemNode.ItemName; |
- if(value == null || value.Length == 0) |
- { |
- return BuildAction.None; |
- } |
- return (BuildAction)Enum.Parse(typeof(BuildAction), value); |
- } |
- set |
- { |
- this.Node.ItemNode.ItemName = value.ToString(); |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FileName)] |
- [SRDescriptionAttribute(SR.FileNameDescription)] |
- public virtual string FileName |
- { |
- get |
- { |
- return this.Node.Caption; |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FullPath)] |
- [SRDescriptionAttribute(SR.FullPathDescription)] |
- public string FullPath |
- { |
- get |
- { |
- return this.Node.Url; |
- } |
- } |
- #endregion |
- |
- #region ctors |
- public DependentFileNodeProperties(HierarchyNode node) |
- : base(node) |
- { |
- } |
- |
- #endregion |
- |
- #region overridden methods |
- public override string GetClassName() |
- { |
- return SR.GetString(SR.FileProperties, CultureInfo.CurrentUICulture); |
- } |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class SingleFileGeneratorNodeProperties : FileNodeProperties |
- { |
- #region fields |
- private EventHandler<HierarchyNodeEventArgs> onCustomToolChanged; |
- private EventHandler<HierarchyNodeEventArgs> onCustomToolNameSpaceChanged; |
- private string _customTool = ""; |
- private string _customToolNamespace = ""; |
- #endregion |
- |
- #region custom tool events |
- internal event EventHandler<HierarchyNodeEventArgs> OnCustomToolChanged |
- { |
- add { onCustomToolChanged += value; } |
- remove { onCustomToolChanged -= value; } |
- } |
- |
- internal event EventHandler<HierarchyNodeEventArgs> OnCustomToolNameSpaceChanged |
- { |
- add { onCustomToolNameSpaceChanged += value; } |
- remove { onCustomToolNameSpaceChanged -= value; } |
- } |
- |
- #endregion |
- |
- #region properties |
- [SRCategoryAttribute(SR.Advanced)] |
- [LocDisplayName(SR.CustomTool)] |
- [SRDescriptionAttribute(SR.CustomToolDescription)] |
- public virtual string CustomTool |
- { |
- get |
- { |
- _customTool = this.Node.ItemNode.GetMetadata(ProjectFileConstants.Generator); |
- return _customTool; |
- } |
- set |
- { |
- _customTool = value; |
- if(!string.IsNullOrEmpty(_customTool)) |
- { |
- this.Node.ItemNode.SetMetadata(ProjectFileConstants.Generator, _customTool); |
- HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(this.Node); |
- if(onCustomToolChanged != null) |
- { |
- onCustomToolChanged(this.Node, args); |
- } |
- } |
- } |
- } |
- |
- [SRCategoryAttribute(VisualStudio.Project.SR.Advanced)] |
- [LocDisplayName(SR.CustomToolNamespace)] |
- [SRDescriptionAttribute(SR.CustomToolNamespaceDescription)] |
- public virtual string CustomToolNamespace |
- { |
- get |
- { |
- _customToolNamespace = this.Node.ItemNode.GetMetadata(ProjectFileConstants.CustomToolNamespace); |
- return _customToolNamespace; |
- } |
- set |
- { |
- _customToolNamespace = value; |
- if(!string.IsNullOrEmpty(_customToolNamespace)) |
- { |
- this.Node.ItemNode.SetMetadata(ProjectFileConstants.CustomToolNamespace, _customToolNamespace); |
- HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(this.Node); |
- if(onCustomToolNameSpaceChanged != null) |
- { |
- onCustomToolNameSpaceChanged(this.Node, args); |
- } |
- } |
- } |
- } |
- #endregion |
- |
- #region ctors |
- public SingleFileGeneratorNodeProperties(HierarchyNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class ProjectNodeProperties : NodeProperties |
- { |
- #region properties |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.ProjectFolder)] |
- [SRDescriptionAttribute(SR.ProjectFolderDescription)] |
- [AutomationBrowsable(false)] |
- public string ProjectFolder |
- { |
- get |
- { |
- return this.Node.ProjectMgr.ProjectFolder; |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.ProjectFile)] |
- [SRDescriptionAttribute(SR.ProjectFileDescription)] |
- [AutomationBrowsable(false)] |
- public string ProjectFile |
- { |
- get |
- { |
- return this.Node.ProjectMgr.ProjectFile; |
- } |
- set |
- { |
- this.Node.ProjectMgr.ProjectFile = value; |
- } |
- } |
- |
- #region non-browsable properties - used for automation only |
- [Browsable(false)] |
- public string FileName |
- { |
- get |
- { |
- return this.Node.ProjectMgr.ProjectFile; |
- } |
- set |
- { |
- this.Node.ProjectMgr.ProjectFile = value; |
- } |
- } |
- |
- |
- [Browsable(false)] |
- public string FullPath |
- { |
- get |
- { |
- string fullPath = this.Node.ProjectMgr.ProjectFolder; |
- if(!fullPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) |
- { |
- return fullPath + Path.DirectorySeparatorChar; |
- } |
- else |
- { |
- return fullPath; |
- } |
- } |
- } |
- #endregion |
- |
- #endregion |
- |
- #region ctors |
- public ProjectNodeProperties(ProjectNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- |
- #region overridden methods |
- public override string GetClassName() |
- { |
- return SR.GetString(SR.ProjectProperties, CultureInfo.CurrentUICulture); |
- } |
- |
- /// <summary> |
- /// ICustomTypeDescriptor.GetEditor |
- /// To enable the "Property Pages" button on the properties browser |
- /// the browse object (project properties) need to be unmanaged |
- /// or it needs to provide an editor of type ComponentEditor. |
- /// </summary> |
- /// <param name="editorBaseType">Type of the editor</param> |
- /// <returns>Editor</returns> |
- public override object GetEditor(Type editorBaseType) |
- { |
- // Override the scenario where we are asked for a ComponentEditor |
- // as this is how the Properties Browser calls us |
- if(editorBaseType == typeof(ComponentEditor)) |
- { |
- IOleServiceProvider sp; |
- ErrorHandler.ThrowOnFailure(this.Node.GetSite(out sp)); |
- return new PropertiesEditorLauncher(new ServiceProvider(sp)); |
- } |
- |
- return base.GetEditor(editorBaseType); |
- } |
- |
- public override int GetCfgProvider(out IVsCfgProvider p) |
- { |
- if(this.Node != null && this.Node.ProjectMgr != null) |
- { |
- return this.Node.ProjectMgr.GetCfgProvider(out p); |
- } |
- |
- return base.GetCfgProvider(out p); |
- } |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class FolderNodeProperties : NodeProperties |
- { |
- #region properties |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FolderName)] |
- [SRDescriptionAttribute(SR.FolderNameDescription)] |
- [AutomationBrowsable(false)] |
- public string FolderName |
- { |
- get |
- { |
- return this.Node.Caption; |
- } |
- set |
- { |
- this.Node.SetEditLabel(value); |
- this.Node.ReDraw(UIHierarchyElement.Caption); |
- } |
- } |
- |
- #region properties - used for automation only |
- [Browsable(false)] |
- [AutomationBrowsable(true)] |
- public string FileName |
- { |
- get |
- { |
- return this.Node.Caption; |
- } |
- set |
- { |
- this.Node.SetEditLabel(value); |
- } |
- } |
- |
- [Browsable(false)] |
- [AutomationBrowsable(true)] |
- public string FullPath |
- { |
- get |
- { |
- string fullPath = this.Node.GetMkDocument(); |
- if(!fullPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) |
- { |
- return fullPath + Path.DirectorySeparatorChar; |
- } |
- else |
- { |
- return fullPath; |
- } |
- } |
- } |
- #endregion |
- |
- #endregion |
- |
- #region ctors |
- public FolderNodeProperties(HierarchyNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- |
- #region overridden methods |
- public override string GetClassName() |
- { |
- return SR.GetString(SR.FolderProperties, CultureInfo.CurrentUICulture); |
- } |
- #endregion |
- } |
- |
- [CLSCompliant(false), ComVisible(true)] |
- public class ReferenceNodeProperties : NodeProperties |
- { |
- #region properties |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.RefName)] |
- [SRDescriptionAttribute(SR.RefNameDescription)] |
- [Browsable(true)] |
- [AutomationBrowsable(true)] |
- public override string Name |
- { |
- get |
- { |
- return this.Node.Caption; |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.CopyToLocal)] |
- [SRDescriptionAttribute(SR.CopyToLocalDescription)] |
- public bool CopyToLocal |
- { |
- get |
- { |
- string copyLocal = this.GetProperty(ProjectFileConstants.Private, "False"); |
- if(copyLocal == null || copyLocal.Length == 0) |
- return true; |
- return bool.Parse(copyLocal); |
- } |
- set |
- { |
- this.SetProperty(ProjectFileConstants.Private, value.ToString()); |
- } |
- } |
- |
- [SRCategoryAttribute(SR.Misc)] |
- [LocDisplayName(SR.FullPath)] |
- [SRDescriptionAttribute(SR.FullPathDescription)] |
- public virtual string FullPath |
- { |
- get |
- { |
- return this.Node.Url; |
- } |
- } |
- #endregion |
- |
- #region ctors |
- public ReferenceNodeProperties(HierarchyNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- |
- #region overridden methods |
- public override string GetClassName() |
- { |
- return SR.GetString(SR.ReferenceProperties, CultureInfo.CurrentUICulture); |
- } |
- #endregion |
- } |
- |
- [ComVisible(true)] |
- public class ProjectReferencesProperties : ReferenceNodeProperties |
- { |
- #region ctors |
- public ProjectReferencesProperties(ProjectReferenceNode node) |
- : base(node) |
- { |
- } |
- #endregion |
- |
- #region overriden methods |
- public override string FullPath |
- { |
- get |
- { |
- return ((ProjectReferenceNode)Node).ReferencedProjectOutputPath; |
- } |
- } |
- #endregion |
- } |
-} |