示例#1
0
 internal DockPaneSplit(DockPaneNode child1, DockPaneNode child2, Orientation orientation, bool isSplitterTopLeft, SplitterDistance splitterDistance)
 {
     Child1            = child1;
     Child2            = child2;
     Orientation       = orientation;
     IsSplitterTopLeft = isSplitterTopLeft;
     SplitterDistance  = splitterDistance;
 }
 private static void SetAutoHideSize(DockItem dockItem, SplitterDistance value)
 {
     dockItem.AutoHideSize = value;
     if (DockPositionHelper.IsAutoHide(dockItem.DockPosition) && !dockItem.IsSelected)
     {
         dockItem.Show(DockItemShowMethod.Select);
     }
 }
 public bool Merge(DockControl dockControl, ResizeDockTreeData newValue)
 {
     if (newValue.Dock != Dock)
     {
         return(false);
     }
     _newValue = newValue.Value;
     return(true);
 }
示例#4
0
 internal ShowAsSidePaneAction(int source, int target, bool isFloating, int ancestorLevel, bool isAutoHide, Dock side, SplitterDistance size, bool isSizeForTarget, DockItemShowMethod showMethod)
     : base(source, target, isFloating, showMethod)
 {
     _ancestorLevel   = ancestorLevel;
     _isAutoHide      = isAutoHide;
     _side            = side;
     _size            = size;
     _isSizeForTarget = isSizeForTarget;
 }
示例#5
0
 private ShowAsSidePaneCommand(DockItem dockItem, DockPaneNode paneNode, bool isAutoHide, Dock side, SplitterDistance size, bool isSizeForTarget, DockItemShowMethod showMethod)
     : base(dockItem, showMethod)
 {
     TargetPaneNode   = paneNode;
     _isAutoHide      = isAutoHide;
     _side            = side;
     _size            = size;
     _isSizeForTarget = isSizeForTarget;
 }
示例#6
0
 internal NestedDockEntry(DockPane sourcePane, DockItem targetItem, int ancestorSplitLevel, Dock dock, SplitterDistance splitterDistance, bool swapChildren)
 {
     Debug.Assert(targetItem != null);
     _sourcePane         = sourcePane;
     _targetItem         = targetItem;
     _ancestorSplitLevel = ancestorSplitLevel;
     _dock             = dock;
     _splitterDistance = splitterDistance;
     _swapChildren     = swapChildren;
 }
            public bool Merge(DockControl dockControl, UpdateAutoHideSizeData value)
            {
                if (GetDockItem(dockControl) != value.DockItem)
                {
                    return(false);
                }

                _newValue = value.Value;
                return(true);
            }
            public bool Reset(DockControl dockControl, ResizeDockTreeData oldValue, ResizeDockTreeData newValue)
            {
                Debug.Assert(oldValue.Dock == newValue.Dock);
                if (oldValue.Dock != Dock)
                {
                    return(false);
                }

                _oldValue = oldValue.Value;
                _newValue = newValue.Value;
                return(true);
            }
示例#9
0
            private static ShowAction GetShowAsSidePaneAction(DockItem item, DockPane pane)
            {
                DockPaneSplit split = pane.Parent;

                Debug.Assert(split != null);
                DockPaneNode targetPaneNode = split.Child1 == pane ? split.Child2 : split.Child1;

                Debug.Assert(targetPaneNode != null);
                DockPaneNodeStruct targetPaneNodeStruct = DockPaneNodeStruct.FromDockPaneNode(targetPaneNode);
                bool swapChildren = split.Child1 == targetPaneNode;
                Dock side;

                if (split.Orientation == Orientation.Horizontal)
                {
                    if (split.IsSplitterTopLeft)
                    {
                        side = Dock.Left;
                    }
                    else
                    {
                        side = Dock.Right;
                    }
                }
                else
                {
                    if (split.IsSplitterTopLeft)
                    {
                        side = Dock.Top;
                    }
                    else
                    {
                        side = Dock.Bottom;
                    }
                }
                SplitterDistance splitterDistance = split.SplitterDistance;

                int  source                   = pane.DockControl.DockItems.IndexOf(item);
                int  targetIndex              = targetPaneNodeStruct.ItemIndex;
                bool isFloating               = targetPaneNodeStruct.IsFloating;
                int  ancestorLevel            = targetPaneNodeStruct.AncestorLevel;
                bool isAutoHide               = pane.IsAutoHide;
                DockItemShowMethod showMethod = GetShowMethod(item, pane);

                return(new ShowAsSidePaneAction(source, targetIndex, isFloating, ancestorLevel, isAutoHide, side, splitterDistance, swapChildren, showMethod));
            }
