private void OnPasteClick(object sender, RoutedEventArgs e)
        {
            Domain.Attribute parent = GetSelectedValue();
            if (parent == null || parent.IsDefault)
            {
                parent = this.Root;
            }
            List <Domain.Attribute> attributes = Kernel.Util.ClipbordUtil.GetAttributes();

            if (attributes != null && attributes.Count > 0)
            {
                foreach (Domain.Attribute attribute in attributes)
                {
                    attribute.name = GetNewAttributeName(attribute.name);
                    ForgetDefaultAttributes(parent);
                    attribute.SetParent(parent);
                    parent.AddChild(attribute);
                    parent.related = true;
                    AddDefaultAttributes(parent);
                    addToSource(attribute);
                }
                attributes.Clear();
                if (Changed != null)
                {
                    Changed();
                }
            }
        }
        private void OnOutdentClick(object sender, RoutedEventArgs e)
        {
            List <Domain.Attribute> attributes = GetSelectedValues();

            if (attributes.Count == 0)
            {
                return;
            }
            attributes.BubbleSort();
            foreach (Domain.Attribute attribute in attributes)
            {
                Domain.Attribute parent = attribute.parent;
                if (parent == null)
                {
                    parent = this.Root;
                }
                Domain.Attribute grandParent = parent.parent;
                if (grandParent == null)
                {
                    return;
                }

                ForgetDefaultAttributes(grandParent);
                parent.ForgetChild(attribute);
                parent.related = parent.childrenListChangeHandler.Items.Count > 0;
                grandParent.AddChild(attribute);
                grandParent.related = true;
                parent.IsExpanded   = true;

                int row = Source.IndexOf(grandParent);
                if (row >= 0)
                {
                    Source.Remove(grandParent);
                    Source.Insert(row, grandParent);
                }
                else
                {
                    row = Source.Count;
                    Source.Remove(attribute);
                    if (row - 2 >= 0)
                    {
                        Source.Insert(row - 2, attribute);
                    }
                    else
                    {
                        Source.Add(attribute);
                    }
                }
                AddDefaultAttributes(grandParent);
            }
            treeList.RefreshData();
            treeList.SelectedItems = attributes;
            if (Changed != null)
            {
                Changed();
            }
        }
        protected Domain.Attribute GetCopy(Domain.Attribute attribute)
        {
            Domain.Attribute copy = new Domain.Attribute();

            copy.name      = "Copy Of " + attribute.name;
            copy.IsDefault = false;
            copy.position  = attribute.position;
            copy.parent    = null;
            foreach (Domain.Attribute child in attribute.childrenListChangeHandler.Items)
            {
                Domain.Attribute childcopy = GetCopy(child);
                copy.AddChild(childcopy);
                childcopy.parent = null;
            }
            return(copy);
        }
        private void OnIndentClick(object sender, RoutedEventArgs e)
        {
            List <Domain.Attribute> attributes = GetSelectedValues();

            if (attributes.Count == 0)
            {
                return;
            }
            attributes.BubbleSort();
            foreach (Domain.Attribute attribute in attributes)
            {
                Domain.Attribute parent = attribute.parent;
                if (parent == null)
                {
                    parent = this.Root;
                }
                int position             = attribute.GetPosition();
                Domain.Attribute brother = (Domain.Attribute)parent.GetChildByPosition(position - 1);
                if (brother == null)
                {
                    return;
                }
                ForgetDefaultAttributes(parent);
                parent.ForgetChild(attribute);
                brother.AddChild(attribute);
                brother.related    = true;
                brother.IsExpanded = true;

                int row = Source.IndexOf(brother);
                Source.Remove(brother);
                Source.Insert(row, brother);
                AddDefaultAttributes(parent);
            }
            treeList.RefreshData();
            treeList.SelectedItems = attributes;
            if (Changed != null)
            {
                Changed();
            }
        }
        private void OnNewClick(object sender, RoutedEventArgs e)
        {
            Domain.Attribute parent = GetSelectedValue();
            if (IsUsedToGenerateUniverse(parent))
            {
                return;
            }
            Kernel.Domain.Attribute attribute = GetNewAttribute();
            if (parent == null)
            {
                parent = this.Root;
            }
            if (parent != null)
            {
                ForgetDefaultAttributes(parent);
                parent.AddChild(attribute);
                parent.related = true;
                AddDefaultAttributes(parent);

                int row = Source.Count;
                Source.Remove(attribute);
                if (row - 2 >= 0)
                {
                    Source.Insert(row - 2, attribute);
                }
                else
                {
                    Source.Add(attribute);
                }
                SetSelectedValue(attribute);

                if (Changed != null)
                {
                    Changed();
                }
            }
        }