void SetBoundOfFreeSpace(SpacePart space,
                                 SpacePart centerspace,
                                 bool suddenArr)
        {
            if (space == null)
            {
                return;
            }

            suddenArr = false;
            var centerspacex = centerspace.Content;
            int x_pos        = centerspace.X;
            int y_pos        = centerspace.Y;
            int dw           = OwnerVisualElement.Width;
            int dh           = OwnerVisualElement.Height;

            if (space.DesiredWidth < dw)
            {
                dw = space.DesiredWidth;
            }
            if (space.DesiredHeight < dh)
            {
                dh = space.DesiredHeight;
            }


            SetDockBound(space,
                         0,
                         0,
                         dw,
                         dh);
            switch (space.SpaceName)
            {
            case SpaceName.Left:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    x_pos -= space.Width;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    x_pos -= space.Width / 2;
                }
                break;
                }
                space.SetLocation(x_pos, y_pos);
            }
            break;

            case SpaceName.Right:
            {
                x_pos = centerspace.Right;
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Inner:
                {
                    x_pos -= space.Width;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    x_pos -= space.Width / 2;
                }
                break;
                }
            }
            break;

            case SpaceName.Top:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    y_pos -= space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    y_pos -= space.Height / 2;
                }
                break;
                }
            }
            break;

            case SpaceName.Bottom:
            {
                y_pos = centerspace.Bottom;
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Inner:
                {
                    y_pos -= space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    y_pos -= space.Height / 2;
                }
                break;
                }
            }
            break;

            case SpaceName.LeftTop:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    x_pos -= space.Width;
                    y_pos -= space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    x_pos -= space.Width / 2;
                    y_pos -= space.Height / 2;
                }
                break;
                }
            }
            break;

            case SpaceName.LeftBottom:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    x_pos -= space.Width;
                    y_pos  = centerspace.Bottom;
                }
                break;

                case NamedSpaceContainerOverlapMode.Inner:
                {
                    y_pos = centerspace.Bottom - space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    x_pos -= space.Width / 2;
                    y_pos  = centerspace.Bottom - space.Height / 2;
                }
                break;
                }
            }
            break;

            case SpaceName.RightTop:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    x_pos  = centerspace.Right;
                    y_pos -= space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Inner:
                {
                    x_pos = centerspace.Right - space.Width;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    //outter - half of grip
                    x_pos  = centerspace.Right - (space.Width / 2);
                    y_pos -= space.Height - (space.Height / 2);
                }
                break;
                }
            }
            break;

            case SpaceName.RightBottom:
            {
                switch (space.OverlapMode)
                {
                case NamedSpaceContainerOverlapMode.Outer:
                {
                    x_pos = centerspace.Right;
                    y_pos = centerspace.Bottom;
                }
                break;

                case NamedSpaceContainerOverlapMode.Inner:
                {
                    x_pos = centerspace.Right - space.Width;
                    y_pos = centerspace.Bottom - space.Height;
                }
                break;

                case NamedSpaceContainerOverlapMode.Middle:
                {
                    //outer - half of grid box
                    x_pos = centerspace.Right - (space.Width / 2);
                    y_pos = centerspace.Bottom - (space.Height / 2);
                }
                break;
                }
            }
            break;
            }

            //VisualInvalidateCanvasArgs vinv = contentArrVisitor.GetVisualInvalidateCanvasArgs();
            space.SetLocation(x_pos, y_pos);
        }
        void SetBoundOfFreeSpace(SpacePart space,
            SpacePart centerspace,
            bool suddenArr)
        {
            if (space == null)
            {
                return;
            }

            suddenArr = false;
            var centerspacex = centerspace.Content;
            int x_pos = centerspace.X;
            int y_pos = centerspace.Y;
            int dw = OwnerVisualElement.Width;
            int dh = OwnerVisualElement.Height;
            if (space.DesiredWidth < dw)
            {
                dw = space.DesiredWidth;
            }
            if (space.DesiredHeight < dh)
            {
                dh = space.DesiredHeight;
            }


            SetDockBound(space,
                0,
                0,
                dw,
                dh);
            switch (space.SpaceName)
            {
                case SpaceName.Left:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    x_pos -= space.Width;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    x_pos -= space.Width / 2;
                                }
                                break;
                        }
                        space.SetLocation(x_pos, y_pos);
                    }
                    break;
                case SpaceName.Right:
                    {
                        x_pos = centerspace.Right;
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Inner:
                                {
                                    x_pos -= space.Width;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    x_pos -= space.Width / 2;
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.Top:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    y_pos -= space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    y_pos -= space.Height / 2;
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.Bottom:
                    {
                        y_pos = centerspace.Bottom;
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Inner:
                                {
                                    y_pos -= space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    y_pos -= space.Height / 2;
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.LeftTop:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    x_pos -= space.Width;
                                    y_pos -= space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    x_pos -= space.Width / 2;
                                    y_pos -= space.Height / 2;
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.LeftBottom:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    x_pos -= space.Width;
                                    y_pos = centerspace.Bottom;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Inner:
                                {
                                    y_pos = centerspace.Bottom - space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    x_pos -= space.Width / 2;
                                    y_pos = centerspace.Bottom - space.Height / 2;
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.RightTop:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    x_pos = centerspace.Right;
                                    y_pos -= space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Inner:
                                {
                                    x_pos = centerspace.Right - space.Width;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    //outter - half of grip
                                    x_pos = centerspace.Right - (space.Width / 2);
                                    y_pos -= space.Height - (space.Height / 2);
                                }
                                break;
                        }
                    }
                    break;
                case SpaceName.RightBottom:
                    {
                        switch (space.OverlapMode)
                        {
                            case NamedSpaceContainerOverlapMode.Outer:
                                {
                                    x_pos = centerspace.Right;
                                    y_pos = centerspace.Bottom;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Inner:
                                {
                                    x_pos = centerspace.Right - space.Width;
                                    y_pos = centerspace.Bottom - space.Height;
                                }
                                break;
                            case NamedSpaceContainerOverlapMode.Middle:
                                {
                                    //outer - half of grid box
                                    x_pos = centerspace.Right - (space.Width / 2);
                                    y_pos = centerspace.Bottom - (space.Height / 2);
                                }
                                break;
                        }
                    }
                    break;
            }

            //VisualInvalidateCanvasArgs vinv = contentArrVisitor.GetVisualInvalidateCanvasArgs();
            space.SetLocation(x_pos, y_pos);
        }