diff --git a/PalCalc.UI/Localization/LocalizationCodes.Designer.cs b/PalCalc.UI/Localization/LocalizationCodes.Designer.cs
index 43da513..d88455b 100644
--- a/PalCalc.UI/Localization/LocalizationCodes.Designer.cs
+++ b/PalCalc.UI/Localization/LocalizationCodes.Designer.cs
@@ -885,6 +885,22 @@ public enum LocalizationCodes
///
/// Looks up a localized string similar to .
///
+ LC_TRAITS_SEARCH_DESCRIPTION,
+ ///
+ /// Looks up a localized string similar to .
+ ///
+ LC_TRAITS_SEARCH_NAME,
+ ///
+ /// Looks up a localized string similar to .
+ ///
+ LC_TRAITS_SEARCH_SEARCH,
+ ///
+ /// Looks up a localized string similar to .
+ ///
+ LC_TRAITS_SEARCH_TITLE,
+ ///
+ /// Looks up a localized string similar to .
+ ///
LC_UNKNOWN_GUILD,
///
/// Looks up a localized string similar to .
diff --git a/PalCalc.UI/Localization/LocalizationCodes.resx b/PalCalc.UI/Localization/LocalizationCodes.resx
index c9b714d..26b7722 100644
--- a/PalCalc.UI/Localization/LocalizationCodes.resx
+++ b/PalCalc.UI/Localization/LocalizationCodes.resx
@@ -748,4 +748,16 @@
InternalName
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PalCalc.UI/Localization/Localizations/en.resx b/PalCalc.UI/Localization/Localizations/en.resx
index 5b96d68..3ad9098 100644
--- a/PalCalc.UI/Localization/Localizations/en.resx
+++ b/PalCalc.UI/Localization/Localizations/en.resx
@@ -770,6 +770,18 @@ Higher values linearly affect time required, depending on how many types of pals
Rename Preset '{PresetName}'
+
+ Description
+
+
+ Name
+
+
+ Search
+
+
+ Search Passive Skills
+
{InternalName} (Unrecognized)
diff --git a/PalCalc.UI/View/Main/PalTargetView.xaml b/PalCalc.UI/View/Main/PalTargetView.xaml
index c709ae7..381dbdc 100644
--- a/PalCalc.UI/View/Main/PalTargetView.xaml
+++ b/PalCalc.UI/View/Main/PalTargetView.xaml
@@ -9,6 +9,7 @@
xmlns:dnkc="clr-namespace:DotNetKit.Windows.Controls;assembly=DotNetKit.Wpf.AutoCompleteComboBox"
xmlns:itl="clr-namespace:PalCalc.UI.Localization"
xmlns:vu="clr-namespace:PalCalc.UI.View.Utils"
+ xmlns:materialIcons="clr-namespace:Material.Icons.WPF;assembly=Material.Icons.WPF"
d:Background="White"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance vm:PalTargetViewModel, IsDesignTimeCreatable=True}"
@@ -34,7 +35,15 @@
-
+
+
+
+
+
+
+
diff --git a/PalCalc.UI/View/PassivesSearchWindow.xaml b/PalCalc.UI/View/PassivesSearchWindow.xaml
new file mode 100644
index 0000000..ce73b4b
--- /dev/null
+++ b/PalCalc.UI/View/PassivesSearchWindow.xaml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PalCalc.UI/View/PassivesSearchWindow.xaml.cs b/PalCalc.UI/View/PassivesSearchWindow.xaml.cs
new file mode 100644
index 0000000..706ed3d
--- /dev/null
+++ b/PalCalc.UI/View/PassivesSearchWindow.xaml.cs
@@ -0,0 +1,38 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using PalCalc.UI.ViewModel.Mapped;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace PalCalc.UI.View
+{
+ [ObservableObject]
+ public partial class PassivesSearchWindow : Window
+ {
+ [NotifyPropertyChangedFor(nameof(DisplayedOptions))]
+ [ObservableProperty]
+ private string searchText;
+
+ public List DisplayedOptions =>
+ PassiveSkillViewModel.All.Where(p =>
+ string.IsNullOrEmpty(SearchText) ||
+ p.Name.Value.Contains(SearchText, StringComparison.OrdinalIgnoreCase) ||
+ p.Description.Value.Contains(SearchText, StringComparison.OrdinalIgnoreCase)
+ ).ToList();
+
+ public PassivesSearchWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/PalCalc.UI/ViewModel/PalTargetViewModel.cs b/PalCalc.UI/ViewModel/PalTargetViewModel.cs
index ad1c591..f8fc23f 100644
--- a/PalCalc.UI/ViewModel/PalTargetViewModel.cs
+++ b/PalCalc.UI/ViewModel/PalTargetViewModel.cs
@@ -2,6 +2,7 @@
using CommunityToolkit.Mvvm.Input;
using PalCalc.Model;
using PalCalc.UI.Model;
+using PalCalc.UI.View;
using PalCalc.UI.ViewModel.Mapped;
using System;
using System.Collections.Generic;
@@ -65,6 +66,8 @@ public PalTargetViewModel(SaveGameViewModel sourceSave, PalSpecifierViewModel in
OpenPresetsMenuCommand = new RelayCommand(() => PresetsMenuIsOpen = true);
presets.PresetSelected += (_) => PresetsMenuIsOpen = false;
+
+ OpenPassivesSearchCommand = new RelayCommand(() => new PassivesSearchWindow().Show());
}
private void PalSource_PropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -157,5 +160,7 @@ public IEnumerable AvailablePals
private bool presetsMenuIsOpen = false;
public IRelayCommand OpenPresetsMenuCommand { get; }
+
+ public IRelayCommand OpenPassivesSearchCommand { get; }
}
}