/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Apache License, Version 2.0. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Apache License, Version 2.0, please send an email to * vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound * by the terms of the Apache License, Version 2.0. * * You must not remove this notice, or any other, from this software. * * ***************************************************************************/ using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using System.Text; using Microsoft.VisualStudio; using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID; using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID; namespace Microsoft.VisualStudio.Project { /// /// Defines the logic for all dependent file nodes (solution explorer icon, commands etc.) /// public class DependentFileNode : FileNode { #region fields /// /// Defines if the node has a name relation to its parent node /// e.g. Form1.ext and Form1.resx are name related (until first occurence of extention separator) /// #endregion #region Properties public override int ImageIndex { get { return (this.CanShowDefaultIcon() ? (int)ProjectNode.ImageName.DependentFile : (int)ProjectNode.ImageName.MissingFile); } } #endregion #region ctor /// /// Constructor for the DependentFileNode /// /// Root of the hierarchy /// Associated project element public DependentFileNode(ProjectNode root, MsBuildProjectElement element) : base(root, element) { this.HasParentNodeNameRelation = false; } #endregion #region overridden methods /// /// Disable rename /// /// new label /// E_NOTIMPLE in order to tell the call that we do not support rename public override string GetEditLabel() { throw new NotImplementedException(); } /// /// Gets a handle to the icon that should be set for this node /// /// Whether the folder is open, ignored here. /// Handle to icon for the node public override object GetIconHandle(bool open) { return this.ProjectMgr.ImageHandler.GetIconHandle(this.ImageIndex); } /// /// Disable certain commands for dependent file nodes /// public override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText, ref QueryStatusResult result) { if(cmdGroup == VsMenus.guidStandardCommandSet97) { switch((VsCommands)cmd) { case VsCommands.Copy: case VsCommands.Paste: case VsCommands.Cut: case VsCommands.Rename: result |= QueryStatusResult.NOTSUPPORTED; return VSConstants.S_OK; case VsCommands.ViewCode: case VsCommands.Open: case VsCommands.OpenWith: result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED; return VSConstants.S_OK; } } else if(cmdGroup == VsMenus.guidStandardCommandSet2K) { if((VsCommands2K)cmd == VsCommands2K.EXCLUDEFROMPROJECT) { result |= QueryStatusResult.NOTSUPPORTED; return VSConstants.S_OK; } } else { return (int)OleConstants.OLECMDERR_E_UNKNOWNGROUP; } return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result); } /// /// DependentFileNodes node cannot be dragged. /// /// null public override string PrepareSelectedNodesForClipBoard() { return null; } protected override NodeProperties CreatePropertiesObject() { return new DependentFileNodeProperties(this); } /// /// Redraws the state icon if the node is not excluded from source control. /// [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")] public override void UpdateSccStateIcons() { if(!this.ExcludeNodeFromScc) { ProjectMgr.ReDrawNode(this.Parent, UIHierarchyElement.SccState); } } #endregion } }