Beispiel #1
0
        private void MergeLayout(DockItemLayout source, AncestorsEnumerator <DockItemLayout> ancestors)
        {
            var mergeLayout = Items.GetItemLayout(source.ItemName);

            if (mergeLayout == null)
            {
                mergeLayout = source.Clone(DockItemLayoutCloneMode.BaseProperties);

                Items.Add(mergeLayout);
            }

            if (source.HasLocalValue(DockItemLayout.DockStateProperty))
            {
                mergeLayout.DockState = source.DockState;
            }
            else
            {
                var rootLayout = ancestors.Enumerate().FirstOrDefault(a => a.HasLocalValue(DockItemLayout.DockStateProperty));

                if (rootLayout != null)
                {
                    mergeLayout.DockState = rootLayout.DockState;
                }
            }

            foreach (var property in source.FullLayoutProperties)
            {
                if (source.HasLocalValue(property) == false)
                {
                    continue;
                }

                mergeLayout.SetValue(property, source.GetValue(property));
            }

            if (!(source is DockItemGroupLayout containerLayout))
            {
                return;
            }

            var mergeContainer = (DockItemGroupLayout)mergeLayout;

            foreach (var childItemLayout in containerLayout.Items)
            {
                if (mergeContainer.Items.Contains(childItemLayout.ItemName))
                {
                    continue;
                }

                var childLink = childItemLayout.Clone(DockItemLayoutCloneMode.Instance);

                childLink.ItemName = childItemLayout.ItemName;
                mergeContainer.Items.Add(childLink);
            }
        }
Beispiel #2
0
        private XElement WriteToXElement(DockItemLayout layout)
        {
            var layoutXml = layout.Xml;

            if (layout is DockItemGroupLayout groupLayout)
            {
                WriteToXElement(groupLayout.Items, layoutXml);
            }

            return(layoutXml);
        }
Beispiel #3
0
        private static void BuildIndices(DockItemLayoutCollection itemLayoutCollection)
        {
            var index = 0;

            foreach (var item in itemLayoutCollection)
            {
                DockItemLayout.SetIndex(item, index++);

                if (item is DockItemGroupLayout groupItemLayout)
                {
                    BuildIndices(groupItemLayout.Items);
                }
            }
        }
Beispiel #4
0
        void IDockItemLayoutCollectionOwner.OnItemRemoved(DockItemLayout dockItemLayout)
        {
            dockItemLayout.Layout = null;

            OnLayoutChanged();
        }
Beispiel #5
0
        void IDockItemLayoutCollectionOwner.OnItemAdded(DockItemLayout dockItemLayout)
        {
            dockItemLayout.Layout = this;

            OnLayoutChanged();
        }
Beispiel #6
0
 private static IEnumerator <DockItemLayout> GetChildrenEnumerator(DockItemLayout w)
 {
     return((w.IsSimple() ? Enumerable.Empty <DockItemLayout>() : ((DockItemGroupLayout)w).Items).GetEnumerator());
 }
Beispiel #7
0
 internal DockItemLayout(DockItemLayout source, DockItemLayoutCloneMode mode)
 {
     CopyMembers(source, mode);
 }