コード例 #1
0
ファイル: ShellBrowser.cs プロジェクト: xeno-by/datavault
        /// <summary>
        /// This method will raise the OnSelectedFolderChangedEvent. Before raising it the navigation bar item is changed
        /// to match the new current directory and the selectedNode property is set to the new node.
        /// </summary>
        /// <param name="e">The SelectedFolderChangedEventArgs to pass on</param>
        private void OnSelectedFolderChanged(SelectedFolderChangedEventArgs e)
        {
            ChangeNavBarItem(e);
            currentDirectoryNode = e.Node;

            if (SelectedFolderChanged != null)
                SelectedFolderChanged(this, e);
        }
コード例 #2
0
ファイル: ShellBrowser.cs プロジェクト: xeno-by/datavault
        /// <summary>
        /// This method will set the current directory of the navigation bar to match the current selected
        /// directory of the browser. It will add and remove items to make it look like the Windows Explorer
        /// ComboBox.
        /// </summary>
        private void ChangeNavBarItem(SelectedFolderChangedEventArgs e)
        {
            if (!navAddressBox.CurrentItem.ShellItem.Equals(e.Item))
            {
                int currentIndex = navAddressBox.Items.IndexOf(navAddressBox.CurrentItem);
                BrowserComboItem currentItem = navAddressBox.CurrentItem;
                int maxIndent = folderView.IsParentNode(myCompNode, currentDirectoryNode) ? 3 : 2;
                TreeNode[] path;

                bool isMyCompChild = folderView.IsParentNode(myCompNode, e.Node);
                if (currentDirectoryNode.Nodes.Contains(e.Node) &&
                    ((isMyCompChild && e.Node.Level >= 3) || (!isMyCompChild && e.Node.Level >= 2)))
                {
                    navAddressBox.Items.Insert(currentIndex + 1, new BrowserComboItem(e.Item, e.Node.Level));
                    navAddressBox.SelectedIndex = currentIndex + 1;
                }
                else if (folderView.IsParentNode(e.Node, currentDirectoryNode, out path))
                {
                    if (e.Node.Equals(desktopNode))
                        navAddressBox.SelectedIndex = 0;
                    else if (e.Node.Equals(myCompNode))
                        navAddressBox.SelectedIndex = desktopNode.Nodes.IndexOf(myCompNode) + 1;
                    else
                        navAddressBox.SelectedIndex = currentIndex - path.Length + 1;

                    while (currentItem.Text != e.Node.Text && currentItem.Indent >= maxIndent)
                    {
                        navAddressBox.Items.Remove(currentItem);
                        currentIndex--;
                        currentItem = (BrowserComboItem)navAddressBox.Items[currentIndex];
                    }
                }
                else
                {
                    while (currentItem.Indent >= maxIndent && !e.Node.Equals(myCompNode))
                    {
                        navAddressBox.Items.Remove(currentItem);
                        currentIndex--;
                        currentItem = (BrowserComboItem)navAddressBox.Items[currentIndex];
                    }

                    if (folderView.IsParentNode(myCompNode, e.Node, out path))
                    {
                        if (path.Length > 2)
                        {
                            int startIndex =
                                desktopNode.Nodes.IndexOf(myCompNode) +
                                myCompNode.Nodes.IndexOf(path[1]) + 1;

                            for (int i = 2; i < path.Length; i++)
                            {
                                navAddressBox.Items.Insert(startIndex + i,
                                    new BrowserComboItem((ShellItem)path[i].Tag, i + 1));
                            }

                            navAddressBox.SelectedIndex = startIndex + path.Length - 1;
                        }
                        else
                        {
                            navAddressBox.SelectedIndex =
                                desktopNode.Nodes.IndexOf(myCompNode) +
                                myCompNode.Nodes.IndexOf(e.Node) + 2;
                        }
                    }
                    else if (folderView.IsParentNode(desktopNode, e.Node, out path))
                    {
                        if (path.Length > 2)
                        {
                            int startIndex = desktopNode.Nodes.IndexOf(path[1]);

                            for (int i = 2; i < path.Length; i++)
                            {
                                navAddressBox.Items.Insert(startIndex + i,
                                    new BrowserComboItem((ShellItem)path[i].Tag, i));
                            }

                            navAddressBox.SelectedIndex = startIndex + path.Length - 1;
                        }
                        else
                        {
                            if (desktopNode.Nodes.IndexOf(e.Node) <= desktopNode.Nodes.IndexOf(myCompNode))
                                navAddressBox.SelectedIndex = desktopNode.Nodes.IndexOf(e.Node) + 1;
                            else
                                navAddressBox.SelectedIndex = desktopNode.Nodes.IndexOf(e.Node) + myCompNode.Nodes.Count + 1;
                        }
                    }
                    else
                        navAddressBox.SelectedIndex = 0;
                }
            }
        }