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); }
public void MenuDeleteFile_Click(object sender, RoutedEventArgs e) { var selectedFiles = FolderBrowser.GetSelectedItems(); if (selectedFiles.Count < 0) { return; } StringBuilder sb = new StringBuilder(); foreach (var file in selectedFiles) { sb.AppendLine(file.DisplayName); } if (MessageBox.Show( sb + "\r\n" + "Are you sure?", "Delete File(s)", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes) { return; } try { foreach (var selected in selectedFiles) { // Recyle Bin Code can handle both files and directories mmFileUtils.MoveToRecycleBin(selected.FullPath); } var parent = selectedFiles[0].Parent; var index = -1; foreach (var selected in selectedFiles) { var file = parent?.Files?.FirstOrDefault(fl => fl.FullPath == selected.FullPath); bool firstFile = true; if (file != null) { var tab = Model.Window.GetTabFromFilename(file.FullPath); if (tab != null) { Model.Window.CloseTab(tab, dontPromptForSave: true); } if (parent != null) { index = parent.Files.IndexOf(selected); parent.Files.Remove(file); if (firstFile && index > 0) { FolderBrowser.SetTreeViewSelectionByItem(parent.Files[index]); firstFile = false; } } } } // Delay required to overcome editor focus after MsgBox Model.Window.Dispatcher.Delay(700, s => TreeFolderBrowser.Focus()); } catch (Exception ex) { Model.Window.ShowStatusError("Delete operation failed: " + ex.Message); } }