public void TestInheritance()
        {
            NamedObjectSave baseListNos = new NamedObjectSave();

            baseListNos.SourceType             = SourceType.FlatRedBallType;
            baseListNos.SourceClassType        = "PositionedObjectList";
            baseListNos.SourceClassGenericType = mEntitySave.Name;

            NamedObjectSave derivedNos = new NamedObjectSave();

            derivedNos.SourceType      = SourceType.Entity;
            derivedNos.SourceClassType = mDerivedEntitySave.Name;

            if (derivedNos.CanBeInList(baseListNos) == false)
            {
                throw new Exception("CanBeInList doesn't properly follow inheritance");
            }
        }
示例#2
0
        private static bool HandleDropOnList(TreeNode treeNodeMoving, TreeNode targetNode, NamedObjectSave targetNos, NamedObjectSave movingNos)
        {
            bool succeeded = true;

            #region Failure cases

            if (string.IsNullOrEmpty(targetNos.SourceClassGenericType))
            {
                MessageBox.Show("The target Object has not been given a list type yet");
            }
            else if (movingNos.CanBeInList(targetNos) == false)
            {
                MessageBox.Show("The Object you are moving is of type " + movingNos.SourceClassType +
                                " but the list is of type " + targetNos.SourceClassGenericType);
            }
            else if (treeNodeMoving.Parent.IsRootNamedObjectNode() == false)
            {
                MessageBox.Show("The Object you are moving is already part of a list, so it can't be moved");
            }

            #endregion

            else
            {
                succeeded = true;
                // Get the old parent of the moving NOS
                TreeNode parentTreeNode = treeNodeMoving.Parent;
                if (parentTreeNode.IsNamedObjectNode())
                {
                    NamedObjectSave parentNos = parentTreeNode.Tag as NamedObjectSave;

                    parentNos.ContainedObjects.Remove(movingNos);
                }
                else
                {
                    EditorLogic.CurrentElement.NamedObjects.Remove(movingNos);
                }
                parentTreeNode.Nodes.Remove(treeNodeMoving);
                targetNode.Nodes.Add(treeNodeMoving);
                // Add the NOS to the tree node moving on
                targetNos.ContainedObjects.Add(movingNos);
            }
            return(succeeded);
        }