public virtual void OnControlDirtyChanged(BaseNodeControl control) { if (control.IsDirty) { IsDirty = true; } }
public void AddTransitionControl(BaseNodeControl ctrl) { if (ctrl == null) { return; } mTransitionControlList.Add(ctrl); UpdateTransitionPos(); }
protected void SetParameters(List <MethodParamInfoAssist> paramInfos) { if (paramInfos == null) { return; } mParamsPanel?.Children.Clear(); foreach (var paramInfo in paramInfos) { CodeGenerateSystem.Base.BaseNodeControl pc = null; if (paramInfo.ParameterType.IsSubclassOf(typeof(System.Delegate))) { var csParam = new MethodInvoke_DelegateControl.MethodInvoke_DelegateControlConstructionParams() { CSType = mCSParam.CSType, HostNodesContainer = mCSParam.HostNodesContainer, ConstructParam = this.NodeName, ConstructType = MethodInvokeNode.enParamConstructType.MethodOverride, ParamInfo = paramInfo, }; pc = new MethodInvoke_DelegateControl(csParam); } else { if (paramInfo.IsParamsArray) { var csParam = new ParamParameterControl.ParamParameterConstructionParams() { CSType = mCSParam.CSType, HostNodesContainer = mCSParam.HostNodesContainer, ConstructParam = "", ConstructType = MethodInvokeNode.enParamConstructType.MethodOverride, ParamInfo = paramInfo, }; pc = new ParamParameterControl(csParam); } else { var csParam = new MethodInvokeParameterControl.MethodInvokeParameterConstructionParams() { CSType = mCSParam.CSType, HostNodesContainer = mCSParam.HostNodesContainer, ConstructParam = "", ConstructType = MethodInvokeNode.enParamConstructType.MethodOverride, ParamInfo = paramInfo, }; pc = new MethodInvokeParameterControl(csParam); } } //pc.SetToolTip(EngineNS.Rtti.AttributeHelper.GetCustomAttributePropertyValue(paramInfo, typeof(DescriptionAttribute).FullName, "Description", false)); AddChildNode(pc, mParamsPanel); } }
void RemoveTransitionFromObject(BaseNodeControl transitionNode) { if (transitionNode == null) { return; } var from = m_linkFromObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; from?.RemoveTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transitionNode.Id); var to = m_linkToObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; to?.RemoveTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transitionNode.Id); m_linkFromObjectInfo.HostNodesContainer.DeleteNode(transitionNode); }
partial void ClearChildNode_WPF(CodeGenerateSystem.Base.BaseNodeControl child) { if (mNodeContainer != null) { mNodeContainer.Children.Remove(child); } if (stackPanel_OutputMethodParams != null) { stackPanel_OutputMethodParams.Children.Remove(child); } if (stackPanel_InputMethodParams != null) { stackPanel_InputMethodParams.Children.Remove(child); } }
void AddTransitionToObject(BaseNodeControl transCtrl) { if (m_linkFromObjectInfo.LinkOpType == enLinkOpType.Start) { return; } var lineCurve = m_LinkPath as AnimStateTransitionCurve; //lineCurve.AddTransitionControl(transCtrl); var from = m_linkFromObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; from?.AddTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transCtrl.Id); var to = m_linkToObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; to?.AddTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transCtrl.Id); m_linkFromObjectInfo.HostNodesContainer.GetDrawCanvas().Children.Add(transCtrl); }
protected void SetParameters(string[] paramInfos, EngineNS.ECSType csType) { foreach (var info in paramInfos) { var tempSplits = info.Split(':'); if (tempSplits.Length > 2) { switch (tempSplits[2]) { case "Ref": case "Out": tempSplits[1] += "&"; break; } } CodeGenerateSystem.Base.BaseNodeControl pc = null; var type = EngineNS.Rtti.RttiHelper.GetTypeFromSaveString(tempSplits[1]); if (type != null && type.IsSubclassOf(typeof(System.Delegate))) { var csParam = new MethodInvoke_DelegateControl.MethodInvoke_DelegateControlConstructionParams() { CSType = csType, HostNodesContainer = this.HostNodesContainer, ConstructParam = info + ":" + this.NodeName, ConstructType = MethodInvokeNode.enParamConstructType.MethodOverride, }; pc = new MethodInvoke_DelegateControl(csParam); } else { var csParam = new MethodInvokeParameterControl.MethodInvokeParameterConstructionParams() { CSType = csType, HostNodesContainer = this.HostNodesContainer, ConstructParam = info, ConstructType = MethodInvokeNode.enParamConstructType.MethodOverride, }; pc = new MethodInvokeParameterControl(csParam); } AddChildNode(pc, mParamsPanel); } }
public void RemoveTransition(BaseNodeControl transitionNode) { if (transitionNode == null) { return; } var lineCurve = m_LinkPath as AnimStateTransitionCurve; lineCurve.RemoveTransitionControl(transitionNode); var from = m_linkFromObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; from?.RemoveTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transitionNode.Id); var to = m_linkToObjectInfo as CodeGenerateSystem.Controls.AnimStateLinkControl; to?.RemoveTransiton(m_linkFromObjectInfo.GUID, m_linkToObjectInfo.GUID, transitionNode.Id); m_linkFromObjectInfo.HostNodesContainer.DeleteNode(transitionNode); if (lineCurve.TransitionControlList.Count == 0) { Clear(); } }
public virtual CodeGenerateSystem.Base.BaseNodeControl AddNodeControl(BaseNodeControl ins, double x, double y, bool addToCanvas = true, bool setDirty = true) { //ins.HostNodesContainer = this; //ins.OnMoveNode += new BaseNodeControl.Delegate_MoveNode(OnMoveNode); //ins.OnGetOwnerStateSetClassTypeName += new CodeGenerateSystem.Base.BaseNodeControl.Delegate_GetOwnerStateSetClassTypeName(OnGetOwnerStateSetClassTypeName); ins.OnDirtyChange = new BaseNodeControl.Delegate_DirtyChanged(OnControlDirtyChanged); ////////////if (nodeType == typeof(StatementNode)) ////////////{ //////////// StatementNode stateNode = ins as StatementNode; //////////// stateNode.OnSetDefaultState += new StatementNode.Delegate_OnSetDefaultState(stateNode_OnSetDefaultState); ////////////} //ins.OnGetLinkObjectWithGUID += new CodeGenerateSystem.Base.BaseNodeControl.Delegate_GetLinkObjectWithGUID(OnGetLinkObjectWithGUID); ins.ModifyCreatePosition(ref x, ref y); AddNodeControl_WPF(ins, addToCanvas, x, y); OnInitializeNodeControl?.Invoke(ins); if (addToCanvas) { mCtrlNodeList.Add(ins); } ContainLinkNodes = mCtrlNodeList.Count != OrigionNodeControls.Count; RefreshNodeProperty(ins, Base.ENodeHandleType.AddNodeControl); if (!IsLoading) { OnAddedNodeControl?.Invoke(ins); if (setDirty) { IsDirty = true; } } ScaleChange -= ins.ScaleTips; ScaleChange += ins.ScaleTips; return(ins); }
public virtual async System.Threading.Tasks.Task Load(EngineNS.IO.XndNode xndNode) { IsLoading = true; var att = xndNode.FindAttrib("Head"); att.BeginRead(); int ver = 0; att.Read(out ver); att.Read(out mGuid); att.EndRead(); ClearControlNodes(); switch (ver) { case 0: { // 读取节点信息并创建节点 var childNodesCtrls = xndNode.FindNode("ChildNodesCtrls"); if (childNodesCtrls == null) { return; } var xndChildNodes = childNodesCtrls.GetNodes(); foreach (var cldNode in xndChildNodes) //foreach (XmlElement element in doc.DocumentElement.ChildNodes) { Type ctrlType = null; ConstructionParams csParam = null; var childAtt = cldNode.FindAttrib("_nodeHead"); switch (childAtt.Version) { case 0: { childAtt.BeginRead(); string typeSaveName; childAtt.Read(out typeSaveName); ctrlType = Program.GetNodeControlTypeFromSaveString(typeSaveName); // Program.GetType(xmlNode.FindAttrib("Type").Value); string constructParam; childAtt.Read(out constructParam); childAtt.EndRead(); if (ctrlType == null) { continue; } csParam = new ConstructionParams() { CSType = this.CSType, HostNodesContainer = this, ConstructParam = constructParam, }; } break; case 1: { childAtt.BeginRead(); string typeSaveName; childAtt.Read(out typeSaveName); ctrlType = Program.GetNodeControlTypeFromSaveString(typeSaveName); // Program.GetType(xmlNode.FindAttrib("Type").Value); childAtt.EndRead(); if (ctrlType == null) { continue; } csParam = BaseNodeControl.CreateConstructionParam(ctrlType); csParam.CSType = this.CSType; csParam.HostNodesContainer = this; csParam.Read(cldNode); } break; } SetConstructionParams_WPF(csParam); CodeGenerateSystem.Base.BaseNodeControl nodeControl = AddNodeControl(ctrlType, csParam, double.NaN, double.NaN); await nodeControl.Load(cldNode); } // 读取完成后根据id设置一遍链接节点 foreach (var node in mCtrlNodeList) { node.ConstructLinkInfo(this); } //foreach (var node in mCtrlNodeList) //{ // node.InitializeUsefulLinkDatas(); //} IsLoading = false; IsDirty = false; RefreshNodeProperty(null, ENodeHandleType.UpdateNodeControl); var origionCtrlIdsAtt = xndNode.FindAttrib("OrigionCtrlIds"); if (origionCtrlIdsAtt != null) { origionCtrlIdsAtt.BeginRead(); int count; origionCtrlIdsAtt.Read(out count); for (int i = 0; i < count; i++) { Guid oriId; origionCtrlIdsAtt.Read(out oriId); var ctrl = FindControl(oriId); if (ctrl != null) { mOrigionNodeControls.Add(ctrl); } } origionCtrlIdsAtt.EndRead(); } } break; } AfterLoad_WPF(); for (int i = 0; i < CtrlNodeList.Count; ++i) { CtrlNodeList[i].ContainerLoadComplete(this); } // 加载完后检查节点错误 CheckError(); }
partial void AddNodeControl_WPF(BaseNodeControl ins, bool addToCanvas, double x, double y);
public void RemoveTransitionControl(BaseNodeControl ctrl) { mTransitionControlList.Remove(ctrl); UpdateTransitionPos(); }
public virtual void RemoveTransition(BaseNodeControl transitionNode) { }
public LinkPinControl() { GUID = Guid.NewGuid(); Image = TryFindResource("VarPin_Disconnected") as ImageSource; mContextMenu.Style = TryFindResource(new ComponentResourceKey(typeof(ResourceLibrary.CustomResources), "ContextMenu_Default")) as Style; this.MouseRightButtonDown += (sender, e) => { e.Handled = true; }; this.MouseRightButtonUp += (sender, e) => { if (mContextMenu != null) { mContextMenu.Items.Clear(); AddContextMenuItem("删除所有链接", "Pin Action", (actionObj, arg) => { var tempInfos = new List <LinkInfo>(LinkInfos); var redoAction = new Action <object>((obj) => { Clear(); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { foreach (var li in tempInfos) { LinkInfos.Add(new LinkInfo(HostNodesContainer.GetDrawCanvas(), li.m_linkFromObjectInfo, li.m_linkToObjectInfo)); } }, "Remove Link"); HostNodeControl.IsDirty = true; }); foreach (var linkInfo in LinkInfos) { BaseNodeControl linkNode = null; switch (LinkOpType) { case enLinkOpType.Start: linkNode = linkInfo.m_linkToObjectInfo.HostNodeControl; break; case enLinkOpType.End: linkNode = linkInfo.m_linkFromObjectInfo.HostNodeControl; break; case enLinkOpType.Both: linkNode = null; break; } if (linkNode == null) { return; } var str = linkNode.GetNodeDescriptionString(); AddContextMenuItem("删除连接到 " + str, "Pin Action", (actionObj, arg) => { var undoRedoData = new DelLinkUndoRedoData() { ProcessInfo = linkInfo }; var redoAction = new Action <object>((obj) => { undoRedoData.ProcessInfo.Clear(); LinkInfos.Remove(undoRedoData.ProcessInfo); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { undoRedoData.ProcessInfo = new LinkInfo(HostNodesContainer.GetDrawCanvas(), undoRedoData.ProcessInfo.m_linkFromObjectInfo, undoRedoData.ProcessInfo.m_linkToObjectInfo); LinkInfos.Add(undoRedoData.ProcessInfo); }, "Remove Link"); HostNodeControl.IsDirty = true; }); } OnCollectionContextMenus?.Invoke(this); mContextMenu.IsOpen = true; } e.Handled = true; }; }
public static CodeGenerateSystem.Base.GeneratorClassBase CreateClassInstanceFromCustomPropertys(List <CustomPropertyInfo> propertys, BaseNodeControl node, string className = null, bool needNameProperty = true) { var cpPros = new List <CustomPropertyInfo>(propertys); // name属性Metadata不存 if (needNameProperty) { var nameCPInfo = CustomPropertyInfo.GetFromParamInfo(typeof(string), "Name", new Attribute[] { new CategoryAttribute("Common") }); cpPros.Add(nameCPInfo); } var nodeType = node.GetType(); if (string.IsNullOrEmpty(className)) { className = nodeType.FullName + "_" + EngineNS.Editor.Assist.GetValuedGUIDString(node.Id) + ".PropertyClass"; } var classType = CodeGenerateSystem.Base.PropertyClassGenerator.CreateTypeFromCustomPropertys(cpPros, nodeType.Assembly.GetName().Name + "DynamicAssembly", className); var classInstance = System.Activator.CreateInstance(classType) as CodeGenerateSystem.Base.GeneratorClassBase; var field = classType.GetField("HostNode"); if (field != null) { field.SetValue(classInstance, node); } if (needNameProperty) { var namePro = classType.GetProperty("Name"); if (namePro != null) { namePro.SetValue(classInstance, node.NodeName); node.SetNameBinding(classInstance, "Name"); //node.SetBinding(BaseNodeControl.NodeNameBinderProperty, new Binding("Name") { Source = classInstance, Mode = BindingMode.TwoWay }); } } classInstance.CSType = node.CSParam.CSType; return(classInstance); }
// 这里不做参数在PropertyGrid中的显示设置,防止类似Ref参数被无意设置 protected void SetParameters(MethodInfoAssist methodInfo) { var cpInfos = new List <CustomPropertyInfo>(); mParamsPanel?.Children.Clear(); var param = CSParam as ReturnConstructParam; // return if ((param.MethodInfo.ReturnType != typeof(void)) && (param.MethodInfo.ReturnType != typeof(System.Threading.Tasks.Task))) { var csParam = new MethodInvokeParameterControl.MethodInvokeParameterConstructionParams() { CSType = CSParam.CSType, HostNodesContainer = CSParam.HostNodesContainer, ConstructParam = "", ConstructType = MethodInvokeNode.enParamConstructType.Return, ParamInfo = new MethodParamInfoAssist() { FieldDirection = System.CodeDom.FieldDirection.Out, IsParamsArray = false, ParameterType = param.MethodInfo.ReturnType, ParamName = "Return", }, }; var ctrl = new MethodInvokeParameterControl(csParam); AddChildNode(ctrl, mParamsPanel); if (Program.IsTypeValidInPropertyGridShow(param.MethodInfo.ReturnType)) { var cpInfo = Program.GetFromParamInfo(csParam.ParamInfo); cpInfos.Add(cpInfo); } } foreach (var methodParam in methodInfo.Params) { if (methodParam.FieldDirection != System.CodeDom.FieldDirection.Out) { continue; } CodeGenerateSystem.Base.BaseNodeControl pc = null; if (methodParam.ParameterType.IsSubclassOf(typeof(System.Delegate))) { var csParam = new MethodInvoke_DelegateControl.MethodInvoke_DelegateControlConstructionParams() { CSType = CSParam.CSType, HostNodesContainer = CSParam.HostNodesContainer, ConstructParam = this.NodeName, ConstructType = MethodInvokeNode.enParamConstructType.Return, ParamInfo = methodParam, }; pc = new MethodInvoke_DelegateControl(csParam); } else { if (methodParam.IsParamsArray) { var csParam = new ParamParameterControl.ParamParameterConstructionParams() { CSType = CSParam.CSType, HostNodesContainer = CSParam.HostNodesContainer, ConstructParam = "", ConstructType = MethodInvokeNode.enParamConstructType.Return, ParamInfo = methodParam, }; pc = new ParamParameterControl(csParam); } else { var csParam = new MethodInvokeParameterControl.MethodInvokeParameterConstructionParams() { CSType = CSParam.CSType, HostNodesContainer = CSParam.HostNodesContainer, ConstructParam = "", ConstructType = MethodInvokeNode.enParamConstructType.Return, ParamInfo = methodParam, }; pc = new MethodInvokeParameterControl(csParam); if (Program.IsTypeValidInPropertyGridShow(methodParam.ParameterType)) { var cpInfo = Program.GetFromParamInfo(methodParam); cpInfos.Add(cpInfo); } } } AddChildNode(pc, mParamsPanel); } CreateTemplateClass(cpInfos); }