public Acp.XHIE_tdfnEnumSpoCallback GetEnumNonGroupedSpoCallback(TreeNode parentNode) { return(spo => { string spoName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_INSTANCE) ?? $"{spo->type} [{(int)spo:X8}]"; if (objectNodeMap.TryGetValue(spoName, out ObjectNode objNode)) { if (objNode.ParentNode != parentNode) { objNode.Node.Remove(); parentNode.Nodes.Add(objNode.Node); objNode.ParentNode = parentNode; } // update reference just in case objNode.SuperObject = spo; objNode.Node.Tag = (Pointer <SuperObject>)spo; objNode.Invalidated = false; } else { TreeNode node = NewTreeNode(spoName, IconId.Spo, spo); parentNode.Nodes.Add(node); objectNodeMap[spoName] = new ObjectNode(spo, node, parentNode); } return true; }); }
public Acp.XHIE_tdfnEnumSpoCallback GetEnumGroupedSpoCallback(TreeNode parentNode) { return(spo => { string familyName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_FAMILY) ?? $"{spo->type} [{(int)spo:X8}]"; string modelName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_MODEL) ?? $"{spo->type} [{(int)spo:X8}]"; string spoName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_INSTANCE) ?? $"{spo->type} [{(int)spo:X8}]"; ObjectNode objNode = null; if (objectNodeMap.TryGetValue(spoName, out objNode)) { objNode.Invalidated = false; // update reference just in case objNode.SuperObject = spo; objNode.Node.Tag = (Pointer <SuperObject>)spo; if (objNode.ParentNode != parentNode) { RemoveAndCleanUpGroups(objNode.Node); objNode.ParentNode = parentNode; } else { // parent the same, can safely skip readding groups return true; } } else { TreeNode node = NewTreeNode(spoName, IconId.Instance, spo); objNode = new ObjectNode(spo, node, parentNode); objectNodeMap[spoName] = objNode; } TreeNode familyNode = parentNode.Nodes[familyName]; if (familyNode == null) { familyNode = NewTreeNode(familyName, IconId.Family); parentNode.Nodes.Add(familyNode); } TreeNode modelNode = familyNode.Nodes[modelName]; if (modelNode == null) { modelNode = NewTreeNode(modelName, IconId.Model); familyNode.Nodes.Add(modelNode); } modelNode.Nodes.Add(objNode.Node); return true; }); }