コード例 #1
0
        public static IList <NexonArchiveFileEntry> GetFilesRecursive(TreeNode node, IList <NexonArchiveFileEntry> files)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            if (files == null)
            {
                throw new ArgumentNullException("files");
            }

            if (node.Tag is IList <NexonArchiveFileEntry> directoryFiles)
            {
                foreach (NexonArchiveFileEntry file in directoryFiles)
                {
                    files.Add(file);
                }
            }

            foreach (object obj in node.Nodes)
            {
                TreeNode childNode = (TreeNode)obj;
                FolderTreeView.GetFilesRecursive(childNode, files);
            }

            return(files);
        }
コード例 #2
0
        public void LoadArchive(NexonArchive narFile)
        {
            Nodes.Clear();

            if (narFile == null)
            {
                return;
            }

            TreeNode rootNode = new TreeNode("(NAR File)");

            foreach (NexonArchiveFileEntry entry in narFile.FileEntries)
            {
                TreeNode node = FolderTreeView.FindOrCreateNodePath(rootNode, Path.GetDirectoryName(entry.Path));

                if (!(node.Tag is IList <NexonArchiveFileEntry> nodeList))
                {
                    nodeList = new List <NexonArchiveFileEntry>();
                    node.Tag = nodeList;
                }
                nodeList.Add(entry);
            }
            rootNode.Expand();
            Nodes.Add(rootNode);
            SelectedNode = rootNode;
        }
コード例 #3
0
 private void Extract_Click(object sender, EventArgs e)
 {
     if (SelectedNode != null)
     {
         List <NexonArchiveFileEntry> file = new List <NexonArchiveFileEntry>();
         FolderTreeView.GetFilesRecursive(base.SelectedNode, file);
         OnExtractFolder(new FilesEventArgs(FolderTreeView.GetFullPath(base.SelectedNode), file));
     }
 }
コード例 #4
0
 private void VerifyStrip_Click(object sender, EventArgs e)
 {
     if (Nar != null && FolderTree.TopNode != null)
     {
         List <NexonArchiveFileEntry> files = new List <NexonArchiveFileEntry>();
         FolderTreeView.GetFilesRecursive(FolderTree.TopNode, files);
         VerifyFiles(this, new FilesEventArgs(FolderTreeView.GetFullPath(FolderTree.TopNode), files));
     }
 }
コード例 #5
0
        private static TreeNode FindOrCreateNodePath(TreeNode rootNode, string path)
        {
            if (path.Length == 0)
            {
                return(rootNode);
            }

            int startIndex = 0;

            while (path[startIndex] == '/' || path[startIndex] == '\\')
            {
                startIndex++;
            }

            int separatorIndex = path.IndexOfAny(new char[] { '/', '\\' }, startIndex);

            string name;

            if (separatorIndex >= 0)
            {
                name = path.Substring(startIndex, separatorIndex - startIndex);
            }
            else
            {
                name = path.Substring(startIndex);
            }

            TreeNode finalNode = null;

            foreach (object obj in rootNode.Nodes)
            {
                TreeNode node = (TreeNode)obj;
                if (string.Compare(node.Name, name, StringComparison.OrdinalIgnoreCase) == 0)
                {
                    finalNode = node;
                    break;
                }
            }

            if (finalNode == null)
            {
                finalNode      = new TreeNode(name);
                finalNode.Name = name;
                rootNode.Nodes.Add(finalNode);
            }

            if (separatorIndex >= 0)
            {
                return(FolderTreeView.FindOrCreateNodePath(finalNode, path.Substring(separatorIndex + 1)));
            }

            return(finalNode);
        }
コード例 #6
0
        public static string GetFullPath(TreeNode node)
        {
            if (node == null || node.Parent == null)
            {
                return(String.Empty);
            }
            if (node.Parent != null && node.Parent.Parent != null)
            {
                return(FolderTreeView.GetFullPath(node.Parent) + "/" + node.Text);
            }

            return(node.Text);
        }
コード例 #7
0
 private void FolderTreeView_AfterSelect(object sender, TreeViewEventArgs e)
 {
     OnShowFolder(new FilesEventArgs(FolderTreeView.GetFullPath(e.Node), e.Node.Tag as List <NexonArchiveFileEntry>));
 }
コード例 #8
0
 public TreeSort(FolderTreeView folderTreeView)
 {
     ftv = folderTreeView;
 }