public Rect CalculateBounds(Rect diagramRect)
        {
            if (RequestPosition.HasValue)
            {

                if (TreeModel == null) return new Rect(0,0,0,0);
                var selectedItem = TreeModel.SelectedData as IItem;

                var rect = new Rect().WithSize(QuickAccessWidth, selectedItem == null ? QuickAccessHeigth - 200 : QuickAccessHeigth).WithOrigin(RequestPosition.Value.x, RequestPosition.Value.y);
                if (rect.height > diagramRect.height) rect = rect.WithHeight(Mathf.Max(diagramRect.height, 230));

                if (rect.yMax > diagramRect.yMax) rect = rect.WithOrigin(rect.x, diagramRect.yMax - rect.height - 15 );
                if (rect.xMax > diagramRect.xMax) rect = rect.WithOrigin(diagramRect.xMax - rect.width - 15, rect.y);

                return rect;


            }
            var rectNorm =  new Rect().WithSize(QuickAccessWidth, QuickAccessHeigth).CenterInsideOf(diagramRect);
            if (rectNorm.height > diagramRect.height) rectNorm = rectNorm.WithHeight(Mathf.Max(diagramRect.height, 230));
            return rectNorm;

        }