瀏覽代碼

Reimplemented search

CPKreuz 1 年之前
父節點
當前提交
bd244a04b7

+ 6 - 1
src/PixiEditor/Models/Nodes/NodeTypeInfo.cs

@@ -1,5 +1,6 @@
 using System.Reflection;
 using PixiEditor.ChangeableDocument.Changeables.Graph;
+using PixiEditor.Extensions.Common.Localization;
 
 namespace PixiEditor.Models.Nodes;
 
@@ -11,7 +12,9 @@ public class NodeTypeInfo
     
     public string? PickerName { get; }
 
-    public string FinalPickerName => PickerName ?? DisplayName;
+    public LocalizedString FinalPickerName { get; }
+
+    public bool Hidden => PickerName is { Length: 0 };
     
     public Type NodeType { get; }
 
@@ -24,5 +27,7 @@ public class NodeTypeInfo
         UniqueName = attribute.UniqueName;
         DisplayName = attribute.DisplayName;
         PickerName = attribute.PickerName;
+
+        FinalPickerName = PickerName ?? DisplayName;
     }
 }

+ 2 - 2
src/PixiEditor/Styles/Templates/NodePicker.axaml

@@ -22,8 +22,8 @@
                                 <Button Command="{Binding SelectNodeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=nodes:NodePicker}}"
                                         CommandParameter="{Binding}"
                                         Margin="0,1"
-                                        IsVisible="{Binding FinalPickerName, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
-                                        ui:Translator.Key="{Binding FinalPickerName}" />
+                                        IsVisible="{Binding !Hidden}"
+                                        ui:Translator.LocalizedString="{Binding FinalPickerName}" />
                             </DataTemplate>
                         </ItemsControl.ItemTemplate>
                     </ItemsControl>

+ 11 - 3
src/PixiEditor/Views/Nodes/NodePicker.cs

@@ -58,11 +58,19 @@ public partial class NodePicker : TemplatedControl
 
     private static void OnSearchQueryChanged(AvaloniaPropertyChangedEventArgs e)
     {
-        if (e.Sender is NodePicker nodePicker)
+        if (e.Sender is not NodePicker nodePicker)
         {
-            // nodePicker.FilteredNodeTypes = new ObservableCollection<NodeTypeInfo>(nodePicker.AllNodeTypes
-            //     .Where(x => x.Name.ToLower().Contains(nodePicker.SearchQuery.ToLower())));
+            return;
         }
+
+        nodePicker.FilteredNodeTypeInfos = new ObservableCollection<NodeTypeInfo>(nodePicker.AllNodeTypeInfos
+            .Where(SearchComparer));
+
+        return;
+
+        bool SearchComparer(NodeTypeInfo x) =>
+            x.FinalPickerName.Value.Replace(" ", "")
+                .Contains(nodePicker.SearchQuery.Replace(" ", ""), StringComparison.OrdinalIgnoreCase);
     }
     
     private static void OnAllNodeTypesChanged(AvaloniaPropertyChangedEventArgs e)