protected override void EndLink(LinkPinControl linkObj) { bool alreadyLink = false; var pinInfo = GetLinkPinInfo("AnimStateLinkHandle"); if (HostNodesContainer.StartLinkObj == linkObj) { //base.EndLink(null); if (HostNodesContainer.PreviewLinkCurve != null) { HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; } return; } var count = pinInfo.GetLinkInfosCount(); for (int index = 0; index < count; ++index) { AnimStateLinkInfoForUndoRedo undoRedoLinkInfo = new AnimStateLinkInfoForUndoRedo(); var linkInfo = pinInfo.GetLinkInfo(index); if (linkInfo.m_linkFromObjectInfo == HostNodesContainer.StartLinkObj && linkInfo.m_linkToObjectInfo == linkObj) { alreadyLink = true; undoRedoLinkInfo.linkInfo = linkInfo as AnimStateLinkInfo; NodesContainer.TransitionStaeBaseNodeForUndoRedo transCtrl = new NodesContainer.TransitionStaeBaseNodeForUndoRedo(); var redoAction = new Action <Object>((obj) => { transCtrl.TransitionStateNode = undoRedoLinkInfo.linkInfo.AddTransition(); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { undoRedoLinkInfo.linkInfo.RemoveTransition(transCtrl.TransitionStateNode); }, "Create StateTransition"); } if (HostNodesContainer.PreviewLinkCurve != null) { HostNodesContainer.PreviewLinkCurve.Visibility = System.Windows.Visibility.Hidden; } //base.EndLink(null,false); } if (!alreadyLink) { base.EndLink(linkObj); } }
protected override void MenuItem_Click_Del(object sender, RoutedEventArgs e) { if (!CheckCanDelete()) { return; } List <AnimStateLinkInfoForUndoRedo> undoRedoLinkInfos = new List <AnimStateLinkInfoForUndoRedo>(); for (int i = 0; i < mCtrlValueLinkHandle.GetLinkInfosCount(); i++) { var undoRedoLinkInfo = new AnimStateLinkInfoForUndoRedo(); var linkInfo = mCtrlValueLinkHandle.GetLinkInfo(i); var animStateLinkInfo = linkInfo as AnimStateLinkInfo; undoRedoLinkInfo.linkInfo = animStateLinkInfo; undoRedoLinkInfos.Add(undoRedoLinkInfo); } var redoAction = new Action <object>((obj) => { foreach (var linkInfo in undoRedoLinkInfos) { linkInfo.linkInfo.RemoveAllFromContainer(); } HostNodesContainer.DeleteNode(this); }); redoAction.Invoke(null); EditorCommon.UndoRedo.UndoRedoManager.Instance.AddCommand(HostNodesContainer.HostControl.UndoRedoKey, null, redoAction, null, (obj) => { if (m_bMoveable) { if (ParentDrawCanvas != null) { ParentDrawCanvas.Children.Add(this); ParentDrawCanvas.Children.Add(mParentLinkPath); } HostNodesContainer.CtrlNodeList.Add(this); } foreach (var data in undoRedoLinkInfos) { data.linkInfo.ResetLink(); data.linkInfo.AddAllToContainer(); data.linkInfo.UpdateLink(); } }, "Delete Node"); IsDirty = true; }