public BranchContext(LayoutStructureBranch parent, bool isSecond)
            {
                if (parent == null)
                {
                    throw new ArgumentNullException(nameof(parent));
                }

                Parent   = parent;
                IsSecond = isSecond;
            }
Exemplo n.º 2
0
 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));
            }
        }
Exemplo n.º 5
0
        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);
        }