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); }
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); }
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; }
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); }
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; } } }
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; } } }
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); }
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); }
/// <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); }