diff --git a/Source/Editor/GUI/Input/SearchBox.cs b/Source/Editor/GUI/Input/SearchBox.cs new file mode 100644 index 000000000..8ffd0874a --- /dev/null +++ b/Source/Editor/GUI/Input/SearchBox.cs @@ -0,0 +1,56 @@ +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.GUI.Input +{ + /// + /// Search box control which can gather text search input from the user. + /// + public class SearchBox : TextBox + { + /// + /// A button that clears the search bar. + /// + public Button ClearSearchButton { get; } + + /// + /// Init search box + /// + public SearchBox() + : this(false, 0, 0) + { + } + + /// + /// Init search box + /// + public SearchBox(bool isMultiline, float x, float y, float width = 120) + : base(isMultiline, x, y, width) + { + WatermarkText = "Search..."; + + ClearSearchButton = new Button + { + Parent = this, + Width = 14.0f, + Height = 14.0f, + AnchorPreset = AnchorPresets.TopRight, + Text = "", + TooltipText = "Cancel Search.", + BackgroundColor = TextColor, + BorderColor = Color.Transparent, + BackgroundColorHighlighted = Style.Current.ForegroundGrey, + BorderColorHighlighted = Color.Transparent, + BackgroundColorSelected = Style.Current.ForegroundGrey, + BorderColorSelected = Color.Transparent, + BackgroundBrush = new SpriteBrush(Editor.Instance.Icons.Cross12), + Visible = false, + }; + ClearSearchButton.LocalY += 2; + ClearSearchButton.LocalX -= 2; + ClearSearchButton.Clicked += Clear; + + TextChanged += () => ClearSearchButton.Visible = !string.IsNullOrEmpty(Text); + } + } +} diff --git a/Source/Editor/GUI/ItemsListContextMenu.cs b/Source/Editor/GUI/ItemsListContextMenu.cs index 77ee9af76..b761fa989 100644 --- a/Source/Editor/GUI/ItemsListContextMenu.cs +++ b/Source/Editor/GUI/ItemsListContextMenu.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Input; using FlaxEditor.Utilities; using FlaxEngine; using FlaxEngine.GUI; @@ -204,11 +205,10 @@ namespace FlaxEditor.GUI Size = new Float2(width, height); // Search box - _searchBox = new TextBox(false, 1, 1) + _searchBox = new SearchBox(false, 1, 1) { Parent = this, Width = Width - 3, - WatermarkText = "Search...", }; _searchBox.TextChanged += OnSearchFilterChanged; diff --git a/Source/Editor/Surface/ContextMenu/VisjectCM.cs b/Source/Editor/Surface/ContextMenu/VisjectCM.cs index 984e3e520..5057e4445 100644 --- a/Source/Editor/Surface/ContextMenu/VisjectCM.cs +++ b/Source/Editor/Surface/ContextMenu/VisjectCM.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Input; using FlaxEditor.Scripting; using FlaxEngine; using FlaxEngine.GUI; @@ -128,10 +129,9 @@ namespace FlaxEditor.Surface.ContextMenu Size = new Float2(320, 220); // Search box - _searchBox = new TextBox(false, 1, 1) + _searchBox = new SearchBox(false, 1, 1) { Width = Width - 3, - WatermarkText = "Search...", Parent = this }; _searchBox.TextChanged += OnSearchFilterChanged; diff --git a/Source/Editor/Utilities/Utils.cs b/Source/Editor/Utilities/Utils.cs index 74ffb721b..ea7f44efc 100644 --- a/Source/Editor/Utilities/Utils.cs +++ b/Source/Editor/Utilities/Utils.cs @@ -14,6 +14,7 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Text; using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Input; using FlaxEditor.GUI.Tree; using FlaxEditor.SceneGraph; using FlaxEditor.Scripting; @@ -956,10 +957,9 @@ namespace FlaxEditor.Utilities { Size = new Float2(320, 220), }; - searchBox = new TextBox(false, 1, 1) + searchBox = new SearchBox(false, 1, 1) { Width = menu.Width - 3, - WatermarkText = "Search...", Parent = menu, }; var panel1 = new Panel(ScrollBars.Vertical) diff --git a/Source/Editor/Windows/Assets/PrefabWindow.cs b/Source/Editor/Windows/Assets/PrefabWindow.cs index 78d210592..73f6aee21 100644 --- a/Source/Editor/Windows/Assets/PrefabWindow.cs +++ b/Source/Editor/Windows/Assets/PrefabWindow.cs @@ -6,6 +6,7 @@ using FlaxEditor.Content; using FlaxEditor.CustomEditors; using FlaxEditor.Gizmo; using FlaxEditor.GUI; +using FlaxEditor.GUI.Input; using FlaxEditor.SceneGraph; using FlaxEditor.Viewport; using FlaxEngine; @@ -124,10 +125,9 @@ namespace FlaxEditor.Windows.Assets IsScrollable = false, Offsets = new Margin(0, 0, 0, 18 + 6), }; - _searchBox = new TextBox + _searchBox = new SearchBox() { AnchorPreset = AnchorPresets.HorizontalStretchMiddle, - WatermarkText = "Search...", Parent = headerPanel, Bounds = new Rectangle(4, 4, headerPanel.Width - 8, 18), }; diff --git a/Source/Editor/Windows/ContentWindow.cs b/Source/Editor/Windows/ContentWindow.cs index 3b1d0a11f..5ae63dbce 100644 --- a/Source/Editor/Windows/ContentWindow.cs +++ b/Source/Editor/Windows/ContentWindow.cs @@ -113,10 +113,9 @@ namespace FlaxEditor.Windows IsScrollable = false, Offsets = new Margin(0, 0, 0, 18 + 6), }; - _foldersSearchBox = new TextBox + _foldersSearchBox = new SearchBox { AnchorPreset = AnchorPresets.HorizontalStretchMiddle, - WatermarkText = "Search...", Parent = headerPanel, Bounds = new Rectangle(4, 4, headerPanel.Width - 8, 18), }; @@ -149,10 +148,9 @@ namespace FlaxEditor.Windows Parent = _split.Panel2, }; const float viewDropdownWidth = 50.0f; - _itemsSearchBox = new TextBox + _itemsSearchBox = new SearchBox { AnchorPreset = AnchorPresets.HorizontalStretchMiddle, - WatermarkText = "Search...", Parent = contentItemsSearchPanel, Bounds = new Rectangle(viewDropdownWidth + 8, 4, contentItemsSearchPanel.Width - 12 - viewDropdownWidth, 18), }; diff --git a/Source/Editor/Windows/OutputLogWindow.cs b/Source/Editor/Windows/OutputLogWindow.cs index c9f3ac6e2..22989124f 100644 --- a/Source/Editor/Windows/OutputLogWindow.cs +++ b/Source/Editor/Windows/OutputLogWindow.cs @@ -7,6 +7,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Xml; using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Input; using FlaxEditor.Options; using FlaxEngine; using FlaxEngine.GUI; @@ -157,9 +158,8 @@ namespace FlaxEditor.Windows Parent = this, }; _viewDropdown.Clicked += OnViewButtonClicked; - _searchBox = new TextBox(false, _viewDropdown.Right + 2, 2, Width - _viewDropdown.Right - 2 - _scrollSize) + _searchBox = new SearchBox(false, _viewDropdown.Right + 2, 2, Width - _viewDropdown.Right - 2 - _scrollSize) { - WatermarkText = "Search...", Parent = this, }; _searchBox.TextChanged += Refresh; diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 8fd6e33ee..28ab83ff5 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -6,6 +6,7 @@ using FlaxEditor.Gizmo; using FlaxEditor.Content; using FlaxEditor.GUI.Tree; using FlaxEditor.GUI.Drag; +using FlaxEditor.GUI.Input; using FlaxEditor.SceneGraph; using FlaxEditor.SceneGraph.GUI; using FlaxEditor.Scripting; @@ -49,10 +50,9 @@ namespace FlaxEditor.Windows IsScrollable = false, Offsets = new Margin(0, 0, 0, 18 + 6), }; - _searchBox = new TextBox + _searchBox = new SearchBox { AnchorPreset = AnchorPresets.HorizontalStretchMiddle, - WatermarkText = "Search...", Parent = headerPanel, Bounds = new Rectangle(4, 4, headerPanel.Width - 8, 18), }; diff --git a/Source/Editor/Windows/Search/ContentSearchWindow.cs b/Source/Editor/Windows/Search/ContentSearchWindow.cs index cb539bf47..7128b7db9 100644 --- a/Source/Editor/Windows/Search/ContentSearchWindow.cs +++ b/Source/Editor/Windows/Search/ContentSearchWindow.cs @@ -10,6 +10,7 @@ using FlaxEditor; using FlaxEditor.GUI; using FlaxEditor.GUI.ContextMenu; using FlaxEditor.GUI.Docking; +using FlaxEditor.GUI.Input; using FlaxEditor.GUI.Tree; using FlaxEditor.Scripting; using FlaxEditor.Surface; @@ -224,10 +225,9 @@ namespace FlaxEngine.Windows.Search Parent = topPanel, }; optionsButton.ButtonClicked += OnOptionsDropdownClicked; - _searchBox = new TextBox + _searchBox = new SearchBox { AnchorPreset = AnchorPresets.HorizontalStretchMiddle, - WatermarkText = "Search...", Parent = topPanel, Bounds = new Rectangle(optionsButton.Right + 2.0f, 2, topPanel.Width - 4.0f - optionsButton.Width, 18.0f), }; diff --git a/Source/Editor/Windows/ToolboxWindow.cs b/Source/Editor/Windows/ToolboxWindow.cs index ff03d8e0d..6c1b3d9cc 100644 --- a/Source/Editor/Windows/ToolboxWindow.cs +++ b/Source/Editor/Windows/ToolboxWindow.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; +using FlaxEditor.GUI.Input; using FlaxEditor.GUI.Tabs; using FlaxEditor.GUI.Tree; using FlaxEditor.Scripting; @@ -130,10 +131,9 @@ namespace FlaxEditor.Windows }; _groupSearch = CreateGroupWithList(_actorGroups, "Search", 26); - _searchBox = new TextBox + _searchBox = new SearchBox { AnchorPreset = AnchorPresets.HorizontalStretchTop, - WatermarkText = "Search...", Parent = _groupSearch.Parent.Parent, Bounds = new Rectangle(4, 4, _actorGroups.Width - 8, 18), };