public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { if (unityBuildReport != null) { SelectStep(-1, unityBuildReport.BuildProcessSteps); } }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { if (buildReportToDisplay == null) { requestRepaint = false; return; } requestRepaint = false; if (Event.current.type == EventType.Layout) { _hasTotalBuildSize = !string.IsNullOrEmpty(buildReportToDisplay.TotalBuildSize) && !string.IsNullOrEmpty(buildReportToDisplay.BuildFilePath); _hasUsedAssetsTotalSize = !string.IsNullOrEmpty(buildReportToDisplay.UsedTotalSize); _hasCompressedBuildSize = !string.IsNullOrEmpty(buildReportToDisplay.CompressedBuildSize); _hasBuildSizes = buildReportToDisplay.BuildSizes != null; _hasMonoDLLsToDisplay = buildReportToDisplay.MonoDLLs != null && buildReportToDisplay.MonoDLLs.Length > 0; _hasUnityEngineDLLsToDisplay = buildReportToDisplay.UnityEngineDLLs != null && buildReportToDisplay.UnityEngineDLLs.Length > 0; _hasScriptDLLsToDisplay = buildReportToDisplay.ScriptDLLs != null && buildReportToDisplay.ScriptDLLs.Length > 0; } GUILayout.Space(2); // top padding for scrollbar _assetListScrollPos = GUILayout.BeginScrollView(_assetListScrollPos); GUILayout.Space(10); // top padding for content GUILayout.BeginHorizontal(); GUILayout.Space(10); // extra left padding DrawTotalSize(buildReportToDisplay); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_HORIZONTAL_SPACING); GUILayout.BeginVertical(); DrawBuildSizes(buildReportToDisplay); GUILayout.Space(BuildReportTool.Window.Settings.CATEGORY_VERTICAL_SPACING); DrawDLLList(buildReportToDisplay); GUILayout.EndVertical(); GUILayout.Space(20); // extra right padding GUILayout.EndHorizontal(); GUILayout.EndScrollView(); }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { requestRepaint = false; GUI.SetNextControlName("BRT_HelpUnfocuser"); GUI.TextField(new Rect(-100, -100, 10, 10), ""); GUILayout.Space(10); // extra top padding GUILayout.BeginHorizontal(); int newSelectedHelpIdx = GUILayout.SelectionGrid(_selectedHelpContentsIdx, _helpTypeLabels, 1); if (newSelectedHelpIdx != _selectedHelpContentsIdx) { GUI.FocusControl("BRT_HelpUnfocuser"); } _selectedHelpContentsIdx = newSelectedHelpIdx; //GUILayout.Space((position.width - HELP_CONTENT_WIDTH) * 0.5f); if (_selectedHelpContentsIdx == HELP_TYPE_README_IDX) { _readmeScrollPos = GUILayout.BeginScrollView( _readmeScrollPos); float readmeHeight = GUI.skin.GetStyle(HELP_CONTENT_GUI_STYLE) .CalcHeight(_readmeGuiContent, HELP_CONTENT_WIDTH); EditorGUILayout.SelectableLabel(_readmeContents, HELP_CONTENT_GUI_STYLE, GUILayout.Width(HELP_CONTENT_WIDTH), GUILayout.Height(readmeHeight)); GUILayout.EndScrollView(); } else if (_selectedHelpContentsIdx == HELP_TYPE_CHANGELOG_IDX) { _changelogScrollPos = GUILayout.BeginScrollView( _changelogScrollPos); float changelogHeight = GUI.skin.GetStyle(HELP_CONTENT_GUI_STYLE) .CalcHeight(_changelogGuiContent, HELP_CONTENT_WIDTH); EditorGUILayout.SelectableLabel(_changelogContents, HELP_CONTENT_GUI_STYLE, GUILayout.Width(HELP_CONTENT_WIDTH), GUILayout.Height(changelogHeight)); GUILayout.EndScrollView(); } GUILayout.EndHorizontal(); }
public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint ) { if (buildReportToDisplay == null) { requestRepaint = false; return; } GUILayout.Space(2); // top padding for scrollbar _scrollPos = GUILayout.BeginScrollView(_scrollPos); GUILayout.BeginHorizontal(); GUILayout.Space(10); // extra left padding GUILayout.BeginVertical(); GUILayout.Space(10); // top padding // report title GUILayout.Label(buildReportToDisplay.SuitableTitle, BuildReportTool.Window.Settings.MAIN_TITLE_STYLE_NAME); GUILayout.Space(10); // two-column layout GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); // 1st column GUILayout.BeginVertical(GUILayout.MaxWidth(350)); GUILayout.Label(Labels.TIME_OF_BUILD_LABEL, BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.GetTimeReadable(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Project building took:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label("How long the project building took. This is the time between OnPreprocessBuild and OnPostprocessBuild.", BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.BuildDurationTime.ToString(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Report generation took:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label("How long the Build Report Generation took.", BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.ReportGenerationTime.ToString(), BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); if (!string.IsNullOrEmpty(buildReportToDisplay.TotalBuildSize) && !string.IsNullOrEmpty(buildReportToDisplay.BuildFilePath)) { GUILayout.BeginVertical(); GUILayout.Label(Labels.BUILD_TOTAL_SIZE_LABEL, BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(BuildReportTool.Util.GetBuildSizePathDescription(buildReportToDisplay), BuildReportTool.Window.Settings.TINY_HELP_STYLE_NAME); GUILayout.Label(buildReportToDisplay.TotalBuildSize, BuildReportTool.Window.Settings.BIG_NUMBER_STYLE_NAME); GUILayout.EndVertical(); } GUILayout.Space(20); string emphasisColor = "black"; if (EditorGUIUtility.isProSkin || BRT_BuildReportWindow.FORCE_USE_DARK_SKIN) { emphasisColor = "white"; } string largestAssetCategoryLabel = string.Format( "<color={0}><size=20><b>{1}</b></size></color> are the largest,\ntaking up <color={0}><size=20><b>{2}%</b></size></color> of the build{3}", emphasisColor, buildReportToDisplay.BuildSizes[0].Name, buildReportToDisplay.BuildSizes[0].Percentage.ToString(CultureInfo.InvariantCulture), (!buildReportToDisplay.HasStreamingAssets ? "\n<size=12>(not counting streaming assets)</size>" : "")); GUILayout.Label(largestAssetCategoryLabel, BuildReportTool.Window.Settings.INFO_TEXT_STYLE_NAME); GUILayout.Space(20); GUILayout.EndVertical(); // 2nd column GUILayout.BeginVertical(GUILayout.MaxWidth(250)); GUILayout.Label("Made for:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.BuildType, BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.Label("Built in:", BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); GUILayout.Label(buildReportToDisplay.UnityVersionDisplayed, BuildReportTool.Window.Settings.INFO_SUBTITLE_STYLE_NAME); GUILayout.EndVertical(); DrawScenesInBuild(buildReportToDisplay.ScenesInBuild); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); var numberOfTopUsed = buildReportToDisplay.HasUsedAssets ? buildReportToDisplay.UsedAssets.NumberOfTopLargest : 0; var numberOfTopUnused = buildReportToDisplay.HasUnusedAssets ? buildReportToDisplay.UnusedAssets.NumberOfTopLargest : 0; if (Event.current.type == EventType.Layout) { _showTopUsed = numberOfTopUsed > 0 && buildReportToDisplay.UsedAssets.TopLargest != null; _showTopUnused = numberOfTopUnused > 0 && buildReportToDisplay.UnusedAssets.TopLargest != null; } // 1st column GUILayout.BeginVertical(); if (_showTopUsed) { GUILayout.Label(string.Format("Top {0} largest in build:", numberOfTopUsed.ToString()), BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); if (!BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus && GUILayout.Button("Refresh", GUILayout.Height(20), GUILayout.MaxWidth(520))) { buildReportToDisplay.RecategorizeUsedAssets(); buildReportToDisplay.FlagOkToRefresh(); } DrawAssetList(buildReportToDisplay.UsedAssets, true, buildReportToDisplay, assetDependencies); } GUILayout.EndVertical(); GUILayout.Space(50); // 2nd column GUILayout.BeginVertical(); if (_showTopUnused) { GUILayout.Label(string.Format("Top {0} largest not in build:", numberOfTopUnused.ToString()), BuildReportTool.Window.Settings.INFO_TITLE_STYLE_NAME); if (!BuildReportTool.Options.AutoResortAssetsWhenUnityEditorRegainsFocus && GUILayout.Button("Refresh", GUILayout.Height(20), GUILayout.MaxWidth(520))) { buildReportToDisplay.RecategorizeUnusedAssets(); buildReportToDisplay.FlagOkToRefresh(); } DrawAssetList(buildReportToDisplay.UnusedAssets, false, buildReportToDisplay, assetDependencies); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.Space(20); if (assetDependencies != null && !string.IsNullOrEmpty(assetDependencies.SavedPath)) { GUILayout.Label("Asset Dependencies file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(assetDependencies.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } if (textureData != null && !string.IsNullOrEmpty(textureData.SavedPath)) { GUILayout.Label("Texture Data file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(textureData.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } if (unityBuildReport != null && !string.IsNullOrEmpty(unityBuildReport.SavedPath)) { GUILayout.Label("Additional Unity Build Report file used:", BuildReportTool.Window.Settings.SETTING_NAME_STYLE_NAME); GUILayout.Label(unityBuildReport.SavedPath, BuildReportTool.Window.Settings.SETTING_VALUE_STYLE_NAME); GUILayout.Space(10); } GUILayout.Space(20); GUILayout.EndVertical(); GUILayout.Space(20); // extra right padding GUILayout.EndHorizontal(); GUILayout.EndScrollView(); // ------------------------------------------------------ // Continually request repaint, since we need to check the rects // generated by the GUILayout (using GUILayoutUtility.GetLastRect()) // to make the hover checks work. That's because GetLastRect() only // works during repaint event. // // Later checks below can set requestRepaint to false if there's no // need to repaint, to help lessen cpu usage. requestRepaint = true; if (Event.current.mousePosition.y >= position.height || Event.current.mousePosition.y <= 0 || Event.current.mousePosition.x <= 0 || Event.current.mousePosition.x >= position.width) { // mouse is outside the window, no need to repaint, can't show tooltip anyway // set requestRepaint to false to help lessen cpu usage requestRepaint = false; } var showThumbnailNow = BuildReportTool.Options.ShowTooltipThumbnail && _shouldShowThumbnailOnHoveredAsset && (_assetUsedEntryHoveredIdx != -1 || _assetUnusedEntryHoveredIdx != -1); var zoomInChanged = false; if (showThumbnailNow) { var prevZoomedIn = BRT_BuildReportWindow.ZoomedInThumbnails; // if thumbnail is currently showing, we process the inputs // (ctrl zooms in on thumbnail, alt toggles alpha blend) BRT_BuildReportWindow.ProcessThumbnailControls(); if (prevZoomedIn != BRT_BuildReportWindow.ZoomedInThumbnails) { zoomInChanged = true; } } else { // no thumbnail currently shown. ensure the controls that // need to be reset to initial state are reset BRT_BuildReportWindow.ResetThumbnailControls(); } if (!zoomInChanged && !Event.current.alt && !BRT_BuildReportWindow.MouseMovedNow && !BRT_BuildReportWindow.LastMouseMoved) { // mouse hasn't moved, and no request to zoom-in thumbnail or toggle thumbnail alpha // no need to repaint because nothing has changed // set requestRepaint to false to help lessen cpu usage requestRepaint = false; } var shouldShowAssetEndUsersTooltipNow = BuildReportTool.Options.ShowAssetPrimaryUsersInTooltipIfAvailable && BRT_BuildReportWindow.ShouldHoveredAssetShowEndUserTooltip( assetDependencies) && (_assetUsedEntryHoveredIdx != -1 || _assetUnusedEntryHoveredIdx != -1); if (Event.current.type == EventType.Repaint) { if (showThumbnailNow && shouldShowAssetEndUsersTooltipNow) { // draw thumbnail and end users below it BRT_BuildReportWindow.DrawThumbnailEndUsersTooltip(position, assetDependencies, textureData); } else if (shouldShowAssetEndUsersTooltipNow) { // draw only end users in tooltip BRT_BuildReportWindow.DrawEndUsersTooltip(position, assetDependencies); } else if (showThumbnailNow) { // draw only thumbnail in tooltip BRT_BuildReportWindow.DrawThumbnailTooltip(position, textureData); } } }
public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { }
public abstract void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint );
public abstract void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport);
public override void RefreshData(BuildInfo buildReport, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport) { const string README_FILENAME = "README.txt"; _readmeContents = BuildReportTool.Util.GetPackageFileContents(README_FILENAME); const string CHANGELOG_FILENAME = "VERSION.txt"; _changelogContents = BuildReportTool.Util.GetPackageFileContents(CHANGELOG_FILENAME); if (_readmeContents.Length > LABEL_LENGTH) { _readmeContents = _readmeContents.Substring(0, LABEL_LENGTH); } if (_changelogContents.Length > LABEL_LENGTH) { _changelogContents = _changelogContents.Substring(0, LABEL_LENGTH); } if (_readmeGuiContent == null) { _readmeGuiContent = new GUIContent(_readmeContents); } if (_changelogGuiContent == null) { _changelogGuiContent = new GUIContent(_changelogContents); } }
// ================================================================================================ public override void DrawGUI(Rect position, BuildInfo buildReportToDisplay, AssetDependencies assetDependencies, TextureData textureData, UnityBuildReport unityBuildReport, out bool requestRepaint) { requestRepaint = false; if (unityBuildReport == null) { return; } if (_logIcon == null) { var logIcons = GUI.skin.FindStyle("LogMessageIcons"); if (logIcons != null) { _logIcon = logIcons.normal.background; _warnIcon = logIcons.hover.background; _errorIcon = logIcons.active.background; _logFilterLabel.image = _logIcon; _warnFilterLabel.image = _warnIcon; _errorFilterLabel.image = _errorIcon; } } if (_indentLine == null) { _indentLine = GUI.skin.GetStyle("IndentStyle1").normal.background; } Texture2D prevArrow = GUI.skin.GetStyle(BuildReportTool.Window.Settings.BIG_LEFT_ARROW_ICON_STYLE_NAME).normal.background; Texture2D nextArrow = GUI.skin.GetStyle(BuildReportTool.Window.Settings.BIG_RIGHT_ARROW_ICON_STYLE_NAME).normal.background; var steps = unityBuildReport.BuildProcessSteps; if (steps == null) { return; } // -------------------------------- #region Steps float height = position.height * _buildStepsHeightPercent; var maxHeight = (steps.Length + 1) * 20; if (height > maxHeight) { height = maxHeight; } GUILayout.BeginHorizontal(GUILayout.Height(height)); #region Column 1 (Step Name) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Step", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); bool useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } GUILayout.BeginHorizontal(styleToUse); GUILayout.Space(steps[i].Depth * 20); if (GUILayout.Button(steps[i].Name, styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } GUILayout.EndHorizontal(); if (Event.current.type == EventType.Repaint) { Rect labelRect = GUILayoutUtility.GetLastRect(); var prevColor = GUI.color; GUI.color = new Color(0, 0, 0, 0.5f); for (int indentN = 0, indentLen = steps[i].Depth; indentN < indentLen; ++indentN) { var indentRect = new Rect((indentN * 20), labelRect.y, 20, labelRect.height); GUI.DrawTexture(indentRect, _indentLine, ScaleMode.ScaleAndCrop); } GUI.color = prevColor; } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Column 2 (Warning Count) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Warning Count", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } if (steps[i].WarnLogCount > 0) { if (GUILayout.Button(steps[i].WarnLogCount.ToString(), styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } } else { GUILayout.Label(GUIContent.none, styleToUse, BRT_BuildReportWindow.LayoutListHeight); } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Column 3 (Error Count) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Error Count", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } if (steps[i].ErrorLogCount > 0) { if (GUILayout.Button(steps[i].ErrorLogCount.ToString(), styleToUse, BRT_BuildReportWindow.LayoutListHeight)) { SelectStep(i, steps); } } else { GUILayout.Label(GUIContent.none, styleToUse, BRT_BuildReportWindow.LayoutListHeight); } useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion #region Last Column (Duration) GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); GUILayout.Label("Duration", BuildReportTool.Window.Settings.LIST_COLUMN_HEADER_STYLE_NAME); _scrollPos = GUILayout.BeginScrollView(_scrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, "verticalscrollbar", BRT_BuildReportWindow.LayoutNone); useAlt = true; for (int i = 0; i < steps.Length; ++i) { string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; if (i == _selectedStepIdx) { styleToUse = BuildReportTool.Window.Settings.LIST_SMALL_SELECTED_NAME; } string duration; if (i == 0) { duration = unityBuildReport.TotalBuildTime.ToReadableString(); } else { duration = steps[i].Duration.ToReadableString(); } GUILayout.Label(duration, styleToUse, BRT_BuildReportWindow.LayoutListHeight); useAlt = !useAlt; } GUILayout.EndScrollView(); GUILayout.EndVertical(); #endregion GUILayout.EndHorizontal(); if (Event.current.type == EventType.Repaint) { _stepsViewRect = GUILayoutUtility.GetLastRect(); } #endregion // -------------------------------- #region Logs GUILayout.BeginHorizontal(); GUILayout.BeginVertical(BRT_BuildReportWindow.LayoutNone); #region Logs Toolbar GUILayout.BeginHorizontal(BuildReportTool.Window.Settings.TOP_BAR_BG_STYLE_NAME, BRT_BuildReportWindow.LayoutHeight18); GUILayout.Space(10); string logMessagesTitle; bool hasStepSelected = _selectedStepIdx != -1 && steps[_selectedStepIdx].BuildLogMessages != null && steps[_selectedStepIdx].BuildLogMessages.Length > 0; if (hasStepSelected) { logMessagesTitle = string.Format("Log Messages of: <i>{0}</i>", steps[_selectedStepIdx].Name); } else { logMessagesTitle = "Log Messages (Total)"; } GUILayout.Label(logMessagesTitle, BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (Event.current.type == EventType.Repaint) { _dividerRect = GUILayoutUtility.GetLastRect(); } GUILayout.FlexibleSpace(); int messagePaginationLength = BuildReportTool.Options.LogMessagePaginationLength; if (GUILayout.Button(prevArrow, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNone) && (_logMessageToShowStartOffset - messagePaginationLength >= 0)) { _logMessageToShowStartOffset -= messagePaginationLength; } if (Event.current.type == EventType.Repaint) { var prevArrowRect = GUILayoutUtility.GetLastRect(); _dividerRect.xMax = prevArrowRect.x; } string paginateLabel; if (_showPageNumbers) { int totalPageNumbers = _totalVisibleMessageCount / messagePaginationLength; if (_totalVisibleMessageCount % messagePaginationLength > 0) { ++totalPageNumbers; } // the max number of digits for the displayed offset counters string assetCountDigitNumFormat = string.Format("D{0}", totalPageNumbers.ToString().Length.ToString()); paginateLabel = string.Format("Page {0} of {1}", ((_logMessageToShowStartOffset / messagePaginationLength) + 1).ToString(assetCountDigitNumFormat), totalPageNumbers.ToString()); } else { // number of assets in current page int pageLength = Mathf.Min(_logMessageToShowStartOffset + messagePaginationLength, _totalVisibleMessageCount); int offsetNonZeroBased = _logMessageToShowStartOffset + (pageLength > 0 ? 1 : 0); // the max number of digits for the displayed offset counters string assetCountDigitNumFormat = string.Format("D{0}", _totalVisibleMessageCount.ToString().Length.ToString()); paginateLabel = string.Format("Page {0} - {1} of {2}", offsetNonZeroBased.ToString(assetCountDigitNumFormat), pageLength.ToString(assetCountDigitNumFormat), _totalVisibleMessageCount.ToString(assetCountDigitNumFormat)); } if (GUILayout.Button(paginateLabel, BuildReportTool.Window.Settings.TOP_BAR_LABEL_STYLE_NAME, BRT_BuildReportWindow.LayoutNone)) { _showPageNumbers = !_showPageNumbers; } if (GUILayout.Button(nextArrow, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNone) && (_logMessageToShowStartOffset + messagePaginationLength < _totalVisibleMessageCount)) { _logMessageToShowStartOffset += messagePaginationLength; } GUILayout.Space(8); var newShowLogMessagesCollapsed = GUILayout.Toggle(_showLogMessagesCollapsed, "Collapse", BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (newShowLogMessagesCollapsed != _showLogMessagesCollapsed) { _showLogMessagesCollapsed = newShowLogMessagesCollapsed; RefreshTotalVisibleMessageCount(); } GUILayout.Space(8); bool newShowLogMessages = GUILayout.Toggle(_showLogMessages, _logFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); bool newShowWarnMessages = GUILayout.Toggle(_showWarnMessages, _warnFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); bool newShowErrorMessages = GUILayout.Toggle(_showErrorMessages, _errorFilterLabel, BuildReportTool.Window.Settings.TOP_BAR_BTN_STYLE_NAME, BRT_BuildReportWindow.LayoutNoExpandWidth); if (newShowLogMessages != _showLogMessages) { _showLogMessages = newShowLogMessages; RefreshTotalVisibleMessageCount(); } if (newShowWarnMessages != _showWarnMessages) { _showWarnMessages = newShowWarnMessages; RefreshTotalVisibleMessageCount(); } if (newShowErrorMessages != _showErrorMessages) { _showErrorMessages = newShowErrorMessages; RefreshTotalVisibleMessageCount(); } GUILayout.Space(8); GUILayout.EndHorizontal(); EditorGUIUtility.AddCursorRect(_dividerRect, MouseCursor.ResizeVertical); #endregion if (Event.current.type == EventType.MouseDown && Event.current.button == 0 && _dividerRect.Contains(Event.current.mousePosition)) { _draggingDivider = true; _mouseYOnDividerDragStart = Event.current.mousePosition.y; _heightOnDividerDragStart = height; requestRepaint = true; } if (Event.current.type == EventType.MouseUp) { _draggingDivider = false; requestRepaint = true; } if (_draggingDivider) { var newHeight = _heightOnDividerDragStart + (Event.current.mousePosition.y - _mouseYOnDividerDragStart); _buildStepsHeightPercent = newHeight / position.height; requestRepaint = true; } _logMessagesScrollPos = GUILayout.BeginScrollView(_logMessagesScrollPos, BuildReportTool.Window.Settings.HIDDEN_SCROLLBAR_STYLE_NAME, "verticalscrollbar", BRT_BuildReportWindow.LayoutNone); if (_showLogMessages || _showWarnMessages || _showErrorMessages) { if (hasStepSelected) { BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = steps[_selectedStepIdx].CollapsedBuildLogMessages; } else { messages = steps[_selectedStepIdx].BuildLogMessages; } int totalToShow = 0; if (_showLogMessages) { totalToShow += steps[_selectedStepIdx].InfoLogCount; } if (_showWarnMessages) { totalToShow += steps[_selectedStepIdx].WarnLogCount; } if (_showErrorMessages) { totalToShow += steps[_selectedStepIdx].ErrorLogCount; } if (totalToShow > 0) { useAlt = true; int messageToStartIdx = 0; int messageToStartCount = 0; for (int m = 0; m < messages.Length; ++m) { var logTypeIcon = GetLogIcon(messages[m].LogType); if (logTypeIcon == _logIcon && !_showLogMessages) { continue; } if (logTypeIcon == _warnIcon && !_showWarnMessages) { continue; } if (logTypeIcon == _errorIcon && !_showErrorMessages) { continue; } ++messageToStartCount; if (messageToStartCount - 1 == _logMessageToShowStartOffset) { messageToStartIdx = m; break; } } DrawMessages(messages, messageToStartIdx, messagePaginationLength, _selectedStepIdx, 0, ref useAlt, ref requestRepaint); } } else { useAlt = true; int messageToStartIdx = 0; int stepToStartIdx = 0; int messageToStartCount = 0; for (int s = 0; s < steps.Length; ++s) { var step = steps[s]; BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = step.CollapsedBuildLogMessages; } else { messages = step.BuildLogMessages; } if (messages == null || messages.Length == 0) { continue; } int totalToShow = 0; if (_showLogMessages) { totalToShow += step.InfoLogCount; } if (_showWarnMessages) { totalToShow += step.WarnLogCount; } if (_showErrorMessages) { totalToShow += step.ErrorLogCount; } if (totalToShow == 0) { continue; } for (int m = 0; m < messages.Length; ++m) { var logTypeIcon = GetLogIcon(messages[m].LogType); if (logTypeIcon == _logIcon && !_showLogMessages) { continue; } if (logTypeIcon == _warnIcon && !_showWarnMessages) { continue; } if (logTypeIcon == _errorIcon && !_showErrorMessages) { continue; } ++messageToStartCount; if (messageToStartCount - 1 == _logMessageToShowStartOffset) { messageToStartIdx = m; stepToStartIdx = s; break; } } } int totalShownSoFar = 0; for (int s = stepToStartIdx; s < steps.Length; ++s) { var step = steps[s]; BuildLogMessage[] messages; if (_showLogMessagesCollapsed) { messages = step.CollapsedBuildLogMessages; } else { messages = step.BuildLogMessages; } if (messages == null || messages.Length == 0) { continue; } int totalToShow = 0; if (_showLogMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedInfoLogCount; } else { totalToShow += step.InfoLogCount; } } if (_showWarnMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedWarnLogCount; } else { totalToShow += step.WarnLogCount; } } if (_showErrorMessages) { if (_showLogMessagesCollapsed) { totalToShow += step.CollapsedErrorLogCount; } else { totalToShow += step.ErrorLogCount; } } if (totalToShow == 0) { continue; } string styleToUse = useAlt ? BuildReportTool.Window.Settings.LIST_SMALL_ALT_STYLE_NAME : BuildReportTool.Window.Settings.LIST_SMALL_STYLE_NAME; GUILayout.BeginHorizontal(styleToUse, BRT_BuildReportWindow.LayoutNone); GUILayout.Space(8); GUILayout.Button(step.Name, styleToUse, BRT_BuildReportWindow.LayoutHeight25); GUILayout.EndHorizontal(); useAlt = !useAlt; DrawMessages(messages, messageToStartIdx, messagePaginationLength - totalShownSoFar, s, 20, ref useAlt, ref requestRepaint); totalShownSoFar += totalToShow; if (totalShownSoFar >= messagePaginationLength) { break; } } } } GUILayout.EndScrollView(); GUILayout.EndVertical(); GUILayout.EndHorizontal(); #endregion // if clicked on nothing interactable, then remove selection if (GUI.Button(_stepsViewRect, GUIContent.none, "HiddenScrollbar")) { SelectStep(-1, steps); } }