// Disposer public virtual void Dispose() { // Not already disposed? if (!isdisposed) { // Done textureset = null; isdisposed = true; } }
//mxd private static void SetItemsCount(TreeNode node) { ResourceImageSet ts = ((TreeNodeData)node.Tag).Set as ResourceImageSet; if (ts == null) { throw new Exception("Expected ResourceImageSet, but got null..."); } if (ts.Images.Count > 0) { node.Text += " [" + ts.Images.Count + "]"; } foreach (TreeNode child in node.Nodes) { SetItemsCount(child); } }
//mxd private void CreateNodes(TreeNode root) { TreeNodeData rootdata = (TreeNodeData)root.Tag; ResourceImageSet set = rootdata.Set as ResourceImageSet; if (set == null) { General.ErrorLogger.Add(ErrorType.Error, "Resource " + root.Name + " doesn't have ImageSet!"); return; } int imageIndex = (int)set.Location.type + 5; //char[] separator = { Path.AltDirectorySeparatorChar }; ImageData[] images = new ImageData[set.Images.Count]; set.Images.CopyTo(images, 0); Array.Sort(images, SortImageData); List <ImageData> rootimages = new List <ImageData>(); foreach (ImageData image in images) { rootimages.Add(image); //TODO /*string[] parts = image.VirtualName.Split(separator, StringSplitOptions.RemoveEmptyEntries); * TreeNode curNode = root; * * if(parts.Length == 1) * { * rootimages.Add(image); * continue; * } * * int localindex = ((parts[0] == "[TEXTURES]" || image is TEXTURESImage) ? 8 : imageIndex); * string category = set.Name; * for(int i = 0; i < parts.Length - 1; i++) * { * category += (Path.DirectorySeparatorChar + parts[i]); * * //already got such category? * if(curNode.Nodes.Count > 0 && curNode.Nodes.ContainsKey(category)) * { * curNode = curNode.Nodes[category]; * } * else //create a new one * { * TreeNode n = new TreeNode(parts[i]) { Name = category, ImageIndex = localindex, SelectedImageIndex = localindex }; * curNode.Nodes.Add(n); * curNode = n; * curNode.Tag = new TreeNodeData { Set = new ResourceTextureSet(category, set.Location), FolderName = parts[i] }; * } * * // Add to current node * if(i == parts.Length - 2) * { * ResourceTextureSet curTs = ((TreeNodeData)curNode.Tag).Set as ResourceTextureSet; * if(image.IsFlat) * curTs.AddFlat(image); * else * curTs.AddTexture(image); * } * }*/ } // Shift the tree up when only single child node was added if (root.Nodes.Count == 1 && root.Nodes[0].Nodes.Count > 0) { TreeNode[] children = new TreeNode[root.Nodes[0].Nodes.Count]; root.Nodes[0].Nodes.CopyTo(children, 0); root.Nodes.Clear(); root.Nodes.AddRange(children); } // Add "All set textures" node if (root.Nodes.Count > 1) { TreeNode allnode = new TreeNode(ALL_IMAGES) { Name = ALL_IMAGES, ImageIndex = imageIndex, SelectedImageIndex = imageIndex, Tag = new TreeNodeData { Set = set, FolderName = ALL_IMAGES } }; root.Nodes.Add(allnode); } // Sort immediate child nodes... TreeNode[] rootnodes = new TreeNode[root.Nodes.Count]; root.Nodes.CopyTo(rootnodes, 0); Array.Sort(rootnodes, SortTreeNodes); root.Nodes.Clear(); root.Nodes.AddRange(rootnodes); // Re-add root images ResourceImageSet rootset = new ResourceImageSet(set.Name, set.Location); foreach (ImageData data in rootimages) { rootset.AddImage(data); } // Store root data rootdata.Set = rootset; root.Tag = rootdata; // Set root images count if (rootset.Images.Count > 0) { root.Text += " [" + rootset.Images.Count + "]"; } // Add image count to node titles foreach (TreeNode n in root.Nodes) { SetItemsCount(n); } }
// Constructor public DataReader(DataLocation dl) { // Keep information location = dl; textureset = new ResourceImageSet(GetTitle(), dl); }