maint: added livewatch asset
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ingvar.LiveWatch.Editor
|
||||
{
|
||||
public class ToolbarGUI
|
||||
{
|
||||
public bool Search { get; set; }
|
||||
public bool Live
|
||||
{
|
||||
get => Watch.IsLive;
|
||||
set => Watch.IsLive = value;
|
||||
}
|
||||
public bool Collapse
|
||||
{
|
||||
get => WatchStorageSO.instance.Collapse;
|
||||
set => WatchStorageSO.instance.Collapse = value;
|
||||
}
|
||||
|
||||
public WatchStorage Watches
|
||||
{
|
||||
get => WatchStorageSO.instance.Watches;
|
||||
set
|
||||
{
|
||||
Watch.DestroyAll();
|
||||
WatchStorageSO.instance.Watches = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Rect WindowRect { get; set; }
|
||||
private Rect areaRect;
|
||||
private float xOffsetRight;
|
||||
private float xOffsetLeft;
|
||||
private GUIContent saveButtonContent;
|
||||
private GUIContent loadButtonContent;
|
||||
private GUIContent optionsButtonContent;
|
||||
private List<WatchVariable> variables = new();
|
||||
|
||||
public void OnGUI(Rect areaRect)
|
||||
{
|
||||
this.areaRect = areaRect;
|
||||
GUI.Label(areaRect, string.Empty, EditorStyles.toolbar);
|
||||
|
||||
xOffsetLeft = 0;
|
||||
|
||||
var centerBlockWidth = Constants.ToolbarLiveButtonWidth + Constants.ToolbarCollapseButtonWidth + Constants.ToolbarClearButtonWidth;
|
||||
xOffsetLeft = areaRect.width/2 - centerBlockWidth/2;
|
||||
DoLiveButton(CropEdge.LeftLocal, ref xOffsetLeft);
|
||||
DoCollapseButton(CropEdge.LeftLocal, ref xOffsetLeft);
|
||||
DoClearButton(CropEdge.LeftLocal, ref xOffsetLeft);
|
||||
|
||||
xOffsetRight = 0;
|
||||
DoOptionsButton(CropEdge.RightLocal, ref xOffsetRight);
|
||||
DoViewSettingsButton(CropEdge.RightLocal, ref xOffsetRight);
|
||||
}
|
||||
|
||||
|
||||
private void DoOptionsButton(CropEdge edge, ref float offset)
|
||||
{
|
||||
optionsButtonContent ??= EditorGUIUtility.TrIconContent("_Menu", "Extra options");
|
||||
var rect = areaRect.CropFromPositionWithSize(edge, offset, Constants.ToolbarOptionsButtonWidth);
|
||||
|
||||
if (GUI.Button(rect, optionsButtonContent, EditorStyles.toolbarButton))
|
||||
{
|
||||
GenericMenu genericMenu = new GenericMenu();
|
||||
|
||||
genericMenu.AddItem(new GUIContent(
|
||||
"Preferences", "Go to Live Watch preferences"),
|
||||
false,
|
||||
new GenericMenu.MenuFunction(OpenPreferences));
|
||||
genericMenu.AddItem(new GUIContent(
|
||||
"Collapse all rows", "Collapses all watched variables recursively"),
|
||||
false,
|
||||
new GenericMenu.MenuFunction(CollapseAll));
|
||||
genericMenu.AddItem(new GUIContent(
|
||||
"Destroy all watches", "Directly calls Watch.DestroyAll() and removes all watched variables"),
|
||||
false,
|
||||
new GenericMenu.MenuFunction(Watch.DestroyAll));
|
||||
genericMenu.DropDown(rect);
|
||||
}
|
||||
|
||||
offset += Constants.ToolbarOptionsButtonWidth;
|
||||
|
||||
void OpenPreferences()
|
||||
{
|
||||
SettingsService.OpenUserPreferences("Preferences/Live Watch");
|
||||
}
|
||||
|
||||
void CollapseAll()
|
||||
{
|
||||
Watches.GetAllChildRecursive(variables, WatchFilters.NoChilds, WatchFilters.None);
|
||||
|
||||
foreach (var variable in variables)
|
||||
variable.EditorMeta.IsExpanded = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void DoViewSettingsButton(CropEdge edge, ref float offset)
|
||||
{
|
||||
var rect = areaRect.CropFromPositionWithSize(edge, offset, Constants.ToolbarViewButtonWidth);
|
||||
var content = new GUIContent("View");
|
||||
|
||||
if (GUI.Button(rect, content, EditorStyles.toolbarDropDown))
|
||||
{
|
||||
var buttonWorldRect = new Rect(rect.x + WindowRect.x, rect.yMax + WindowRect.y, rect.width, rect.height);
|
||||
CellSettingsDropdownWindow.Create(buttonWorldRect);
|
||||
}
|
||||
|
||||
offset += Constants.ToolbarViewButtonWidth;
|
||||
}
|
||||
|
||||
private void DoClearButton(CropEdge edge, ref float offset)
|
||||
{
|
||||
var rect = areaRect.CropFromPositionWithSize(edge, offset, Constants.ToolbarClearButtonWidth);
|
||||
var content = new GUIContent("Clear", "Clear all watch values");
|
||||
|
||||
if (GUI.Button(rect, content, EditorStyles.toolbarButton))
|
||||
{
|
||||
Watch.ClearAll();
|
||||
}
|
||||
|
||||
offset += Constants.ToolbarClearButtonWidth;
|
||||
}
|
||||
|
||||
private void DoCollapseButton(CropEdge edge, ref float offset)
|
||||
{
|
||||
var rect = areaRect.CropFromPositionWithSize(edge, offset, Constants.ToolbarCollapseButtonWidth);
|
||||
var content = new GUIContent("Collapse", Collapse ? "Show columns without unique values" : "Hide columns without unique values");
|
||||
|
||||
Collapse = GUI.Toggle(rect, Collapse, content, EditorStyles.toolbarButton);
|
||||
|
||||
offset += Constants.ToolbarCollapseButtonWidth;
|
||||
}
|
||||
|
||||
private void DoLiveButton(CropEdge edge, ref float offset)
|
||||
{
|
||||
var rect = areaRect.CropFromPositionWithSize(edge, offset, Constants.ToolbarLiveButtonWidth);
|
||||
var content = new GUIContent("Live", Live ? "Watches are recording. Click to pause" : "Watches are not recording. Click to unpause");
|
||||
|
||||
Live = GUI.Toggle(rect, Live, content, EditorStyles.toolbarButton);
|
||||
|
||||
offset += Constants.ToolbarLiveButtonWidth;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user