示例#10
0
        private ShowAsSidePaneAction GetShowAsSidePaneAction(DockItem sourceItem, DockPane sourcePane, DockPane targetPane, int ancestorSplitLevel, DockPaneSplit split, DockItemShowMethod showMethod)
        {
            Debug.Assert(sourceItem != null);
            Debug.Assert(targetPane != null);

            Dock side;

            if (split.Orientation == Orientation.Horizontal)
            {
                if (split.IsSplitterTopLeft)
                {
                    side = Dock.Left;
                }
                else
                {
                    side = Dock.Right;
                }
            }
            else
            {
                if (split.IsSplitterTopLeft)
                {
                    side = Dock.Top;
                }
                else
                {
                    side = Dock.Bottom;
                }
            }

            SplitterDistance splitterDistance = split.SplitterDistance;

            DockPaneSplit child1Split  = split.Child1 as DockPaneSplit;
            bool          swapChildren = split.Child1 == targetPane || (child1Split != null && child1Split.IsParentOf(targetPane));

            int      source     = GetIndex(sourceItem);
            DockItem targetItem = GetItems(targetPane)[0];

            Debug.Assert(targetPane.Items.Contains(targetItem));
            int  targetIndex = GetIndex(targetItem);
            bool isAutoHide  = sourcePane.IsAutoHide;

            return(new ShowAsSidePaneAction(source, targetIndex, targetPane.IsFloating, ancestorSplitLevel, isAutoHide, side, splitterDistance, swapChildren, showMethod));
        }
示例#11
0
 private void SetSplitterDistance(Dock dock, SplitterDistance value)
 {
     if (dock == Dock.Left)
     {
         DockControl.LeftDockTreeWidth = value;
     }
     else if (dock == Dock.Right)
     {
         DockControl.RightDockTreeWidth = value;
     }
     else if (dock == Dock.Top)
     {
         DockControl.TopDockTreeHeight = value;
     }
     else
     {
         Debug.Assert(dock == Dock.Bottom);
         DockControl.BottomDockTreeHeight = value;
     }
 }
示例#12
0
        internal void UpdateSplitterDistance()
        {
            if (_flagUpdateSplitterDistance)
            {
                return;
            }

            _flagUpdateSplitterDistance = true;
            try
            {
                Dock             position = Position;
                SplitterDistance distance = GetSplitterDistance(position);
                SplitterDistance distanceToSet;
                if (distance.IsAutoStar)
                {
                    distanceToSet = SplitterDistance.AutoPixel;
                }
                else if (distance.IsStar)
                {
                    double proportion = distance.Value / (distance.Value + 1);
                    if (Orientation == Orientation.Horizontal)
                    {
                        distanceToSet = new SplitterDistance(DockTreeClient.ClientSize.Width * proportion, SplitterUnitType.Pixel);
                    }
                    else
                    {
                        distanceToSet = new SplitterDistance(DockTreeClient.ClientSize.Height * proportion, SplitterUnitType.Pixel);
                    }
                }
                else
                {
                    distanceToSet = distance;
                }

                SplitterDistance = distanceToSet;
            }
            finally
            {
                _flagUpdateSplitterDistance = false;
            }
        }
