Exemple #1
0
        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;
            });
        }
Exemple #2
0
        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;
            });
        }