public BranchResult(Branch branch, TabablzControl tabablzControl) { if (branch == null) throw new ArgumentNullException("branch"); if (tabablzControl == null) throw new ArgumentNullException("tabablzControl"); _branch = branch; _tabablzControl = tabablzControl; }
internal LocationReport(TabablzControl tabablzControl, Layout rootLayout, Branch parentBranch, bool isSecondLeaf) { if (tabablzControl == null) throw new ArgumentNullException("tabablzControl"); if (rootLayout == null) throw new ArgumentNullException("rootLayout"); _tabablzControl = tabablzControl; _rootLayout = rootLayout; _parentBranch = parentBranch; _isLeaf = _parentBranch != null; _isSecondLeaf = isSecondLeaf; }
public BranchAccessor(Branch branch) { if (branch == null) throw new ArgumentNullException("branch"); _branch = branch; var firstChildBranch = branch.FirstItem as Branch; if (firstChildBranch != null) _firstItemBranchAccessor = new BranchAccessor(firstChildBranch); else _firstItemTabablzControl = FindTabablzControl(branch.FirstItem, branch.FirstContentPresenter); var secondChildBranch = branch.SecondItem as Branch; if (secondChildBranch != null) _secondItemBranchAccessor = new BranchAccessor(secondChildBranch); else _secondItemTabablzControl = FindTabablzControl(branch.SecondItem, branch.SecondContentPresenter); }
private static BranchResult Branch(Orientation orientation, double proportion, bool makeSecond, DataTemplate branchTemplate, object existingContent, Action<Branch> applier) { var branchItem = new Branch { Orientation = orientation }; var newContent = new ContentControl { Content = new object(), ContentTemplate = branchTemplate, }; if (!makeSecond) { branchItem.FirstItem = existingContent; branchItem.SecondItem = newContent; } else { branchItem.FirstItem = newContent; branchItem.SecondItem = existingContent; } branchItem.SetCurrentValue(Dockablz.Branch.FirstItemLengthProperty, new GridLength(proportion, GridUnitType.Star)); branchItem.SetCurrentValue(Dockablz.Branch.SecondItemLengthProperty, new GridLength(1-proportion, GridUnitType.Star)); applier(branchItem); newContent.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.Loaded); var newTabablzControl = newContent.VisualTreeDepthFirstTraversal().OfType<TabablzControl>().FirstOrDefault(); if (newTabablzControl == null) throw new ApplicationException("New TabablzControl was not generated inside branch."); return new BranchResult(branchItem, newTabablzControl); }
private void Branch(DropZoneLocation location, DragablzItem sourceDragablzItem) { if (InterLayoutClient == null) throw new InvalidOperationException("InterLayoutClient is not set."); var sourceOfDragItemsControl = ItemsControl.ItemsControlFromItemContainer(sourceDragablzItem) as DragablzItemsControl; if (sourceOfDragItemsControl == null) throw new ApplicationException("Unable to determin source items control."); var sourceTabControl = TabablzControl.GetOwnerOfHeaderItems(sourceOfDragItemsControl); if (sourceTabControl == null) throw new ApplicationException("Unable to determin source tab control."); var floatingItemSnapShots = sourceTabControl.VisualTreeDepthFirstTraversal() .OfType<Layout>() .SelectMany(l => l.FloatingDragablzItems().Select(FloatingItemSnapShot.Take)) .ToList(); var sourceItem = sourceOfDragItemsControl.ItemContainerGenerator.ItemFromContainer(sourceDragablzItem); sourceTabControl.RemoveItem(sourceDragablzItem); var branchItem = new Branch { Orientation = (location == DropZoneLocation.Right || location == DropZoneLocation.Left) ? Orientation.Horizontal : Orientation.Vertical }; object newContent; if (BranchTemplate == null) { var newTabHost = InterLayoutClient.GetNewHost(Partition, sourceTabControl); if (newTabHost == null) throw new ApplicationException("InterLayoutClient did not provide a new tab host."); newTabHost.TabablzControl.AddToSource(sourceItem); newTabHost.TabablzControl.SelectedItem = sourceItem; newContent = newTabHost.Container; Dispatcher.BeginInvoke(new Action(() => RestoreFloatingItemSnapShots(newTabHost.TabablzControl, floatingItemSnapShots)), DispatcherPriority.Loaded); } else { newContent = new ContentControl { Content = new object(), ContentTemplate = BranchTemplate, }; ((ContentControl) newContent).Dispatcher.BeginInvoke(new Action(() => { //TODO might need to improve this a bit, make it a bit more declarative for complex trees var newTabControl = ((ContentControl)newContent).VisualTreeDepthFirstTraversal().OfType<TabablzControl>().FirstOrDefault(); if (newTabControl == null) return; newTabControl.DataContext = sourceTabControl.DataContext; newTabControl.AddToSource(sourceItem); newTabControl.SelectedItem = sourceItem; Dispatcher.BeginInvoke(new Action(() => RestoreFloatingItemSnapShots(newTabControl, floatingItemSnapShots)), DispatcherPriority.Loaded); }), DispatcherPriority.Loaded); } if (location == DropZoneLocation.Right || location == DropZoneLocation.Bottom) { branchItem.FirstItem = Content; branchItem.SecondItem = newContent; } else { branchItem.FirstItem = newContent; branchItem.SecondItem = Content; } SetCurrentValue(ContentProperty, branchItem); }