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); } }
private XElement WriteToXElement(DockItemLayout layout) { var layoutXml = layout.Xml; if (layout is DockItemGroupLayout groupLayout) { WriteToXElement(groupLayout.Items, layoutXml); } return(layoutXml); }
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); } } }
void IDockItemLayoutCollectionOwner.OnItemRemoved(DockItemLayout dockItemLayout) { dockItemLayout.Layout = null; OnLayoutChanged(); }
void IDockItemLayoutCollectionOwner.OnItemAdded(DockItemLayout dockItemLayout) { dockItemLayout.Layout = this; OnLayoutChanged(); }
private static IEnumerator <DockItemLayout> GetChildrenEnumerator(DockItemLayout w) { return((w.IsSimple() ? Enumerable.Empty <DockItemLayout>() : ((DockItemGroupLayout)w).Items).GetEnumerator()); }
internal DockItemLayout(DockItemLayout source, DockItemLayoutCloneMode mode) { CopyMembers(source, mode); }