예제 #1
0
 private void ReadPackage(string pakFileName, TreeNode rootNode, Language localization, bool checkConflicts)
 {
     using (var pakFile = ZipFile.OpenRead(pakFileName))
     {
         foreach (var entry in pakFile.Entries.OrderBy(n => n.Name))
         {
             var parent = rootNode;
             if (!Path.HasExtension(entry.FullName))
             {
                 continue;
             }
             var fileTag = string.Join(":", Path.GetFileNameWithoutExtension(pakFileName), entry.FullName);
             var names   = entry.FullName.Split('/');
             for (var i = 0; i < names.Length; i++)
             {
                 var key        = names[i].ToLower();
                 var imageIndex = GetNodeImageIndex(names[i], out var isFile);
                 if (!parent.Nodes.ContainsKey(key))
                 {
                     var node = parent.Nodes.Add(key, names[i], imageIndex, imageIndex);
                     if (isFile)
                     {
                         node.Tag = NodeTag.CreateFile(fileTag, localization, false);
                         if (checkConflicts)
                         {
                             node.ForeColor = Color.Green;
                             ExpandFullNode(parent);
                         }
                     }
                     else
                     {
                         node.Tag = NodeTag.Folder;
                     }
                     parent = node;
                 }
                 else
                 {
                     parent = parent.Nodes[key];
                     if (isFile)
                     {
                         var tag = (NodeTag)parent.Tag;
                         tag.Sources.Add(fileTag);
                         if (tag.Sources.Count > 1)
                         {
                             parent.ForeColor = Color.Red;
                             ExpandFullNode(parent);
                         }
                     }
                 }
             }
         }
     }
 }
예제 #2
0
        private async void ModTree_DoubleClick(object sender, EventArgs e)
        {
            var selectedNode = modTree.SelectedNode;

            if (selectedNode?.Tag is NodeTag tag)
            {
                switch (tag.Type)
                {
                case NodeType.Root:
                    break;

                case NodeType.Package:
                    break;

                case NodeType.Folder:
                    break;

                case NodeType.File:
                    if (tag.Language != null)
                    {
                        var fileLink = tag.Sources[0].Split(':');
                        if (fileLink.Length != 2)
                        {
                            return;
                        }
                        var packageFile = Path.Combine(tbModFolder.Text, LocalizationFolder, fileLink[0] + ".pak");
                        var fileEntry   = fileLink[1];
                        if (MessageBox.Show($"Do you want edit '{fileEntry}' file?", $"{tag.Language} Localization", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            if (FileHelpers.TryExtractTemp(packageFile, fileEntry, out var tempFile))
                            {
                                using (var form = new LocalizationForm(tag.Language, fileEntry))
                                {
                                    await form.LoadAsync(tempFile, tag.IsNew);

                                    if (form.ShowDialog(this) == DialogResult.OK)
                                    {
                                        if (PackLocalization(form.SourceFileName, fileEntry, tag.Language.FileName, out var pakFilePath))
                                        {
                                            selectedNode.ForeColor        = modTree.ForeColor;
                                            selectedNode.Tag              = NodeTag.CreateFile(string.Join(":", Path.GetFileNameWithoutExtension(tag.Language.FileName), fileEntry), tag.Language, false);
                                            selectedNode.Parent.ForeColor = modTree.ForeColor;
                                        }
                                        else
                                        {
                                            MessageBox.Show(this, $"Can't place '{fileEntry}' into '{tag.Language.FileName}'!", Resources.Caption_Error,
                                                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }
                                    }
                                    File.Delete(form.SourceFileName);
                                }
                            }
                        }
                    }
                    break;

                default:
                    return;
                }
            }
        }