Пример #1
0
        // Expand/multiselect node if the path is found under it.
        private bool SearchAndSelectPath(TreeViewNode node, string path)
        {
            if (node is DirectoryTreeViewNode)
            {
                DirectoryTreeViewNode directory = node as DirectoryTreeViewNode;

                if (path.StartsWith(directory.FullPath + "/"))
                {
                    foreach (TreeViewNode child in directory.Children)
                    {
                        bool found = SearchAndSelectPath(child, path);

                        if (found)
                        {
                            directory.IsExpanded = true;
                            return(true);
                        }
                    }
                }
            }
            else if (node is SongMetadataTreeViewNode)
            {
                SongMetadataTreeViewNode song = node as SongMetadataTreeViewNode;

                if (song.Song.Path == path)
                {
                    song.IsMultiSelected = true;
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        private void PopulateDirectoryTree()
        {
            DirectoryTreeController.ClearMultiSelection();
            DirectoryTree.Clear();

            DirectoryTreeViewNode rootNode = new DirectoryTreeViewNode("/", null, DirectoryTreeController);
            IDictionary <string, TreeViewNode> directoryLookup = new SortedDictionary <string, TreeViewNode>();

            directoryLookup[rootNode.DisplayString] = rootNode;

            foreach (SongMetadata song in m_DataModel.Database.Songs)
            {
                TreeViewNode             parent = FindDirectoryNode(song.Directory, directoryLookup, rootNode);
                SongMetadataTreeViewNode leaf   = new SongMetadataTreeViewNode(song.Filename, song, parent, DirectoryTreeController);
                parent.AddChild(leaf);
            }

            AssignTreeViewNodeIDs(rootNode, 0);

            if (rootNode.Children.Count > 0)
            {
                DirectoryTree.Add(rootNode);
                rootNode.IsExpanded = true;
            }
        }
Пример #3
0
 private TreeViewNode FindDirectoryNode(string path, IDictionary <string, TreeViewNode> lookup, TreeViewNode rootNode)
 {
     if (path == "")
     {
         return(rootNode);
     }
     else if (lookup.ContainsKey(path))
     {
         return(lookup[path]);
     }
     else
     {
         Tuple <string, string> parentAndSelf = Utils.SplitPath(path);
         TreeViewNode           parent        = FindDirectoryNode(parentAndSelf.Item1, lookup, rootNode);
         TreeViewNode           self          = new DirectoryTreeViewNode(parentAndSelf.Item2, parent, DirectoryTreeController);
         parent.AddChild(self);
         lookup[path] = self;
         return(self);
     }
 }
Пример #4
0
        public void ShowSongsInDirectoryTree(IEnumerable <SongMetadata> selectedSongs)
        {
            DirectoryTreeController.ClearMultiSelection();

            // This looks more complex than necessary because it is trying to
            // support multiple roots.
            foreach (TreeViewNode root in DirectoryTreeController.RootLevelNodes)
            {
                if (root is DirectoryTreeViewNode)
                {
                    DirectoryTreeViewNode rootDirectory = root as DirectoryTreeViewNode;

                    foreach (TreeViewNode node in rootDirectory.Children)
                    {
                        node.IsExpanded = false;

                        foreach (SongMetadata song in selectedSongs)
                        {
                            SearchAndSelectPath(node, song.Path);
                        }
                    }
                }
            }
        }