public override bool DisplayCommand(EnvDTE.UIHierarchyItem item) { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; if (((System.Array)solExplorer.SelectedItems).Length != 1) { return(false); } UIHierarchyItem hierItem = ((UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0)); SolutionClass solution = hierItem.Object as SolutionClass; if (hierItem.Object is Project) { Project p = (Project)hierItem.Object; if (!(p.Object is Database)) { return(false); } Microsoft.DataWarehouse.VsIntegration.Shell.Project.Extensibility.ProjectExt projExt = (Microsoft.DataWarehouse.VsIntegration.Shell.Project.Extensibility.ProjectExt)p; return(projExt.Kind == BIDSProjectKinds.SSAS); } } catch { } return(false); }
private string determinePath(EnvDTE.UIHierarchyItem selectedItem) { List <UIHierarchyItem> filterList = new List <UIHierarchyItem>(); // The filter element does not have a path. // Try to determine the path from nested project files. bool oldExpandedVal = selectedItem.UIHierarchyItems.Expanded; selectedItem.UIHierarchyItems.Expanded = true; foreach (UIHierarchyItem item in selectedItem.UIHierarchyItems) { if (item.Object is EnvDTE.ProjectItem) { if (item.UIHierarchyItems != null && item.UIHierarchyItems.Count > 0) { //filter element filterList.Add(item); continue; } ProjectItem prjItem = item.Object as ProjectItem; Property prop = GetProperty(prjItem.Properties, "FullPath"); if (prop != null) { string res = Path.GetDirectoryName(prop.Value.ToString()); if (Directory.Exists(res)) { selectedItem.UIHierarchyItems.Expanded = oldExpandedVal; return(Path.GetDirectoryName(prop.Value.ToString())); } } } } // if not found, try to determine path from sub folders/filters foreach (UIHierarchyItem item in filterList) { string path = determinePath(item); if (path.Length > 0) { try { string res = path.Substring(0, path.Length - item.Name.Length - 1); if (res.EndsWith(selectedItem.Name) && Directory.Exists(res)) { selectedItem.UIHierarchyItems.Expanded = oldExpandedVal; return(res); } } catch (Exception) { } } } selectedItem.UIHierarchyItems.Expanded = oldExpandedVal; // not able to determine path return(""); }
private void printHierarchy(string prefix, EnvDTE.UIHierarchyItem item) { Debug.Write(prefix + item.Name + "\n"); bool oldval = item.UIHierarchyItems.Expanded; item.UIHierarchyItems.Expanded = true; foreach (EnvDTE.UIHierarchyItem child in item.UIHierarchyItems) { printHierarchy(prefix + " ", child); } item.UIHierarchyItems.Expanded = oldval; }
/// <summary> /// Selects project item in Solution Explorer /// </summary> /// <remarks></remarks> public static void SelectSolutionExplorerNode(this EnvDTE80.DTE2 dte2, string nodePath) { EnvDTE.UIHierarchyItem item = null; try { item = dte2.ToolWindows.SolutionExplorer.GetItem(nodePath); item.Select(vsUISelectionType.vsUISelectionTypeSelect); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
private string guessPath(EnvDTE.UIHierarchyItem selectedItem) { // try "..\..\..\filterName" DTE dte = (DTE)GetService(typeof(DTE)); dte = selectedItem.DTE; string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName); Debug.Write(solutionDir + "\n"); solutionDir += "..\\..\\..\\" + selectedItem.Name; string guessedPath = Path.GetFullPath(solutionDir + "..\\..\\..\\" + selectedItem.Name); Debug.Write(guessedPath + "\n"); if (Directory.Exists(guessedPath)) { Debug.Write("Guessed path found!\n"); return(guessedPath); } return(""); }
private void RefreshSelectedFolder(EnvDTE.UIHierarchyItem selectedItem, string dir) { List <string> pathList = new List <string>(); List <UIHierarchyItem> filterList = new List <UIHierarchyItem>(); string path = ""; //printHierarchy("", selectedItem); bool oldval = selectedItem.UIHierarchyItems.Expanded; selectedItem.UIHierarchyItems.Expanded = true; // Remove references which aren't exist foreach (UIHierarchyItem item in selectedItem.UIHierarchyItems) { if (!(item.Object is EnvDTE.ProjectItem)) { continue; } bool oldval2 = selectedItem.UIHierarchyItems.Expanded; selectedItem.UIHierarchyItems.Expanded = true; if (item.UIHierarchyItems != null && item.UIHierarchyItems.Count > 0) { filterList.Add(item); selectedItem.UIHierarchyItems.Expanded = oldval2; //filter element continue; } selectedItem.UIHierarchyItems.Expanded = oldval2; ProjectItem prjItem = item.Object as ProjectItem; Property prop = GetProperty(prjItem.Properties, "FullPath"); if (prop != null) { path = prop.Value.ToString(); if (!File.Exists(path)) { // remove prjItem if path does not exist try { prjItem.Remove(); } catch (Exception) { } } else { // else store in pathList pathList.Add(path); } } else { //empty filter filterList.Add(item); } } selectedItem.UIHierarchyItems.Expanded = oldval; // Add existing files which are not in pathList if (dir.Length > 0) { string[] fileEntries = Directory.GetFiles(dir); foreach (string fileName in fileEntries) { if (!pathList.Contains(fileName)) { ProjectItem filter = selectedItem.Object as EnvDTE.ProjectItem; if (filter != null && filter.ProjectItems != null) { try { filter.ProjectItems.AddFromFile(fileName); } catch (Exception) { } } } } } // Add existing directories which are not listed as filters if (dir.Length > 0) { string[] dirEntries = Directory.GetDirectories(dir); List <string> fl = new List <string>(); foreach (UIHierarchyItem item in filterList) { fl.Add(dir + "\\" + item.Name); } foreach (string dirName in dirEntries) { if (!fl.Contains(dirName)) { ProjectItem filter = selectedItem.Object as EnvDTE.ProjectItem; VCFilter vcFilter = (VCFilter)filter.Object; if (vcFilter != null) { addNewFilterRecursive(vcFilter, dirName, dir); } // add Debug.WriteLine(dirName); } } } // recursively update sub dirs/filters foreach (UIHierarchyItem item in filterList) { string newPath = dir + "\\" + item.Name; if (Directory.Exists(newPath)) { RefreshSelectedFolder(item, newPath); } } }