private Vector2 DrawPreviewPanelContentsWithItems(
            PreviewPanelLayout scrollLayout,
            PreviewPanelContentsLayout contentsLayout,
            Vector2 previewPanelScrollPosition,
            PreviewPanelContents previewContents,
            int renameStep,
            bool shouldShowSecondColumn,
            bool shouldShowThirdColumn)
        {
            // WORKAROUND FOR 5.5.5: Somehow you could "scroll" the preview area, even
            // when there was nothing to scroll. Force it to not think it's scrolled because
            // that was screwing up the Header.
            if (scrollLayout.ContentsFitWithoutScrollingHorizontally(contentsLayout))
            {
                previewPanelScrollPosition.x = 0;
            }

            string originalNameColumnHeader = renameStep < 1 ? "Original" : "Before";
            string newNameColumnHeader      = "After";

            this.DrawPreviewHeader(
                scrollLayout.HeaderRect,
                -previewPanelScrollPosition.x,
                originalNameColumnHeader,
                newNameColumnHeader,
                contentsLayout.FirstColumnWidth,
                contentsLayout.SecondColumnWidth,
                contentsLayout.ThirdColumnWidth);

            var newScrollPosition = GUI.BeginScrollView(
                scrollLayout.ScrollRect,
                previewPanelScrollPosition,
                contentsLayout.Rect);

            var rowRect = new Rect(scrollLayout.ScrollRect);

            rowRect.width = Mathf.Max(contentsLayout.Rect.width, scrollLayout.ScrollRect.width);
            this.DrawPreviewRows(rowRect, previewContents, shouldShowSecondColumn, shouldShowThirdColumn);

            // Add the hint into the scroll view if there's room
            if (scrollLayout.ContentsFitWithoutAnyScrolling(contentsLayout))
            {
                EditorGUI.LabelField(scrollLayout.HintRect, this.guiContents.DropPromptHintInsideScroll, this.guiStyles.DropPromptHintInsideScroll);
            }

            GUI.EndScrollView();

            this.DrawDividers(newScrollPosition, scrollLayout, contentsLayout, shouldShowThirdColumn);

            GUI.EndGroup();

            return(newScrollPosition);
        }
Пример #2
0
            public static PreviewPanelContents CreatePreviewContentsForObjects(BulkRenamePreview preview)
            {
                var previewPanelContents = new PreviewPanelContents();

                previewPanelContents.PreviewRowInfos = new PreviewRowModel[preview.NumObjects];
                for (int i = 0; i < preview.NumObjects; ++i)
                {
                    var info            = new PreviewRowModel();
                    var previewForIndex = preview.GetPreviewAtIndex(i);
                    info.RenameResultSequence = previewForIndex.RenameResultSequence;
                    info.Icon = previewForIndex.ObjectToRename.GetEditorIcon();

                    if (previewForIndex.HasWarnings)
                    {
                        info.WarningIcon    = (Texture2D)EditorGUIUtility.Load("icons/console.warnicon.sml.png");
                        info.WarningMessage = previewForIndex.WarningMessage;
                    }
                    else
                    {
                        info.WarningIcon    = null;
                        info.WarningMessage = string.Empty;
                    }

                    previewPanelContents.PreviewRowInfos[i] = info;
                }

                float paddingScaleForBold = 1.11f;

                previewPanelContents.LongestOriginalNameWidth = 0.0f;
                previewPanelContents.LongestNewNameWidth      = 0.0f;
                foreach (var previewRowInfo in previewPanelContents.PreviewRowInfos)
                {
                    float originalNameWidth = GUI.skin.label.CalcSize(
                        new GUIContent(previewRowInfo.RenameResultSequence.OriginalName)).x *paddingScaleForBold;
                    if (originalNameWidth > previewPanelContents.LongestOriginalNameWidth)
                    {
                        previewPanelContents.LongestOriginalNameWidth = originalNameWidth;
                    }

                    float newNameWidth = GUI.skin.label.CalcSize(
                        new GUIContent(previewRowInfo.RenameResultSequence.NewName)).x *paddingScaleForBold;
                    if (newNameWidth > previewPanelContents.LongestNewNameWidth)
                    {
                        previewPanelContents.LongestNewNameWidth = newNameWidth;
                    }
                }

                previewPanelContents.LongestOriginalNameWidth = Mathf.Max(MinColumnWidth, previewPanelContents.LongestOriginalNameWidth);
                previewPanelContents.LongestNewNameWidth      = Mathf.Max(MinColumnWidth, previewPanelContents.LongestNewNameWidth);
                previewPanelContents.LongestFinalNameWidth    = previewPanelContents.LongestNewNameWidth;

                return(previewPanelContents);
            }