示例#13
0
        private void OnSplitterDistanceChanged(SplitterDistance newValue)
        {
            if (_flagUpdateSplitterDistance || DockControl == null)
            {
                return;
            }

            _flagUpdateSplitterDistance = true;
            try
            {
                Dock             position = Position;
                SplitterDistance oldValue = GetSplitterDistance(position);
                SplitterDistance valueToSet;

                if (oldValue.IsAutoStar || oldValue.IsStar)
                {
                    if (newValue.IsAuto)
                    {
                        valueToSet = SplitterDistance.AutoStar;
                    }
                    else
                    {
                        Size   clientSize  = DockTreeClient.ClientSize;
                        double totalLength = Position == Dock.Left || Position == Dock.Right ? clientSize.Width : clientSize.Height;
                        double starValue   = Math.Max(newValue.Value / (totalLength - newValue.Value), 0);
                        valueToSet = new SplitterDistance(starValue, SplitterUnitType.Star);
                    }
                }
                else
                {
                    valueToSet = newValue;
                }

                SetSplitterDistance(position, valueToSet);
            }
            finally
            {
                _flagUpdateSplitterDistance = false;
            }
        }
示例#14
0
        private static NestedDockEntry GetNestedDockEntry(DockPane sourcePane, DockPane targetPane, int ancestorSplitLevel, DockPaneSplit split)
        {
            Debug.Assert(sourcePane != null);
            Debug.Assert(targetPane != null);
            Debug.Assert(targetPane.SelectedItem != null);

            Dock dock;

            if (split.Orientation == Orientation.Horizontal)
            {
                if (split.IsSplitterTopLeft)
                {
                    dock = Dock.Left;
                }
                else
                {
                    dock = Dock.Right;
                }
            }
            else
            {
                if (split.IsSplitterTopLeft)
                {
                    dock = Dock.Top;
                }
                else
                {
                    dock = Dock.Bottom;
                }
            }

            SplitterDistance splitterDistance = split.SplitterDistance;

            DockPaneSplit child1Split  = split.Child1 as DockPaneSplit;
            bool          swapChildren = split.Child1 == targetPane || (child1Split != null && child1Split.IsParentOf(targetPane));

            return(new NestedDockEntry(sourcePane, targetPane.SelectedItem, ancestorSplitLevel, dock, splitterDistance, swapChildren));
        }
 protected ResizeDockTreeCommandBase(SplitterDistance oldValue, SplitterDistance newValue)
 {
     _oldValue = oldValue;
     _newValue = newValue;
 }
 public ResizeRightDockTreeCommand(SplitterDistance oldValue, SplitterDistance newValue)
     : base(oldValue, newValue)
 {
 }
示例#17
0
 public void BeginDrag(SplitContainer splitContainer, MouseEventArgs e)
 {
     _splitContainer = splitContainer;
     _originalSplitterDistance = _splitContainer.SplitterDistance;
     _offsetX = _offsetY = 0;
     Debug.Assert(splitContainer.Splitter != null);
     DragDetect((UIElement)VisualTreeHelper.GetChild(splitContainer.Splitter, 0), e);
 }
示例#18
0
            public static void Execute(DockItem dockItem, DockPaneNode paneNode, bool isAutoHide, Dock side, SplitterDistance size, bool isSizeForTarget, DockItemShowMethod showMethod)
            {
                DockControl dockControl = paneNode.DockControl;

                Debug.Assert(dockControl != null);
                if (TestUndo(dockItem, dockControl))
                {
                    dockControl.ExecuteCommand(new ShowAsSidePaneCommand(dockItem, paneNode, isAutoHide, side, size, isSizeForTarget, showMethod));
                }
                else // if (dockItem.DockControl == dockControl) Fix for 1.1.3730: this condition will prevent unattached DockItem from showing
                {
                    dockItem.DoShowAsSidePane(paneNode, isAutoHide, side, size, isSizeForTarget, showMethod);
                }
            }
            public ShowAsSidePaneEventArgs(DockItem dockItem, DockPaneNode paneNode, bool isAutoHide, Dock side, SplitterDistance size, bool isSizeForTarget, DockItemShowMethod showMethod)
                : base(dockItem, paneNode.DockControl, showMethod)
            {
                ShowAsSidePaneAction showAction     = StrongTypeShowAction;
                DockPaneNodeStruct   paneNodeStruct = DockPaneNodeStruct.FromDockPaneNode(paneNode);

                showAction.Target          = paneNodeStruct.ItemIndex;
                showAction.IsFloating      = paneNodeStruct.IsFloating;
                showAction.AncestorLevel   = paneNodeStruct.AncestorLevel;
                showAction.IsAutoHide      = isAutoHide;
                showAction.Side            = side;
                showAction.Size            = size;
                showAction.IsSizeForTarget = isSizeForTarget;
            }
 public UpdateAutoHideSizeData(DockItem dockItem, SplitterDistance value)
 {
     DockItem = dockItem;
     Value    = value;
 }
