diff --git a/Source/Editor/EditorIcons.cs b/Source/Editor/EditorIcons.cs index d4b89b8d3..ff3164dcc 100644 --- a/Source/Editor/EditorIcons.cs +++ b/Source/Editor/EditorIcons.cs @@ -46,6 +46,10 @@ namespace FlaxEditor public SpriteHandle Down32; public SpriteHandle FolderClosed32; public SpriteHandle FolderOpen32; + public SpriteHandle FolderFill32; + public SpriteHandle Info32; + public SpriteHandle Warning32; + public SpriteHandle Error32; // Visject public SpriteHandle VisjectBoxOpen32; @@ -128,6 +132,10 @@ namespace FlaxEditor public SpriteHandle AndroidIcon128; public SpriteHandle PS4Icon128; public SpriteHandle FlaxLogo128; + public SpriteHandle SwitchIcon128; + public SpriteHandle SwitchSettings128; + public SpriteHandle Json128; + public SpriteHandle LocalizationSettings128; internal void LoadIcons() { diff --git a/Source/Editor/Windows/Assets/VisualScriptWindow.cs b/Source/Editor/Windows/Assets/VisualScriptWindow.cs index b9ddafa87..545f15867 100644 --- a/Source/Editor/Windows/Assets/VisualScriptWindow.cs +++ b/Source/Editor/Windows/Assets/VisualScriptWindow.cs @@ -167,6 +167,8 @@ namespace FlaxEditor.Windows.Assets /// public override DisplayStyle Style => DisplayStyle.InlineIntoParent; + private Control _overrideButton; + /// public override void Initialize(LayoutElementsContainer layout) { @@ -178,6 +180,21 @@ namespace FlaxEditor.Windows.Assets var group = layout.Group("Functions"); var nodes = window.VisjectSurface.Nodes; + var grid = group.CustomContainer(); + var gridControl = grid.CustomControl; + gridControl.ClipChildren = false; + gridControl.Height = Button.DefaultHeight; + gridControl.SlotsHorizontally = 2; + gridControl.SlotsVertically = 1; + + var addOverride = grid.Button("Add Override"); + addOverride.Button.Clicked += OnOverrideMethodClicked; + // TODO: Add sender arg to button clicked action? + _overrideButton = addOverride.Control; + + var addFuncction = grid.Button("Add Function"); + addFuncction.Button.Clicked += OnAddNewFunctionClicked; + // List of functions in the graph for (int i = 0; i < nodes.Count; i++) { @@ -192,60 +209,20 @@ namespace FlaxEditor.Windows.Assets } else if (node is Surface.Archetypes.Function.MethodOverrideNode overrideNode) { - var label = group.ClickableLabel(overrideNode.Title + " (override)").CustomControl; + var label = group.ClickableLabel($"{overrideNode.Title} (override)").CustomControl; label.TextColorHighlighted = Color.FromBgra(0xFFA0A0A0); label.TooltipText = overrideNode.TooltipText; label.DoubleClick += () => ((VisualScriptWindow)Values[0]).Surface.FocusNode(overrideNode); label.RightClick += () => ShowContextMenu(overrideNode, label); } } - - // New function button - const float groupPanelButtonSize = 14; - var addNewFunction = new Image - { - TooltipText = "Add new function", - AutoFocus = true, - AnchorPreset = AnchorPresets.TopRight, - Parent = group.Panel, - Bounds = new Rectangle(group.Panel.Width - groupPanelButtonSize, 0, groupPanelButtonSize, groupPanelButtonSize), - IsScrollable = false, - Color = FlaxEngine.GUI.Style.Current.ForegroundGrey, - Margin = new Margin(1), - Brush = new SpriteBrush(Editor.Instance.Icons.Add64), - }; - addNewFunction.Clicked += OnAddNewFunctionClicked; - - // Override method button - var overrideMethod = new Image - { - TooltipText = "Override method", - AutoFocus = true, - AnchorPreset = AnchorPresets.TopRight, - Parent = group.Panel, - Bounds = new Rectangle(group.Panel.Width - groupPanelButtonSize * 2, 0, groupPanelButtonSize, groupPanelButtonSize), - IsScrollable = false, - Color = FlaxEngine.GUI.Style.Current.ForegroundGrey, - Margin = new Margin(1), - Brush = new SpriteBrush(Editor.Instance.Icons.Import64), - }; - overrideMethod.Clicked += OnOverrideMethodClicked; - } - - private void OnAddNewFunctionClicked(Image image, MouseButton button) - { - if (button != MouseButton.Left) - return; - var surface = ((VisualScriptWindow)Values[0]).Surface; - var surfaceBounds = surface.AllNodesBounds; - surface.ShowArea(new Rectangle(surfaceBounds.BottomLeft, new Vector2(200, 150)).MakeExpanded(400.0f)); - var node = surface.Context.SpawnNode(16, 6, surfaceBounds.BottomLeft + new Vector2(0, 50)); - surface.Select(node); } private void ShowContextMenu(SurfaceNode node, ClickableLabel label) { + // TODO: Execute only on "Edit Signature...", this makes the "Show" button useless ((VisualScriptWindow)Values[0]).Surface.FocusNode(node); + var cm = new ContextMenu(); cm.AddButton("Show", () => ((VisualScriptWindow)Values[0]).Surface.FocusNode(node)).Icon = Editor.Instance.Icons.Search12; cm.AddButton("Delete", () => ((VisualScriptWindow)Values[0]).Surface.Delete(node)).Icon = Editor.Instance.Icons.Cross12; @@ -253,11 +230,17 @@ namespace FlaxEditor.Windows.Assets cm.Show(label, new Vector2(0, label.Height)); } - private void OnOverrideMethodClicked(Image image, MouseButton button) + private void OnAddNewFunctionClicked() { - if (button != MouseButton.Left) - return; + var surface = ((VisualScriptWindow)Values[0]).Surface; + var surfaceBounds = surface.AllNodesBounds; + surface.ShowArea(new Rectangle(surfaceBounds.BottomLeft, new Vector2(200, 150)).MakeExpanded(400.0f)); + var node = surface.Context.SpawnNode(16, 6, surfaceBounds.BottomLeft + new Vector2(0, 50)); + surface.Select(node); + } + private void OnOverrideMethodClicked() + { var cm = new ContextMenu(); var window = (VisualScriptWindow)Values[0]; var scriptMeta = window.Asset.Meta; @@ -310,7 +293,7 @@ namespace FlaxEditor.Windows.Assets { cm.AddButton("Nothing to override"); } - cm.Show(image, new Vector2(0, image.Height)); + cm.Show(_overrideButton, new Vector2(0, _overrideButton.Height)); } }