public void MenuRenameFile_Click(object sender, RoutedEventArgs e)
        {
            var selected = FolderBrowser.GetSelectedItem();

            if (selected == null)
            {
                return;
            }

            if (selected.FullPath == "..")
            {
                return;
            }

            // Start Editing the file name
            selected.EditName           = selected.DisplayName;
            selected.OriginalRenamePath = selected.FullPath;
            selected.IsEditing          = true;

            var tvItem = FolderBrowser.GetNestedTreeviewItem(selected);

            if (tvItem != null)
            {
                var tb = WindowUtilities.FindVisualChild <TextBox>(tvItem);
                tb?.Focus();
            }
        }
        public void MenuAddDirectory_Click(object sender, RoutedEventArgs e)
        {
            var selected = TreeFolderBrowser.SelectedItem as PathItem;

            if (selected == null || selected.Parent == null)
            {
                // No files/folders
                selected = new PathItem()
                {
                    IsFolder = true,
                    FullPath = FolderBrowser.FolderPath,
                    Parent   = FolderBrowser.ActivePathItem.Parent,
                    Files    = FolderBrowser.ActivePathItem.Files
                };
                FolderBrowser.ActivePathItem = selected;
            }

            string path;

            if (!selected.IsFolder)
            {
                path = Path.Combine(Path.GetDirectoryName(selected.FullPath), "NewFolder");
            }
            else
            {
                var treeItem = FolderBrowser.GetNestedTreeviewItem(selected);
                if (treeItem != null)
                {
                    treeItem.IsExpanded = true;
                }

                path = Path.Combine(selected.FullPath, "NewFolder");
            }

            var item = new PathItem {
                FullPath   = path,
                IsFolder   = true,
                IsEditing  = true,
                IsSelected = true
            };

            item.SetIcon();

            if (!selected.IsFolder)
            {
                item.Parent = selected.Parent;
            }
            else
            {
                item.Parent = selected;
            }

            item.Parent.Files.Insert(0, item);

            FolderBrowser.SetTreeViewSelectionByItem(item);
        }
        public void MenuAddFile_Click(object sender, RoutedEventArgs e)
        {
            var selected = TreeFolderBrowser.SelectedItem as PathItem;

            if (selected == null)
            {
                // No files/folders
                selected = new PathItem()
                {
                    IsFolder = true, FullPath = FolderBrowser.FolderPath
                };
                FolderBrowser.ActivePathItem = selected;
            }

            string       path;
            TreeViewItem parentTreeViewItem = FolderBrowser.GetNestedTreeviewItem(selected);

            if (selected.FullPath == "..")
            {
                path = Path.Combine(FolderBrowser.FolderPath, "README.md");
            }
            else if (!selected.IsFolder)
            {
                path = Path.Combine(Path.GetDirectoryName(selected.FullPath), "README.md");
            }
            else
            {
                if (parentTreeViewItem != null)
                {
                    parentTreeViewItem.IsExpanded = true;
                }

                path = Path.Combine(selected.FullPath, "README.md");
            }

            if (File.Exists(path))
            {
                path = Path.Combine(Path.GetDirectoryName(path), "NewFile.md");
                if (File.Exists(path))
                {
                    for (int i = 1; i < 30; i++)
                    {
                        path = Path.Combine(Path.GetDirectoryName(path), $"NewFile{i}.md");
                        if (!File.Exists(path))
                        {
                            break;
                        }
                    }
                }
            }

            var item = new PathItem
            {
                FullPath   = path,
                IsFolder   = false,
                IsFile     = true,
                IsEditing  = true,
                IsSelected = true
            };

            item.EditName = item.DisplayName;
            item.SetIcon();

            if (selected.FullPath == "..")
            {
                item.Parent = FolderBrowser.ActivePathItem;     // current path
            }
            else if (!selected.IsFolder)
            {
                item.Parent = selected.Parent;
            }
            else
            {
                item.Parent = selected;
            }

            item.Parent.Files.Insert(0, item);

            Model.Window.Dispatcher.InvokeAsync(
                () => FolderBrowser.SetTreeViewSelectionByItem(item, parentTreeViewItem),
                DispatcherPriority.ApplicationIdle);
        }