private static void MoveCustomVariable(TreeNode nodeMoving, TreeNode targetNode) { CustomVariable customVariable = nodeMoving.Tag as CustomVariable; if (targetNode.IsRootEventsNode()) { // The user dragged a variable onto the events node, so they want to make // an event for this. We'll assume an "after" event since I think no one makes // before events if (customVariable != null) { customVariable.CreatesEvent = true; FlatRedBall.Glue.Events.EventResponseSave eventResponseSave = new Events.EventResponseSave(); eventResponseSave.EventName = "After" + customVariable.Name + "Set"; eventResponseSave.SourceObject = null; eventResponseSave.SourceObjectEvent = null; eventResponseSave.SourceVariable = customVariable.Name; eventResponseSave.BeforeOrAfter = BeforeOrAfter.After; eventResponseSave.DelegateType = null; RightClickHelper.AddEventToElementAndSave(EditorLogic.CurrentElement, eventResponseSave); } } else if (targetNode.IsRootCustomVariablesNode()) { // let's see if the user is moving a variable from one element to another IElement sourceElement = nodeMoving.GetContainingElementTreeNode().Tag as IElement; IElement targetElement = targetNode.GetContainingElementTreeNode().Tag as IElement; if (sourceElement != targetElement) { // copying a variable from one element to another // eventually we need to add some error checking here. CustomVariable newVariable = customVariable.Clone(); targetElement.CustomVariables.Add(newVariable); GlueCommands.Self.GenerateCodeCommands.GenerateElementCode(targetElement); GlueCommands.Self.RefreshCommands.RefreshUi(targetElement); } } }