private void BuildResource(RenamedResource resource, ref PineappleTreeNode resourcesNode)
        {
            PineappleTreeNode node = CreateNode(resource.NameOld);

            node.Tag         = resource;
            node.ImageIndex  = mainForm.ICON_RESOURCE;
            node.ToolTipText = BuildHintForResource(resource);

            PineappleTreeNode ownerNode;
            string            ownerClass = resource.TryGetOwnerClassOld();

            if (!groupResources || ownerClass == null || !classNodesMap.TryGetValue(ownerClass, out ownerNode))
            {
                if (resourcesNode == null)
                {
                    resourcesNode            = CreateNode("Resources");
                    resourcesNode.ImageIndex = mainForm.ICON_RESOURCES;
                    tree.Nodes.Add(resourcesNode);
                }

                ownerNode = resourcesNode;
            }

            ownerNode.Nodes.Add(node);

            string subItemText = null;

            if (resource.NameNew != null)
            {
                subItemText = resource.NameNew;
            }
            else
            {
                node.HighlightColorIndex = (int)Highlights.NotRenamed;
            }

            if (subItemText != null)
            {
                if (Configs.Instance.UseColumns)
                {
                    node.Subitems.Add(new PineappleTreeSubitem(subItemText));
                }
                else
                {
                    node.Text += "\n" + subItemText;
                }
            }
        }
        public static string BuildHintForResource(RenamedResource resource)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Old name:");
            sb.AppendLine(resource.NameOld);

            if (resource.SkipReason != null)
            {
                sb.AppendLine("Skip reason:");
                sb.AppendLine(resource.SkipReason);
            }
            else
            {
                sb.AppendLine("New name:");
                sb.AppendLine(resource.NameNew);
            }
            return(sb.ToString());
        }
        private void LoadFile(IMappingReader reader)
        {
            loadTime = 0;
            LoadTimer timer = new LoadTimer("File Parsing");

            reader.Load();

            loadTime += timer.Stop();
            timer     = new LoadTimer("Items Processing");

            modules.Clear();
            namespaces.Clear();
            namespacesObfuscated.Clear();
            classes.Clear();
            classesCache.Clear();
            haveSystemEntities = false;
            methodsCount       = classesCount = subclassesCount = skippedCount = 0;

            List <RenamedClass> subclasses = new List <RenamedClass>();

            foreach (IMappingEntity entity in reader.Entities)
            {
                if (entity.Type == EntityType.Resource)
                {
                    RenamedResource resource = new RenamedResource(entity);
                    resources.Add(resource);
                    continue;
                }

                RenamedClass c = new RenamedClass(entity, this);
                classesCount++;

                if (c.SkipReason != null)
                {
                    skippedCount++;
                }

                if (c.OwnerClassName == null)
                {
                    classes.Add(c);
                    if (c.Name.NameOld != null && c.Name.NameOld.Namespace != null)
                    {
                        haveSystemEntities |= c.Name.NameOld.Namespace.StartsWith("System.");
                    }
                }
                else
                {
                    subclasses.Add(c);
                }

                methodsCount += c.MethodsCount;

                if (c.ModuleNew != null)
                {
                    modules.Add(c.ModuleNew);
                }
                if (c.Name.NameOld != null)
                {
                    classesCache[c.NameOld]     = c;
                    classesCache[c.NameOldFull] = c;

                    if (!string.IsNullOrEmpty(c.Name.NameOld.Namespace))
                    {
                        namespaces.Add(c.Name.NameOld.Namespace);
                    }
                }
                if (c.Name.NameNew != null)
                {
                    classesCache[c.NameNew]     = c;
                    classesCache[c.NameNewFull] = c;

                    if (!string.IsNullOrEmpty(c.Name.NameNew.Namespace))
                    {
                        namespacesObfuscated.Add(c.Name.NameNew.Namespace);
                    }
                }
            }

            loadTime += timer.Stop();
            timer     = new LoadTimer("Subclasses Processing");

            foreach (RenamedClass subclass in subclasses)
            {
                RenamedClass c;
                if (classesCache.TryGetValue(subclass.OwnerClassName, out c))
                {
                    c.Items.Add(subclass);
                    subclass.OwnerClass = c;
                    subclassesCount++;
                    continue;
                }

                Debug.WriteLine("Failed to find root class: " + subclass.OwnerClassName);
                classes.Add(subclass);
            }

            loadTime += timer.Stop();
            timer     = new LoadTimer("Values Updating");

            foreach (RenamedClass c in classes)
            {
                c.UpdateNewNames(this);
            }

            loadTime += timer.Stop();
            Debug.WriteLine("Total Elapsed: {0} ms", loadTime);
        }