public override CswNbtNode CopyNode(bool IsNodeTemp = false, Action <CswNbtNode> OnCopy = null) { // Copy NodeType string NewNodeTypeName = "Copy Of " + NodeTypeName.Text; Int32 CopyInt = 1; while (null != _CswNbtResources.MetaData.getNodeType(NewNodeTypeName)) { CopyInt++; NewNodeTypeName = "Copy " + CopyInt.ToString() + " Of " + NodeTypeName.Text; } CswNbtObjClassDesignNodeType NodeTypeCopy = base.CopyNodeImpl(IsNodeTemp, delegate(CswNbtNode NewNode) { ((CswNbtObjClassDesignNodeType)NewNode).InternalCreate = true; ((CswNbtObjClassDesignNodeType)NewNode).NodeTypeName.Text = NewNodeTypeName; if (null != OnCopy) { OnCopy(NewNode); } }); // Copy Tabs Dictionary <Int32, CswNbtObjClassDesignNodeTypeTab> TabMap = new Dictionary <Int32, CswNbtObjClassDesignNodeTypeTab>(); foreach (CswNbtObjClassDesignNodeTypeTab TabNode in getTabNodes()) { CswNbtObjClassDesignNodeTypeTab TabCopy = TabNode.CopyNode(IsNodeTemp, delegate(CswNbtNode CopiedNode) { ((CswNbtObjClassDesignNodeTypeTab)CopiedNode).NodeTypeValue.RelatedNodeId = NodeTypeCopy.NodeId; ((CswNbtObjClassDesignNodeTypeTab)CopiedNode).TabName.Text = TabNode.TabName.Text; }); TabMap.Add(TabNode.RelationalId.PrimaryKey, TabCopy); } // case 31518 - props won't be able to see the tab if we don't do this _CswNbtResources.MetaData.refreshAll(); // Copy Props Collection <CswNbtObjClassDesignNodeTypeProp> PropNodes = getPropNodes(); Dictionary <Int32, CswNbtObjClassDesignNodeTypeProp> PropMap = new Dictionary <Int32, CswNbtObjClassDesignNodeTypeProp>(); foreach (CswNbtObjClassDesignNodeTypeProp PropNode in PropNodes) { CswNbtObjClassDesignNodeTypeProp PropCopy = PropNode.CopyNode(IsNodeTemp, delegate(CswNbtNode CopiedNode) { ((CswNbtObjClassDesignNodeTypeProp)CopiedNode).NodeTypeValue.RelatedNodeId = NodeTypeCopy.NodeId; ((CswNbtObjClassDesignNodeTypeProp)CopiedNode).PropName.Text = PropNode.PropName.Text; }); PropMap.Add(PropNode.RelationalId.PrimaryKey, PropCopy); // Fix layout if (PropCopy.PropName.Text.Equals(CswNbtObjClass.PropertyName.Save)) { foreach (CswNbtObjClassDesignNodeTypeTab NewTab in TabMap.Values) { //Case 29181 - Save prop on all tabs except identity if (NewTab.RelationalId.PrimaryKey != NodeTypeCopy.RelationalNodeType.getIdentityTab().TabId) { _CswNbtResources.MetaData.NodeTypeLayout.updatePropLayout(CswEnumNbtLayoutType.Edit, NodeTypeCopy.RelationalId.PrimaryKey, PropCopy.RelationalNodeTypeProp, false, NewTab.RelationalId.PrimaryKey, Int32.MaxValue, 1); } } } else { foreach (CswEnumNbtLayoutType LayoutType in CswEnumNbtLayoutType._All) { Dictionary <Int32, CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout> OriginalLayouts = _CswNbtResources.MetaData.NodeTypeLayout.getLayout(LayoutType, PropNode.RelationalNodeTypeProp, null); foreach (CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout OriginalLayout in OriginalLayouts.Values) { if (OriginalLayout != null) { Int32 NewTabId = Int32.MinValue; if (LayoutType == CswEnumNbtLayoutType.Edit) { NewTabId = TabMap[OriginalLayout.TabId].RelationalId.PrimaryKey; } _CswNbtResources.MetaData.NodeTypeLayout.updatePropLayout(LayoutType, NodeTypeCopy.RelationalId.PrimaryKey, PropCopy.RelationalNodeTypeProp, true, NewTabId, OriginalLayout.DisplayRow, OriginalLayout.DisplayColumn); } } } // foreach( CswEnumNbtLayoutType LayoutType in CswEnumNbtLayoutType._All ) } } // foreach( CswNbtObjClassDesignNodeTypeProp PropNode in getPropNodes() ) // Fix Conditional Props (case 22328) foreach (CswNbtObjClassDesignNodeTypeProp PropNode in PropNodes) { if (CswTools.IsPrimaryKey(PropNode.DisplayConditionProperty.RelatedNodeId)) { CswNbtObjClassDesignNodeTypeProp PropCopy = PropMap[PropNode.RelationalId.PrimaryKey]; CswNbtObjClassDesignNodeTypeProp DisplayConditionProp = PropNodes.FirstOrDefault(p => p.NodeId == PropNode.DisplayConditionProperty.RelatedNodeId); if (null != DisplayConditionProp) { CswNbtObjClassDesignNodeTypeProp DisplayConditionPropCopy = PropMap[DisplayConditionProp.RelationalId.PrimaryKey]; PropCopy.DisplayConditionProperty.RelatedNodeId = DisplayConditionPropCopy.NodeId; } } } // Fix the name template, now that properties are in place NodeTypeCopy.postChanges(true); //if( OnCopyNodeType != null ) // OnCopyNodeType( OldNodeType, NewNodeType ); return(NodeTypeCopy.Node); } // CopyNode()