diff --git a/Source/Editor/Surface/ContextMenu/VisjectCM.cs b/Source/Editor/Surface/ContextMenu/VisjectCM.cs index 0d4a35e51..67148a5a4 100644 --- a/Source/Editor/Surface/ContextMenu/VisjectCM.cs +++ b/Source/Editor/Surface/ContextMenu/VisjectCM.cs @@ -161,6 +161,7 @@ namespace FlaxEditor.Surface.ContextMenu X = Width * 0.5f, Parent = headerPanel, Text = "Context Sensitive", + TooltipText = "Should the nodes be filtered to only show those that can be connected in the current context?", HorizontalAlignment = TextAlignment.Far, Font = titleFontReference, }; @@ -276,11 +277,6 @@ namespace FlaxEditor.Surface.ContextMenu } } - private void OnContextSensitiveToggleStateChanged(CheckBox checkBox) - { - _contextSensitiveSearchEnabled = checkBox.Checked; - } - /// /// Adds the group archetype to add to the menu. /// @@ -318,7 +314,7 @@ namespace FlaxEditor.Surface.ContextMenu OnSearchFilterChanged(); } } - else + else if(_contextSensitiveSearchEnabled) { group.EvaluateVisibilityWithBox(_selectedBox); } @@ -355,7 +351,8 @@ namespace FlaxEditor.Surface.ContextMenu Parent = group }; } - group.EvaluateVisibilityWithBox(_selectedBox); + if(_contextSensitiveSearchEnabled) + group.EvaluateVisibilityWithBox(_selectedBox); group.SortChildren(); group.Parent = _groupsPanel; _groups.Add(group); @@ -465,7 +462,7 @@ namespace FlaxEditor.Surface.ContextMenu LockChildrenRecursive(); for (int i = 0; i < _groups.Count; i++) { - _groups[i].UpdateFilter(_searchBox.Text, _selectedBox); + _groups[i].UpdateFilter(_searchBox.Text, _contextSensitiveSearchEnabled ? _selectedBox : null); _groups[i].UpdateItemSort(_selectedBox); } SortGroups(); @@ -484,6 +481,30 @@ namespace FlaxEditor.Surface.ContextMenu Profiler.EndEvent(); } + private void OnContextSensitiveToggleStateChanged(CheckBox checkBox) + { + Profiler.BeginEvent("VisjectCM.OnContextSensitiveToggleStateChanged"); + _contextSensitiveSearchEnabled = checkBox.Checked; + + LockChildrenRecursive(); + for (int i = 0; i < _groups.Count; i++) + { + _groups[i].UpdateFilter(_searchBox.Text, _contextSensitiveSearchEnabled ? _selectedBox : null); + } + SortGroups(); + UnlockChildrenRecursive(); + + Profiler.BeginEvent("VisjectCM.Layout"); + if (SelectedItem == null || !SelectedItem.VisibleInHierarchy) + SelectedItem = _groups.Find(g => g.Visible)?.Children.Find(c => c.Visible && c is VisjectCMItem) as VisjectCMItem; + PerformLayout(); + if (SelectedItem != null) + _panel1.ScrollViewTo(SelectedItem); + Profiler.EndEvent(); + + Profiler.EndEvent(); + } + /// /// Sort the groups and keeps in sync /// @@ -540,7 +561,8 @@ namespace FlaxEditor.Surface.ContextMenu for (int i = 0; i < _groups.Count; i++) { _groups[i].ResetView(); - _groups[i].EvaluateVisibilityWithBox(_selectedBox); + if(_contextSensitiveSearchEnabled) + _groups[i].EvaluateVisibilityWithBox(_selectedBox); } UnlockChildrenRecursive(); diff --git a/Source/Editor/Surface/ContextMenu/VisjectCMGroup.cs b/Source/Editor/Surface/ContextMenu/VisjectCMGroup.cs index 9560aecbb..d11d51223 100644 --- a/Source/Editor/Surface/ContextMenu/VisjectCMGroup.cs +++ b/Source/Editor/Surface/ContextMenu/VisjectCMGroup.cs @@ -132,6 +132,13 @@ namespace FlaxEditor.Surface.ContextMenu { if (selectedBox == null) { + for (int i = 0; i < _children.Count; i++) + { + if (_children[i] is VisjectCMItem item) + { + item.CanConnectTo(null); + } + } Visible = true; return; } diff --git a/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs b/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs index be69d675c..4aa5c6ce8 100644 --- a/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs +++ b/Source/Editor/Surface/ContextMenu/VisjectCMItem.cs @@ -309,11 +309,14 @@ namespace FlaxEditor.Surface.ContextMenu if (selectedBox != null) { if (!CanConnectTo(selectedBox)) + { + _highlights?.Clear(); return; + } } _isStartsWithMatch = _isFullMatch = false; - if (filterText == null) + if (string.IsNullOrEmpty(filterText)) { // Clear filter _highlights?.Clear();