Example #1
0
 public virtual void OnControlDirtyChanged(BaseNodeControl control)
 {
     if (control.IsDirty)
     {
         IsDirty = true;
     }
 }
Example #2
0
 public void AddTransitionControl(BaseNodeControl ctrl)
 {
     if (ctrl == null)
     {
         return;
     }
     mTransitionControlList.Add(ctrl);
     UpdateTransitionPos();
 }
Example #3
0
        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);
        }
Example #5
0
 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);
        }
Example #7
0
        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();
            }
        }
Example #9
0
        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);
        }
Example #10
0
        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();
        }
Example #11
0
 partial void AddNodeControl_WPF(BaseNodeControl ins, bool addToCanvas, double x, double y);
Example #12
0
 public void RemoveTransitionControl(BaseNodeControl ctrl)
 {
     mTransitionControlList.Remove(ctrl);
     UpdateTransitionPos();
 }
Example #13
0
 public virtual void RemoveTransition(BaseNodeControl transitionNode)
 {
 }
Example #14
0
        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);
        }
Example #16
0
        // 这里不做参数在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);
        }