public virtual void Dock(IDockTile dockie, DockTileDirection dockDirection) { ISplitDockTile node = null; switch (dockDirection) { case DockTileDirection.Left: case DockTileDirection.Right: node = new HorizontalSplitViewModel(); break; case DockTileDirection.Top: case DockTileDirection.Bottom: node = new VerticalSplitViewModel(); break; } switch (dockDirection) { case DockTileDirection.Left: case DockTileDirection.Top: node.LeftNode = dockie; node.RightNode = this; break; case DockTileDirection.Right: case DockTileDirection.Bottom: node.LeftNode = this; node.RightNode = dockie; break; } Parent.ReplaceNode(this, node); //Place both parents DOH! this.Parent = node; dockie.Parent = node; }
/// <summary> /// This will move an item to the new lovation. /// </summary> /// <param name="item"></param> /// <param name="destinationItem"></param> /// <param name="dockDirection"></param> public void MoveTile(Object destinationItem, Object item, DockTileDirection dockDirection) { if (ObjectToDocktileMap.ContainsKey(item)) { RemoveTile(item); AddTile(destinationItem, item, dockDirection); } }
private DockTileDirection DetermineDirectionDropped(Size element, Point dropPoint) { Point center = GetCenterOfSize(element); Point pointFromOrigin = GetOffsetFromCenter(center, dropPoint); Point rotatedPoint = RotatePointInRespectToCenter(pointFromOrigin); DockTileDirection direction = QuadrentToDirection(rotatedPoint); return(direction); }
public void Drop(IDropInfo dropInfo) { // TODO(Matthew) clean this up a bit DockTileDirection direction = DetermineDirectionDropped(dropInfo.VisualTarget.RenderSize, dropInfo.DropPosition); var data = dropInfo.Data; var target = (dropInfo.VisualTarget as FrameworkElement).DataContext; View.MoveTile(target, data, direction); }
/// <summary> /// Adds a new Item to the DockTile Configuration /// </summary> /// <param name="destinationItem">This is the base item that the new item will dock to</param> /// <param name="item">This is the item that you wish to display, this item cannot already be apart of the DockTiles</param> /// <param name="dockDirection">The basic cardinal direction of that the item will dock to the base item</param> public void AddTile(Object destinationItem, Object item, DockTileDirection dockDirection) { // NOTE(MATTHEW): if we have the item in the map and the person is not docking an item to itself. if (ObjectToDocktileMap.ContainsKey(item) || ObjectToDocktileMap.ContainsValue(item as IDockTile)) { // TODO(Matthew): decide what the default behavior for this stuff truly is. throw new Exception(); } if (destinationItem != item && ObjectToDocktileMap.ContainsKey(destinationItem)) { IDockTile baseDockTile = null; IDockTile dockedItem = new LeafViewModel() { Item = item }; ObjectToDocktileMap.TryGetValue(destinationItem, out baseDockTile); ObjectToDocktileMap.Add(item, dockedItem); if (baseDockTile.Parent != null) { baseDockTile.Dock(dockedItem, dockDirection); } } }