/// <summary> /// Open a file depending on the SubType property associated with the file item in the project file /// </summary> protected override void DoDefaultAction() { var manager = (FileDocumentManager)this.GetDocumentManager(); Debug.Assert(manager != null, "Could not get the FileDocumentManager"); Guid viewGuid; string projectItemType = XSharpFileType.GetItemType(this.FileName); if (HasDesigner) { viewGuid = VSConstants.LOGVIEWID.Designer_guid; } else if (projectItemType == ProjectFileConstants.Compile) { viewGuid = VSConstants.LOGVIEWID.Code_guid; } else if (projectItemType == XSharpProjectFileConstants.NativeResource) { viewGuid = VSConstants.LOGVIEWID.Code_guid; } else { viewGuid = VSConstants.LOGVIEWID.Primary_guid; } IVsWindowFrame frame; manager.Open(false, false, viewGuid, out frame, WindowFrameShowAction.Show); }
public void UpdateHasDesigner() { HasDesigner = XSharpFileType.HasDesigner(this.Url, SubType); }
/// <summary> /// Excludes the file and folder items from their corresponding maps if they are part of the build. /// </summary> /// <param name="project">The project to modify.</param> /// <param name="fileList">List containing relative files paths.</param> /// <param name="folderList">List containing relative folder paths.</param> private static void ExcludeProjectBuildItems(XProjectNode project, IList <string> fileList, IList <string> folderList) { var projectItems = project.BuildProject.Items; if (projectItems == null) { return; // do nothing, just ignore it. } else if (fileList == null && folderList == null) { throw new ArgumentNullException("folderList"); } // we need these maps because we need to have both lowercase and actual case path information. // we use lower case paths for case-insesitive search of file entries and actual paths for // creating hierarchy node. if we don't do that, we will end up with duplicate nodes when the // case of path in .vnproj file doesn't match with the actual file path on the disk. IDictionary <string, string> folderMap = null; IDictionary <string, string> fileMap = null; if (folderList != null) { folderMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (string folder in folderList) { folderMap.Add(folder, folder); } } if (fileList != null) { fileMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (string file in fileList) { fileMap.Add(file, file); } } foreach (var buildItem in projectItems) { if (folderMap != null && folderMap.Count > 0 && String.Equals(buildItem.ItemType, ProjectFileConstants.Folder, StringComparison.OrdinalIgnoreCase)) { string relativePath = buildItem.EvaluatedInclude; if (Path.IsPathRooted(relativePath)) // if not the relative path, make it relative { relativePath = XHelperMethods.GetRelativePath(project.ProjectFolder, relativePath); } if (folderMap.ContainsKey(relativePath)) { folderList.Remove(folderMap[relativePath]); // remove it from the actual list. folderMap.Remove(relativePath); } } else if (fileMap != null && fileMap.Count > 0 && XSharpFileType.IsProjectItemType(buildItem)) { string relativePath = buildItem.EvaluatedInclude; if (Path.IsPathRooted(relativePath)) // if not the relative path, make it relative { relativePath = XHelperMethods.GetRelativePath(project.ProjectFolder, relativePath); } if (fileMap.ContainsKey(relativePath)) { fileList.Remove(fileMap[relativePath]); // remove it from the actual list. fileMap.Remove(relativePath); } } } }