示例#21
0
 internal static string ToString(SplitterDistance distance, CultureInfo cultureInfo)
 {
     if (distance.IsAutoPixel)
         return "Auto";
     else if (distance.IsAutoStar)
         return "Auto*";
     else if (distance.UnitType == SplitterUnitType.Star)
     {
         if (DoubleUtil.IsOne(distance.Value))
             return "*";
         else
             return (Convert.ToString(distance.Value, cultureInfo) + "*");
     }
     else
         return Convert.ToString(distance.Value, cultureInfo);
 }
示例#22
0
        private void InitializeSplitterDistance()
        {
            double?splitterDistance = SettingServices.GetMultiTablePageControlSplitterDistance();

            SplitterDistance = new SplitterDistance(splitterDistance.HasValue ? splitterDistance.Value : 0, SplitterUnitType.Star);
        }
        private void InitializeSplitterDistance()
        {
            double?splitterDistance = SettingServices.GetTreeViewWellSplitterDistance();

            SplitterDistance = new SplitterDistance(splitterDistance.HasValue ? splitterDistance.Value : 0, SplitterUnitType.Star);
        }
示例#24
0
        internal DockPane AddItem(DockItem item, DockPaneNode targetPaneNode, bool isAutoHide, Dock side, SplitterDistance size, bool isSizeForTarget)
        {
            Debug.Assert(targetPaneNode.DockTree == this);

            DockPane pane = DockControl.PaneManager.CreatePane(item, isAutoHide);

            AddDirtyNode(pane);
            AddDirtyNode(targetPaneNode);

            DockPaneSplit parent            = targetPaneNode.Parent;
            DockPaneNode  child1            = side == Dock.Left || side == Dock.Top ? pane : targetPaneNode;
            DockPaneNode  child2            = side == Dock.Left || side == Dock.Top ? targetPaneNode : pane;
            Orientation   orientation       = side == Dock.Left || side == Dock.Right ? Orientation.Horizontal : Orientation.Vertical;
            bool          isSplitterTopLeft = isSizeForTarget ? child1 == targetPaneNode : child2 == targetPaneNode;

            targetPaneNode.ClearParent();
            DockPaneSplit newSplit;

            newSplit = new DockPaneSplit(child1, child2, orientation, isSplitterTopLeft, size);
            AddDirtyNode(newSplit);
            if (parent != null)
            {
                AddDirtyNode(parent);
                parent.SetSibling(parent.GetSibling(targetPaneNode), newSplit);
            }
            else
            {
                SetRootNode(newSplit, false);
            }
            AddPaneToCollection(pane);
            Debug.Assert(newSplit.Child1 != null);
            Debug.Assert(newSplit.Child1.Parent == newSplit);
            Debug.Assert(newSplit.Child2 != null);
            Debug.Assert(newSplit.Child2.Parent == newSplit);
            return(pane);
        }
示例#25
0
        private static bool ValidateSplitterDistance(object value)
        {
            SplitterDistance distance = (SplitterDistance)value;

            return(!distance.IsStar && !distance.IsAutoStar);
        }
示例#26
0
 public ResizeDockTreeData(Dock dock, SplitterDistance value)
 {
     Dock  = dock;
     Value = value;
 }
 public UpdateAutoHideSizeCommand(DockItem dockItem, SplitterDistance oldValue, SplitterDistance newValue)
 {
     Initialize(dockItem, oldValue, newValue);
 }
 private void Initialize(DockItem dockItem, SplitterDistance oldValue, SplitterDistance newValue)
 {
     _dockItemIndex = dockItem.DockControl.DockItems.IndexOf(dockItem);
     _oldValue      = oldValue;
     _newValue      = newValue;
 }
示例#29
0
 private void MoveSplitter(SplitterDistance value)
 {
     SplitterDistance = value;
     UpdateLayout();
 }