//Add to object and to children visually
 public void Virtual_AddChild(GameObject child_obj)
 {
     if (GetDataContext() == null)
     {
         return;
     }
     if (Children == null)
     {
         Children = new ObservableCollection <GameObject>();
     }
     IntermediateSource.Add(child_obj);
     MochaInterface.CTransform this_trans = GetDataContext().transform;
     EditorSubsystemManaged.getInstance().QueueAction(new Action(() =>
     {
         child_obj.transform.SetParent(this_trans);
     }));
 }
        //Detach the object visually
        public void Virtual_DetachChild(HierarchyControl child)
        {
            if (child.GetDataContext() == null)
            {
                return;
            }
            if (Children == null)
            {
                Children = new ObservableCollection <GameObject>();
            }
            GameObject child_obj = child.GetDataContext();

            IntermediateSource.Add(child_obj);
            EditorSubsystemManaged.getInstance().QueueAction(new Action(() =>
            {
                child_obj.transform.SetParent(null);
            }));
        }
 /// <summary>
 /// <para>Constructs a new instance of the <see cref="IntermediateParameter"/>.</para>
 /// </summary>
 /// <param name="source">The soure from where this parameters value is sourced from.</param>
 /// <param name="index">The index within the source to source a value from.</param>
 public IntermediateParameter(IntermediateSource source, byte index)
 {
     Source = source;
     Index  = index;
 }