public BranchContext(LayoutStructureBranch parent, bool isSecond) { if (parent == null) { throw new ArgumentNullException(nameof(parent)); } Parent = parent; IsSecond = isSecond; }
private static IEnumerable <Guid> ChildBranchIds(LayoutStructureBranch branch) { if (branch.ChildFirstBranchId.HasValue) { yield return(branch.ChildFirstBranchId.Value); } if (branch.ChildSecondBranchId.HasValue) { yield return(branch.ChildSecondBranchId.Value); } }
private static void VisitAndDocumentChildren(BranchAccessor branchAccessor, BranchContext context, ICollection <LayoutStructureBranch> branches, ICollection <LayoutStructureTabSet> layoutStructureTabSets) { //figure out the current ID: if there is no context, this is //root, otherwise, the parent will have assigned the id Guid id; if (context == null) { id = Guid.NewGuid(); } else { id = context.IsSecond ? context.Parent.ChildSecondBranchId.Value : context.Parent.ChildFirstBranchId.Value; } //document the current branch var layoutStructureBranch = new LayoutStructureBranch( id, IdOrNull(branchAccessor.FirstItemBranchAccessor), IdOrNull(branchAccessor.SecondItemBranchAccessor), IdOrNull(branchAccessor.FirstItemTabablzControl), IdOrNull(branchAccessor.SecondItemTabablzControl), branchAccessor.Branch.Orientation, branchAccessor.Branch.GetFirstProportion()); branches.Add(layoutStructureBranch); //run throw the child branches or tab controls if (branchAccessor.FirstItemBranchAccessor != null) { VisitAndDocumentChildren(branchAccessor.FirstItemBranchAccessor, new BranchContext(layoutStructureBranch, false), branches, layoutStructureTabSets); } else { DocumentTabSet(layoutStructureBranch.ChildFirstTabSetId.Value, branchAccessor.FirstItemTabablzControl, layoutStructureTabSets); } if (branchAccessor.SecondItemBranchAccessor != null) { VisitAndDocumentChildren(branchAccessor.SecondItemBranchAccessor, new BranchContext(layoutStructureBranch, true), branches, layoutStructureTabSets); } else { DocumentTabSet(layoutStructureBranch.ChildSecondTabSetId.Value, branchAccessor.SecondItemTabablzControl, layoutStructureTabSets); } }
private static IEnumerable <Tuple <Guid, TabablzControl> > BuildLayout( TabablzControl intoTabablzControl, LayoutStructureBranch layoutStructureBranch, IDictionary <Guid, LayoutStructureBranch> layoutStructureBranchIndex) { var newSiblingTabablzControl = new TabablzControl(); var branchResult = Layout.Branch(intoTabablzControl, newSiblingTabablzControl, layoutStructureBranch.Orientation, false, layoutStructureBranch.Ratio); var newInterTabController = new InterTabController { Partition = intoTabablzControl.InterTabController.Partition, InterTabClient = intoTabablzControl.InterTabController.InterTabClient }; CaliburnInterLayoutClient.Clone(intoTabablzControl.InterTabController, newInterTabController); newSiblingTabablzControl.SetCurrentValue(TabablzControl.InterTabControllerProperty, newInterTabController); if (layoutStructureBranch.ChildFirstBranchId.HasValue) { var firstChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildFirstBranchId.Value]; foreach (var tuple in BuildLayout(intoTabablzControl, firstChildBranch, layoutStructureBranchIndex)) { yield return(tuple); } } else if (layoutStructureBranch.ChildFirstTabSetId.HasValue) { SetTabSetId(intoTabablzControl, layoutStructureBranch.ChildFirstTabSetId.Value); yield return(new Tuple <Guid, TabablzControl>(layoutStructureBranch.ChildFirstTabSetId.Value, intoTabablzControl)); } if (layoutStructureBranch.ChildSecondBranchId.HasValue) { var secondChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildSecondBranchId.Value]; foreach (var tuple in BuildLayout(branchResult.TabablzControl, secondChildBranch, layoutStructureBranchIndex)) { yield return(tuple); } } else if (layoutStructureBranch.ChildSecondTabSetId.HasValue) { SetTabSetId(newSiblingTabablzControl, layoutStructureBranch.ChildSecondTabSetId.Value); yield return(new Tuple <Guid, TabablzControl>(layoutStructureBranch.ChildSecondTabSetId.Value, newSiblingTabablzControl)); } }
private static IEnumerable <Tuple <Guid, TabablzControl> > BuildLayout( TabablzControl intoTabablzControl, LayoutStructureBranch layoutStructureBranch, IDictionary <Guid, LayoutStructureBranch> layoutStructureBranchIndex) { var newSiblingTabablzControl = CreateTabablzControl(); var branchResult = Layout.Branch(intoTabablzControl, newSiblingTabablzControl, layoutStructureBranch.Orientation, false, layoutStructureBranch.Ratio); if (layoutStructureBranch.ChildFirstBranchId.HasValue) { var firstChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildFirstBranchId.Value]; foreach (var tuple in BuildLayout(intoTabablzControl, firstChildBranch, layoutStructureBranchIndex)) { yield return(tuple); } } else if (layoutStructureBranch.ChildFirstTabSetId.HasValue) { SetTabSetId(intoTabablzControl, layoutStructureBranch.ChildFirstTabSetId.Value); yield return(new Tuple <Guid, TabablzControl>(layoutStructureBranch.ChildFirstTabSetId.Value, intoTabablzControl)); } if (layoutStructureBranch.ChildSecondBranchId.HasValue) { var secondChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildSecondBranchId.Value]; foreach (var tuple in BuildLayout(branchResult.TabablzControl, secondChildBranch, layoutStructureBranchIndex)) { yield return(tuple); } } else if (layoutStructureBranch.ChildSecondTabSetId.HasValue) { SetTabSetId(newSiblingTabablzControl, layoutStructureBranch.ChildSecondTabSetId.Value); yield return(new Tuple <Guid, TabablzControl>(layoutStructureBranch.ChildSecondTabSetId.Value, newSiblingTabablzControl)); } }
private static Grid PopulateWindowBranch( LayoutStructureWindow layoutStructureWindow, LayoutStructureBranch layoutStructureBranch, IDictionary <Guid, LayoutStructureBranch> layoutStructureBranchIndex) { var resultGrid = new Grid(); (int Row, int Column)firstItem = (0, 0); (int Row, int Column)secondItem = layoutStructureBranch.Orientation == Orientation.Vertical ? (1, 0) : (0, 1); if (layoutStructureBranch.Orientation == Orientation.Vertical) { RowDefinition gridRow1 = new RowDefinition() { Height = new GridLength(layoutStructureBranch.Ratio, GridUnitType.Star) }; RowDefinition gridRow2 = new RowDefinition() { Height = new GridLength(1 - layoutStructureBranch.Ratio, GridUnitType.Star) }; resultGrid.RowDefinitions.Add(gridRow1); resultGrid.RowDefinitions.Add(gridRow2); } else { ColumnDefinition gridCol1 = new ColumnDefinition() { Width = new GridLength(layoutStructureBranch.Ratio, GridUnitType.Star) }; ColumnDefinition gridCol2 = new ColumnDefinition() { Width = new GridLength(1 - layoutStructureBranch.Ratio, GridUnitType.Star) }; resultGrid.ColumnDefinitions.Add(gridCol1); resultGrid.ColumnDefinitions.Add(gridCol2); } if (layoutStructureBranch.ChildFirstBranchId.HasValue) { var firstChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildFirstBranchId.Value]; var newChild = PopulateWindowBranch(layoutStructureWindow, firstChildBranch, layoutStructureBranchIndex); Grid.SetRow(newChild, firstItem.Row); Grid.SetColumn(newChild, firstItem.Column); resultGrid.Children.Add(newChild); } else if (layoutStructureBranch.ChildFirstTabSetId.HasValue) { var newChild = GetTabBorder(GetIcon(layoutStructureWindow.TabSets.Single(t => t.Id == layoutStructureBranch.ChildFirstTabSetId.Value).TabItems.FirstOrDefault()?.ViewModelType));//TODO multiple icons Grid.SetRow(newChild, firstItem.Row); Grid.SetColumn(newChild, firstItem.Column); resultGrid.Children.Add(newChild); } if (layoutStructureBranch.ChildSecondBranchId.HasValue) { var secondChildBranch = layoutStructureBranchIndex[layoutStructureBranch.ChildSecondBranchId.Value]; var newChild = PopulateWindowBranch(layoutStructureWindow, secondChildBranch, layoutStructureBranchIndex); Grid.SetRow(newChild, secondItem.Row); Grid.SetColumn(newChild, secondItem.Column); resultGrid.Children.Add(newChild); } else if (layoutStructureBranch.ChildSecondTabSetId.HasValue) { var newChild = GetTabBorder(GetIcon(layoutStructureWindow.TabSets.Single(t => t.Id == layoutStructureBranch.ChildSecondTabSetId.Value).TabItems.FirstOrDefault()?.ViewModelType));//TODO multiple icons Grid.SetRow(newChild, secondItem.Row); Grid.SetColumn(newChild, secondItem.Column); resultGrid.Children.Add(newChild); } return(resultGrid); }