private static void TV_OpenWithCommand_Execute(FilesTreeViewNodeModel model) { if (IOUtils.FileExists(model.Options.FullPath)) { CommonUtils.OpenAs(model.Options.FullPath); } }
private static void TV_OpenFileCommand_Execute(FilesTreeViewNodeModel model) { if (IOUtils.FileExists(model.Options.FullPath)) { Process.Start(model.Options.FullPath); } }
private static void DeleteSmthPromt(FilesTreeViewNodeModel node, string confirmation, Action <string> deleteAction, Predicate <string> checkAction) { Options opts = node.Options; if (MessBox.ShowDial( $"{confirmation} {opts.FullPath}?", StringResources.Confirmation, StringResources.Yes, StringResources.No ) == StringResources.No) { return; } try { deleteAction(opts.FullPath); if (checkAction(opts.FullPath)) { MessBox.ShowDial(StringResources.ErrorLower); } else { node.RemoveFromParent(); } } catch (Exception) { MessBox.ShowDial(StringResources.ErrorLower); } }
private static void Expand(FilesTreeViewNodeModel item, bool expand = true) { item.IsExpanded = expand; foreach (FilesTreeViewNodeModel child in item.Children) { Expand(child, expand); } }
private static void TV_DeleteElementCommand_Execute(FilesTreeViewNodeModel model) { var options = model.Options; if (!options.IsFolder && IOUtils.FileExists(options.FullPath)) { DeleteFilePromt(model); } else if (options.IsFolder && IOUtils.FolderExists(options.FullPath)) { DeleteFolderPromt(model); } }
private static void TV_LoadAllInXmlCommand_Execute(FilesTreeViewNodeModel model) { if (model.Options.Ext != ".xml" || !IOUtils.FileExists(model.Options.FullPath)) { return; } var file = new XmlFile(model.Options.FullPath, XmlFile.XmlRules, true); WindowManager.ActivateWindow <EditorWindow>(); ManualEventManager.GetEvent <AddEditableFilesEvent>() .Publish(new AddEditableFilesEvent(file)); }
/// <summary> /// Загружает иконку для TreeViewItem /// </summary> /// <param name="item">Целевой объект</param> public static void LoadIconForItem(FilesTreeViewNodeModel item) { if (item.Options.IsImageLoaded) { return; } BitmapSource icon; if (item.Options.IsFolder) { icon = GlobalResources.IconFolderVerticalOpen; } else { if (_canLoadIcons) { try { icon = LoadIconFromFile(item.Options).FreezeIfCan(); } catch (RuntimeWrappedException ex) { icon = GlobalResources.IconUnknownFile; _canLoadIcons = false; GlobalVariables.BugSnagClient.Notify(ex); } } else { icon = GlobalResources.IconUnknownFile; } } if (icon != null) { item.Image = icon; } item.Options.IsImageLoaded = true; }
private static bool FilterTreeItems(Predicate <string> checkName, FilesTreeViewNodeModel node, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (!node.Options.IsFolder) { Debug.Assert(node.Children.Count == 0, "node.Children.Count == 0"); } bool result = checkName(Path.GetFileName(node.Options.FullPath)); if (node.Options.IsFolder) { foreach (var child in node.Children) { result |= FilterTreeItems(checkName, child, cancellationToken); } } node.IsVisible = result; return(result); }
private static void TV_ReplaceFileCommand_Execute(FilesTreeViewNodeModel model) { if (!IOUtils.FileExists(model.Options.FullPath)) { return; } var fd = new OpenFileDialog { CheckFileExists = true, CheckPathExists = true, Multiselect = false }; if (fd.ShowDialog() == true) { File.Copy(fd.FileName, model.Options.FullPath, true); MessBox.ShowDial(StringResources.Finished); } else { MessBox.ShowDial(StringResources.ErrorLower); } }
private static void TV_ExpandFolderCommand_Execute(FilesTreeViewNodeModel model) { Expand(model); }
private static void LoadFilesToTreeViewInternal(Dispatcher dispatcher, string pathToFolder, FilesTreeViewNodeModel root, bool showEmptyFolders, CancellationToken cts, Action oneFileAdded, HashSet<string> flagFiles) { cts.ThrowIfCancellationRequested(); IEnumerable<string> files = Directory.EnumerateFiles(pathToFolder, "*", SearchOption.TopDirectoryOnly); IEnumerable<string> folders = Directory.EnumerateDirectories(pathToFolder, "*", SearchOption.TopDirectoryOnly); var itemsToAdd = new List<FilesTreeViewNodeModel>(); try { foreach (string folder in folders) { cts.ThrowIfCancellationRequested(); // folder length if (!CheckFilePath(folder)) continue; var item = new FilesTreeViewNodeModel(root) { Name = Path.GetFileName(folder), Options = new Options(folder, true) }; string langName = LanguageCodesHelper.Instanse.GetLangNameForFolder(item.Name); string countryIso = null; var nameSplit = item.Name.Split('-'); if (nameSplit.Length > 1 && nameSplit[0] == "values") { var languageIso = nameSplit[1]; countryIso = LanguageCodesHelper.Instanse.GetCountryIsoByLanguageIso(languageIso); } void SetFolder(string path) { item.Image = ImageUtils.GetFlagImage(path); item.Options.IsImageLoaded = true; } // flagFiles contains countries iso // folder has language flag if (!string.IsNullOrEmpty(countryIso) && flagFiles.Contains(countryIso)) SetFolder(countryIso); // folder has custom flag else if (flagFiles.Contains(item.Name)) SetFolder(item.Name); // folder is a language folder if (!string.IsNullOrEmpty(langName)) item.Name = langName; LoadFilesToTreeViewInternal(dispatcher, folder, item, showEmptyFolders, cts, oneFileAdded, flagFiles); if (item.Children.Count != 0 || showEmptyFolders) itemsToAdd.Add(item); } foreach (string file in files) { cts.ThrowIfCancellationRequested(); if (!CheckFilePath(file)) continue; oneFileAdded?.Invoke(); if (!AndroidFilesUtils.CheckFileWithSettings(file, Path.GetExtension(file))) continue; var item = new FilesTreeViewNodeModel(root) { Name = Path.GetFileName(file), Options = new Options(file, false) }; itemsToAdd.Add(item); } } finally { dispatcher.InvokeAction(() => root.Children.AddRange(itemsToAdd)); } }
public static void LoadFilesToTreeView(Dispatcher dispatcher, string pathToFolder, FilesTreeViewNodeModel root, bool showEmptyFolders, CancellationToken cts = default, Action oneFileAdded = null) { var flagFiles = new HashSet<string>( Directory.EnumerateFiles(GlobalVariables.PathToFlags, "*.png") .Select(Path.GetFileNameWithoutExtension) ); LoadFilesToTreeViewInternal(dispatcher, pathToFolder, root, showEmptyFolders, cts, oneFileAdded, flagFiles); }
private void FillTreeItemSpecialContextMenu(ContextMenuBuilder.IItemsBuilder builder, FilesTreeViewNodeModel model) { CommandContainer[] items = { _tvCommands.RefreshFilesList, _tvCommands.AddNewLanguage, _tvCommands.RemoveLanguages, _tvCommands.Expand, _tvCommands.Collapse }; items.ForEach(it => AddMenuItem(builder, it, model)); }
private void FillTreeItemFileContextMenu(ContextMenuBuilder.IItemsBuilder builder, FilesTreeViewNodeModel model) { CommandContainer[] items = { new CommandContainer(StringResources.Open, TV_OpenFileCommand, "open_source.png"), new CommandContainer(StringResources.OpenWith, TV_OpenWithCommand, "open_share.png"), new CommandContainer(StringResources.LoadWithTextStrings, TV_LoadAllInXmlCommand, "text.png"), new CommandContainer(StringResources.Replace, TV_ReplaceFileCommand, "card_file.png"), _tvCommands.OpenInExplorer, _tvCommands.RefreshFilesList, new CommandContainer(StringResources.Delete, TV_DeleteElementCommand, "page_delete.png"), _tvCommands.AddNewLanguage, _tvCommands.RemoveLanguages, _tvCommands.Expand, _tvCommands.Collapse }; items.ForEach(it => AddMenuItem(builder, it, model)); }
private void FillTreeItemFolderContextMenu(ContextMenuBuilder.IItemsBuilder builder, FilesTreeViewNodeModel model) { CommandContainer[] items = { _tvCommands.OpenInExplorer, _tvCommands.RefreshFilesList, new CommandContainer(StringResources.Delete, TV_DeleteElementCommand, "folder_delete.png"), _tvCommands.AddNewLanguage, _tvCommands.RemoveLanguages, new CommandContainer(StringResources.Expand, TV_ExpandFolderCommand, "folders_explorer.png"), new CommandContainer(StringResources.Collapse,TV_CollapseFolderCommand, "folders.png") }; items.ForEach(it => AddMenuItem(builder, it, model)); }
public void FillTreeItemContextMenu(ContextMenuBuilder.IItemsBuilder builder, FilesTreeViewNodeModel model) { if (model.Options.IsFolder) { FillTreeItemFolderContextMenu(builder, model); } else if (!string.IsNullOrEmpty(model.Options.FullPath)) { FillTreeItemFileContextMenu(builder, model); } else { FillTreeItemSpecialContextMenu(builder, model); } }
private static void TV_CollapseFolderCommand_Execute(FilesTreeViewNodeModel model) { Expand(model, false); }
private static void DeleteFolderPromt(FilesTreeViewNodeModel node) { DeleteSmthPromt(node, StringResources.FolderDeleteConfirmation, IOUtils.DeleteFolder, IOUtils.FolderExists); }
private static void TV_OpenInExplorerCommand_Execute(FilesTreeViewNodeModel model) { CommonUtils.ShowInExplorer(model.Options.FullPath); }