Ejemplo n.º 1
0
 private static void TV_OpenWithCommand_Execute(FilesTreeViewNodeModel model)
 {
     if (IOUtils.FileExists(model.Options.FullPath))
     {
         CommonUtils.OpenAs(model.Options.FullPath);
     }
 }
Ejemplo n.º 2
0
 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);
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        /// <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;
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
        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);
            }
        }
Ejemplo n.º 10
0
 private static void TV_ExpandFolderCommand_Execute(FilesTreeViewNodeModel model)
 {
     Expand(model);
 }
Ejemplo n.º 11
0
        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));
            }
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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));
        }
Ejemplo n.º 14
0
        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));
        }
Ejemplo n.º 15
0
        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));
        }
Ejemplo n.º 16
0
 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);
     }
 }
Ejemplo n.º 17
0
 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);
 }
Ejemplo n.º 19
0
 private static void TV_OpenInExplorerCommand_Execute(FilesTreeViewNodeModel model)
 {
     CommonUtils.ShowInExplorer(model.Options.FullPath);
 }