/// <summary> /// Creates a heirarchial data structure of the data elements from the file system's /// directory layout, later used to produce the displayed item /// </summary> /// <param name="files"></param> /// <returns></returns> private HashSet <DataTreeViewItem> CreateTreeViewItemStructure(HashSet <FileDeclaration> files) { HashSet <DataTreeViewItem> items = new HashSet <DataTreeViewItem>(); foreach (FileDeclaration d in files) { string path = Files.PathRelativeTo(d.Info.FullName, Files.MacroDirectory); string[] fileitems = path.Split(Path.DirectorySeparatorChar).Where <string>(x => !String.IsNullOrEmpty(x)).ToArray <string>(); System.Diagnostics.Debug.WriteLine(fileitems.Count() + " " + path); if (fileitems.Any()) { DataTreeViewItem root = items.FirstOrDefault(x => x.name.Equals(fileitems[0]) && x.level.Equals(1)); if (root == null) { root = new DataTreeViewItem() { level = 1, name = fileitems[0], decl = d, root = "/", folder = !Path.HasExtension(fileitems[0]), children = new List <DataTreeViewItem>() }; items.Add(root); } if (fileitems.Length > 1) { DataTreeViewItem parent = root; int lev = 2; for (int i = 1; i < fileitems.Length; i++) { DataTreeViewItem child = parent.children.FirstOrDefault(x => x.name.Equals(fileitems[i]) && x.level.Equals(lev)); if (child == null) { child = new DataTreeViewItem() { level = lev, name = fileitems[i], decl = d, root = parent.root + "/" + parent.name, folder = !Path.HasExtension(fileitems[i]), children = new List <DataTreeViewItem>() }; parent.children.Add(child); } parent = child; lev++; } } } } return(items); }
/// <summary> /// Creates an item from a data source and adds it to its parent /// </summary> /// <param name="parent">The parent of the item</param> /// <param name="data">The data of the macro, for the tree view item</param> /// <returns></returns> private DisplayableTreeViewItem CreateTreeViewItem(DisplayableTreeViewItem parent, DataTreeViewItem data) { DisplayableTreeViewItem item = new DisplayableTreeViewItem(); item.Header = data.name; item.IsFolder = data.folder; item.IsExpanded = false; item.Parent = parent; if (data.children != null) { foreach (DataTreeViewItem child in data.children) { DisplayableTreeViewItem node = CreateTreeViewItem(item, child); if (node != null) { item.Items.Add(node); } } } if (!data.folder) { item.Declaration = data.decl; item.SelectedEvent += delegate(object sender, RoutedEventArgs args) { SelectedItem = item; }; item.DoubleClickEvent += delegate(object sender, MouseButtonEventArgs args) { OpenMacro(data.decl); args.Handled = true; }; } item.Root = data.root; item.RightClickEvent += TreeViewItem_OnPreviewMouseRightButtonDown; return(item); }