Пример #3
0
            public PreviewPanelContentsLayout(Rect scrollRect, PreviewPanelContents previewContents, bool shouldShowSecondColumn, bool shouldShowThirdColumn)
            {
                this.FirstColumnWidth  = previewContents.LongestOriginalNameWidth;
                this.SecondColumnWidth = shouldShowSecondColumn ? previewContents.LongestNewNameWidth : 0.0f;
                this.ThirdColumnWidth  = shouldShowThirdColumn ? previewContents.LongestFinalNameWidth : 0.0f;

                var totalColumnWidth = this.FirstColumnWidth + this.SecondColumnWidth + this.ThirdColumnWidth;

                var rect = new Rect(scrollRect);

                rect.height = PreviewRowHeight * previewContents.TotalNumRows;
                rect.width  = totalColumnWidth + this.IconSize;
                this.Rect   = rect;
            }
Пример #4
0
        private void DrawPreviewPanel(BulkRenamePreview preview)
        {
            EditorGUILayout.BeginVertical();

            this.previewPanelScrollPosition = EditorGUILayout.BeginScrollView(this.previewPanelScrollPosition, this.guiStyles.PreviewScroll);

            bool panelIsEmpty = this.ObjectsToRename.Count == 0;

            if (panelIsEmpty)
            {
                this.DrawPreviewPanelContentsEmpty();
            }
            else
            {
                var previewContents = PreviewPanelContents.CreatePreviewContentsForObjects(preview);
                this.DrawPreviewPanelContentsWithItems(previewContents);
            }

            EditorGUILayout.EndScrollView();

            // GetLastRect only works during Repaint, so we cache it off during Repaint and use the cached value.
            if (Event.current.type == EventType.Repaint)
            {
                this.scrollViewClippingRect = GUILayoutUtility.GetLastRect();
            }

            var draggedObjects = this.GetDraggedObjectsOverRect(this.scrollViewClippingRect);

            if (draggedObjects.Count > 0)
            {
                this.AddObjectsToRename(draggedObjects);
                this.ScrollPreviewPanelToBottom();
            }

            if (!panelIsEmpty)
            {
                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Remove All"))
                {
                    this.ObjectsToRename.Clear();
                }

                this.DrawAddSelectedObjectsButton();

                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.EndVertical();
        }
            public static PreviewPanelContents CreatePreviewContentsForObjects(
                RenameOperationSequence <RenameOperation> renameSequence,
                List <UnityEngine.Object> objects)
            {
                var preview = new PreviewPanelContents();

                preview.PreviewRowInfos = new PreviewRowModel[objects.Count];

                for (int i = 0; i < preview.PreviewRowInfos.Length; ++i)
                {
                    var info         = new PreviewRowModel();
                    var originalName = objects[i].name;
                    info.RenameResultSequence = renameSequence.GetRenamePreview(originalName, i);

                    info.Icon = GetIconForObject(objects[i]);

                    preview.PreviewRowInfos[i] = info;
                }

                float paddingScaleForBold = 1.11f;

                preview.LongestOriginalNameWidth = 0.0f;
                preview.LongestNewNameWidth      = 0.0f;
                foreach (var previewRowInfo in preview.PreviewRowInfos)
                {
                    float originalNameWidth = GUI.skin.label.CalcSize(new GUIContent(previewRowInfo.RenameResultSequence.OriginalName)).x *paddingScaleForBold;
                    if (originalNameWidth > preview.LongestOriginalNameWidth)
                    {
                        preview.LongestOriginalNameWidth = originalNameWidth;
                    }

                    float newNameWidth = GUI.skin.label.CalcSize(new GUIContent(previewRowInfo.RenameResultSequence.NewName)).x *paddingScaleForBold;
                    if (newNameWidth > preview.LongestNewNameWidth)
                    {
                        preview.LongestNewNameWidth = newNameWidth;
                    }
                }

                preview.LongestOriginalNameWidth = Mathf.Max(MinColumnWidth, preview.LongestOriginalNameWidth);
                preview.LongestNewNameWidth      = Mathf.Max(MinColumnWidth, preview.LongestNewNameWidth);
                preview.LongestFinalNameWidth    = preview.LongestNewNameWidth;

                return(preview);
            }
Пример #6
0
        private void DrawPreviewRows(Rect previewRowsRect, PreviewPanelContents previewContents, bool showSecondColumn, bool showThirdColumn)
        {
            for (int i = 0; i < previewContents.NumVisibleRows; ++i)
            {
                var content         = previewContents[i];
                var previewRowStyle = new PreviewRowStyle();
                previewRowStyle.IconStyle = this.guiStyles.Icon;

                previewRowStyle.FirstColumnStyle = content.NameChangedThisStep ?
                                                   this.guiStyles.OriginalNameLabelWhenModified :
                                                   this.guiStyles.OriginalNameLabelUnModified;
                previewRowStyle.FirstColumnWidth = previewContents.LongestOriginalNameWidth;

                previewRowStyle.SecondColumnStyle = content.NameChangedThisStep ?
                                                    this.guiStyles.NewNameLabelModified :
                                                    this.guiStyles.NewNameLabelUnModified;

                previewRowStyle.SecondColumnWidth = showSecondColumn ? previewContents.LongestNewNameWidth : 0.0f;

                previewRowStyle.ThirdColumnStyle = content.NameChangedThisStep ?
                                                   this.guiStyles.FinalNameLabelWhenModified :
                                                   this.guiStyles.FinalNameLabelUnModified;

                previewRowStyle.ThirdColumnWidth = showThirdColumn ? previewContents.LongestFinalNameWidth : 0.0f;

                previewRowStyle.BackgroundColor = i % 2 == 0 ? this.guiStyles.PreviewRowBackgroundEven : this.guiStyles.PreviewRowBackgroundOdd;

                var rowRect = new Rect(previewRowsRect);
                rowRect.height = PreviewRowHeight;
                rowRect.y      = previewRowsRect.y + (content.IndexInPreview * rowRect.height);
                if (DrawPreviewRow(rowRect, content, previewRowStyle))
                {
                    if (this.ObjectRemovedAtIndex != null)
                    {
                        this.ObjectRemovedAtIndex.Invoke(i);
                    }

                    break;
                }
            }
        }
Пример #7
0
        private void DrawPreviewPanelContentsWithItems(PreviewPanelContents previewContents)
        {
            EditorGUILayout.BeginHorizontal(GUILayout.Height(18.0f));

            // Space gives us a bit of padding or else we're just too bunched up to the side
            GUILayout.Space(42.0f);

            int    renameStep = this.IsShowingPreviewSteps ? this.FocusedRenameOpIndex : -1;
            string originalNameColumnHeader = renameStep < 1 ? "Original" : "Before";
            string newNameColumnHeader      = "After";

            EditorGUILayout.LabelField(
                originalNameColumnHeader,
                EditorStyles.boldLabel,
                GUILayout.Width(previewContents.LongestOriginalNameWidth));

            bool shouldShowSecondColumn = this.IsPreviewStepModePreference || this.RenameOperationsToApply.Count == 1;

            if (shouldShowSecondColumn)
            {
                EditorGUILayout.LabelField(newNameColumnHeader, EditorStyles.boldLabel, GUILayout.Width(previewContents.LongestNewNameWidth));
            }

            bool shouldShowThirdColumn = !this.IsShowingPreviewSteps || this.RenameOperationsToApply.Count > 1;

            if (shouldShowThirdColumn)
            {
                EditorGUILayout.LabelField("Final Name", EditorStyles.boldLabel, GUILayout.Width(previewContents.LongestFinalNameWidth));
            }

            GUILayout.FlexibleSpace();

            EditorGUILayout.EndHorizontal();

            this.DrawPreviewRows(renameStep, previewContents, shouldShowSecondColumn, shouldShowThirdColumn);

            GUILayout.FlexibleSpace();
            EditorGUILayout.LabelField(this.guiContents.DropPromptHint, this.guiStyles.DropPromptHint);
        }
        private void DrawPreviewRows(int stepIndex, PreviewPanelContents previewContents, bool showSecondColumn, bool showThirdColumn)
        {
            for (int i = 0; i < previewContents.NumRows; ++i)
            {
                var content         = previewContents[i];
                var previewRowStyle = new PreviewRowStyle();
                previewRowStyle.IconStyle = this.guiStyles.Icon;

                previewRowStyle.FirstColumnStyle = content.NamesAreDifferent ?
                                                   this.guiStyles.OriginalNameLabelWhenModified :
                                                   this.guiStyles.OriginalNameLabelUnModified;
                previewRowStyle.FirstColumnWidth = previewContents.LongestOriginalNameWidth;

                previewRowStyle.SecondColumnStyle = content.NamesAreDifferent ?
                                                    this.guiStyles.NewNameLabelModified :
                                                    this.guiStyles.NewNameLabelUnModified;

                previewRowStyle.SecondColumnWidth = showSecondColumn ? previewContents.LongestNewNameWidth : 0.0f;

                previewRowStyle.ThirdColumnStyle = content.NamesAreDifferent ?
                                                   this.guiStyles.FinalNameLabelWhenModified :
                                                   this.guiStyles.FinalNameLabelUnModified;

                previewRowStyle.ThirdColumnWidth = showThirdColumn ? previewContents.LongestFinalNameWidth : 0.0f;

                previewRowStyle.BackgroundColor = i % 2 == 0 ? this.guiStyles.PreviewRowBackgroundEven : this.guiStyles.PreviewRowBackgroundOdd;

                previewRowStyle.InsertionColor = this.guiStyles.InsertionTextColor;
                previewRowStyle.DeletionColor  = this.guiStyles.DeletionTextColor;

                if (DrawPreviewRow(stepIndex, content, previewRowStyle))
                {
                    this.ObjectsToRename.Remove(this.ObjectsToRename[i]);
                    break;
                }
            }
        }
Пример #9
0
            public static PreviewPanelContents CreatePreviewContentsForObjects(
                BulkRenamePreview preview,
                int firstPreviewIndex,
                int numObjectsToShow,
                int stepIndex,
                Color deletionColor,
                Color insertionColor)
            {
                var previewPanelContents = new PreviewPanelContents();
                var numVisibleObjects    = Mathf.Min(numObjectsToShow, preview.NumObjects);

                previewPanelContents.PreviewRowInfos = new PreviewRowModel[numVisibleObjects];

                for (int j = 0; j < numVisibleObjects && j < preview.NumObjects - firstPreviewIndex; ++j)
                {
                    var info = new PreviewRowModel();
                    var indexOfVisibleObject = firstPreviewIndex + j;
                    var previewForIndex      = preview.GetPreviewAtIndex(indexOfVisibleObject);
                    var originalName         = stepIndex >= 0 && stepIndex < preview.NumSteps ?
                                               previewForIndex.RenameResultSequence.GetNameBeforeAtStep(stepIndex, deletionColor) :
                                               previewForIndex.RenameResultSequence.OriginalName;
                    info.NameBeforeStep = originalName;

                    var nameAtStep = stepIndex >= 0 && stepIndex < preview.NumSteps ?
                                     previewForIndex.RenameResultSequence.GetNewNameAtStep(stepIndex, insertionColor) :
                                     previewForIndex.RenameResultSequence.NewName;
                    info.NameAtStep = nameAtStep;

                    info.FinalName = previewForIndex.RenameResultSequence.NewName;

                    info.Icon = previewForIndex.ObjectToRename.GetEditorIcon();

                    if (previewForIndex.HasWarnings || preview.WillRenameCollideWithExistingAsset(previewForIndex))
                    {
                        info.WarningIcon = (Texture2D)EditorGUIUtility.Load("icons/console.warnicon.sml.png");
                        if (previewForIndex.HasWarnings)
                        {
                            info.WarningMessage = GetWarningMessageForRenamePreview(previewForIndex);
                        }
                        else
                        {
                            info.WarningMessage = "New name matches an existing file or another renamed object.";
                        }
                    }
                    else
                    {
                        info.WarningIcon    = null;
                        info.WarningMessage = string.Empty;
                    }

                    info.IndexInPreview = indexOfVisibleObject;
                    previewPanelContents.PreviewRowInfos[j] = info;
                }

                // Note that CalcSize is very slow, so it is a problem to do it to the entire list of objects...
                // For now we only measure the ones that are visible. It causes the columns to resize as you scroll,
                // but that's not the worst.
                float paddingScaleForBold = 1.11f;

                previewPanelContents.LongestOriginalNameWidth = 0.0f;
                previewPanelContents.LongestNewNameWidth      = 0.0f;
                foreach (var previewRowInfo in previewPanelContents.PreviewRowInfos)
                {
                    var labelStyle = GUI.skin.label;
                    labelStyle.richText = true;
                    float originalNameWidth = labelStyle.CalcSize(
                        new GUIContent(previewRowInfo.NameBeforeStep)).x *paddingScaleForBold;
                    if (originalNameWidth > previewPanelContents.LongestOriginalNameWidth)
                    {
                        previewPanelContents.LongestOriginalNameWidth = originalNameWidth;
                    }

                    float newNameWidth = labelStyle.CalcSize(
                        new GUIContent(previewRowInfo.NameAtStep)).x *paddingScaleForBold;
                    if (newNameWidth > previewPanelContents.LongestNewNameWidth)
                    {
                        previewPanelContents.LongestNewNameWidth = newNameWidth;
                    }
                }

                previewPanelContents.LongestOriginalNameWidth = Mathf.Max(MinColumnWidth, previewPanelContents.LongestOriginalNameWidth);
                previewPanelContents.LongestNewNameWidth      = Mathf.Max(MinColumnWidth, previewPanelContents.LongestNewNameWidth);
                previewPanelContents.LongestFinalNameWidth    = previewPanelContents.LongestNewNameWidth;

                previewPanelContents.TotalNumRows = preview.NumObjects;

                return(previewPanelContents);
            }
Пример #10
0
        private Vector2 DrawPreviewPanelContentsWithItems(
            PreviewPanelLayout scrollLayout,
            PreviewPanelContentsLayout contentsLayout,
            Vector2 previewPanelScrollPosition,
            PreviewPanelContents previewContents,
            int renameStep,
            bool shouldShowSecondColumn,
            bool shouldShowThirdColumn)
        {
            // WORKAROUND FOR 5.5.5: Somehow you could "scroll" the preview area, even
            // when there was nothing to scroll. Force it to not think it's scrolled because
            // that was screwing up the Header.
            if (scrollLayout.ContentsFitWithoutScrollingHorizontally(contentsLayout))
            {
                previewPanelScrollPosition.x = 0;
            }

            string originalNameColumnHeader = renameStep < 1 ? "Original" : "Before";
            string newNameColumnHeader      = "After";

            this.DrawPreviewHeader(
                scrollLayout.HeaderRect,
                -previewPanelScrollPosition.x,
                originalNameColumnHeader,
                newNameColumnHeader,
                contentsLayout.FirstColumnWidth,
                contentsLayout.SecondColumnWidth,
                contentsLayout.ThirdColumnWidth);

            var newScrollPosition = GUI.BeginScrollView(
                scrollLayout.ScrollRect,
                previewPanelScrollPosition,
                contentsLayout.Rect);

            var rowRect = new Rect(scrollLayout.ScrollRect);

            rowRect.width = Mathf.Max(contentsLayout.Rect.width, scrollLayout.ScrollRect.width);
            this.DrawPreviewRows(rowRect, previewContents, shouldShowSecondColumn, shouldShowThirdColumn);

            // Add the hint into the scroll view if there's room
            if (scrollLayout.ContentsFitWithoutAnyScrolling(contentsLayout))
            {
                EditorGUI.LabelField(scrollLayout.HintRect, this.guiContents.DropPromptHintInsideScroll, this.guiStyles.DropPromptHintInsideScroll);
            }

            GUI.EndScrollView();

            // Put dividers in group so that they scroll (horizontally)
            GUI.BeginGroup(scrollLayout.ScrollRect);
            var oldColor = GUI.color;

            if (EditorGUIUtility.isProSkin)
            {
                GUI.color = new Color(0.3f, 0.3f, 0.3f, 1.0f);
            }
            else
            {
                GUI.color = new Color(0.6f, 0.6f, 0.6f, 1.0f);
            }

            // Add 1 into y for the position so that it doesn't render on the panel's border
            var dividerHeight = scrollLayout.ScrollRect.height - 1.0f;

            // Unity scroll view bars overlap the scroll rect when they render, so we have to shorten the dividers
            if (!scrollLayout.ContentsFitWithoutScrollingHorizontally(contentsLayout))
            {
                var scrollbarHeight = 14.0f;
                dividerHeight -= scrollbarHeight;
            }

            var firstDividerRect = new Rect(
                -newScrollPosition.x + contentsLayout.FirstColumnWidth + contentsLayout.IconSize,
                1.0f,
                1.0f,
                dividerHeight - 1.0f);

            GUI.DrawTexture(firstDividerRect, Texture2D.whiteTexture);

            if (shouldShowThirdColumn)
            {
                var secondDividerRect = new Rect(firstDividerRect);
                secondDividerRect.x += contentsLayout.SecondColumnWidth;
                GUI.DrawTexture(secondDividerRect, Texture2D.whiteTexture);
            }

            GUI.color = oldColor;
            GUI.EndGroup();

            return(newScrollPosition);
        }
Пример #11
0
        /// <summary>
        /// Draw the specified BulkRenamePreview in the given rect, and returns the new scroll position.
        /// </summary>
        /// <returns>The new scroll position.</returns>
        /// <param name="previewPanelRect">Preview panel rect.</param>
        /// <param name="previewPanelScrollPosition">Preview panel scroll position.</param>
        /// <param name="preview">Preview to draw.</param>
        public Vector2 Draw(Rect previewPanelRect, Vector2 previewPanelScrollPosition, BulkRenamePreview preview)
        {
            var spaceBetweenFooterAndScrollview = 2.0f;
            var panelFooterToolbar = new Rect(previewPanelRect);

            panelFooterToolbar.height = EditorGUIUtility.singleLineHeight;
            panelFooterToolbar.y     += (previewPanelRect.height + spaceBetweenFooterAndScrollview) - panelFooterToolbar.height;

            var scrollViewRect = new Rect(previewPanelRect);

            scrollViewRect.height -= (panelFooterToolbar.height + spaceBetweenFooterAndScrollview);

            GUI.Box(scrollViewRect, "", this.guiStyles.PreviewScroll);

            var newScrollPosition = previewPanelScrollPosition;

            if (preview.NumObjects == 0)
            {
                this.DrawPreviewPanelContentsEmpty(scrollViewRect);
            }
            else
            {
                var scrollLayout = new PreviewPanelLayout(scrollViewRect);

                // Show the one that doesn't quite fit by subtracting one
                var firstItemIndex = Mathf.Max(Mathf.FloorToInt(previewPanelScrollPosition.y / PreviewRowHeight) - 1, 0);

                // Add one for the one that's off screen above, and one for the one below. I think?
                var numItems = Mathf.CeilToInt(scrollLayout.ScrollRect.height / PreviewRowHeight) + 2;

                var previewContents = PreviewPanelContents.CreatePreviewContentsForObjects(
                    preview,
                    firstItemIndex,
                    numItems,
                    this.PreviewStepIndexToShow,
                    this.guiStyles.DeletionTextColor,
                    this.guiStyles.InsertionTextColor);

                bool shouldShowSecondColumn = this.ColumnsToShow != ColumnStyle.OriginalAndFinalOnly;
                bool shouldShowThirdColumn  = this.ColumnsToShow != ColumnStyle.StepwiseHideFinal;
                var  contentsLayout         = new PreviewPanelContentsLayout(
                    scrollLayout.ScrollRect,
                    previewContents,
                    shouldShowSecondColumn,
                    shouldShowThirdColumn);

                newScrollPosition = this.DrawPreviewPanelContentsWithItems(
                    scrollLayout,
                    contentsLayout,
                    previewPanelScrollPosition,
                    previewContents,
                    this.PreviewStepIndexToShow,
                    shouldShowSecondColumn,
                    shouldShowThirdColumn);

                var buttonSpacing = 2.0f;
                var rightPadding  = 2.0f;
                var addSelectedObjectsButtonRect = new Rect(panelFooterToolbar);
                addSelectedObjectsButtonRect.width = 150.0f;
                addSelectedObjectsButtonRect.x     = panelFooterToolbar.xMax - rightPadding - addSelectedObjectsButtonRect.width;

                var removeAllButtonRect = new Rect(addSelectedObjectsButtonRect);
                removeAllButtonRect.width = 100.0f;
                removeAllButtonRect.x    -= (removeAllButtonRect.width + buttonSpacing);
                if (GUI.Button(removeAllButtonRect, "Remove All"))
                {
                    if (this.RemoveAllClicked != null)
                    {
                        this.RemoveAllClicked.Invoke();
                    }
                }

                this.DrawAddSelectedObjectsButton(addSelectedObjectsButtonRect);

                if (!scrollLayout.ContentsFitWithoutAnyScrolling(contentsLayout))
                {
                    var hintRect = new Rect(scrollViewRect);
                    hintRect.height = EditorGUIUtility.singleLineHeight * 2.0f;
                    hintRect.y     += scrollViewRect.height;
                    hintRect.width  = scrollViewRect.width - addSelectedObjectsButtonRect.width - removeAllButtonRect.width - buttonSpacing;
                    EditorGUI.LabelField(hintRect, this.guiContents.DropPromptHint, this.guiStyles.DropPromptHint);
                }
            }

            var draggedObjects = this.GetDraggedObjectsOverRect(scrollViewRect);

            if (draggedObjects.Count > 0)
            {
                if (this.ObjectsDropped != null)
                {
                    this.ObjectsDropped.Invoke(draggedObjects.ToArray());
                }
            }

            return(newScrollPosition);
        }