diff --git a/AideDeJeu/AideDeJeu/Tools/Converters.cs b/AideDeJeu/AideDeJeu/Tools/Converters.cs index 6edf28c9..7c0527fb 100644 --- a/AideDeJeu/AideDeJeu/Tools/Converters.cs +++ b/AideDeJeu/AideDeJeu/Tools/Converters.cs @@ -209,7 +209,7 @@ namespace AideDeJeu.Tools { var vm = DependencyService.Get(); var itemSourceType = vm.ItemSourceType; - return vm.GetFilterViewModel(itemSourceType); + return vm.GetFilterViewModel(itemSourceType).Filters; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs index f7e15214..6fe3fd45 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/FilterViewModel.cs @@ -14,19 +14,90 @@ namespace AideDeJeu.ViewModels { public ICommand LoadItemsCommand { get; protected set; } public abstract IEnumerable FilterItems(IEnumerable items); + public abstract IEnumerable Filters { get; } + + } + + public enum FilterKeys + { + Class, + MinLevel, + MaxLevel, + School, + Ritual, + Source, + } + + public class Filter : BaseViewModel + { + public FilterKeys Key { get; set; } + public string Name { get; set; } + public List> KeyValues { get; set; } + private int _Index; + public int Index + { + get + { + return _Index; + } + set + { + if (_Index != value) + { + SetProperty(ref _Index, value); + Main.LoadItemsCommand.Execute(null); + } + } + } + + public string SelectedKey + { + get + { + return KeyValues[Index].Key; + } + } } #region Spells public abstract class SpellFilterViewModel : FilterViewModel { + private IEnumerable _Filters = null; + public override IEnumerable Filters + { + get + { + if(_Filters == null) + { + _Filters = new List() + { + new Filter() { Key = FilterKeys.Class, Name = "Classe", KeyValues = Classes, Index = 0 }, + new Filter() { Key = FilterKeys.MinLevel, Name = "Niveau Min", KeyValues = Niveaux, Index = 0 }, + new Filter() { Key = FilterKeys.MaxLevel, Name = "Niveau Max", KeyValues = Niveaux, Index = 9 }, + new Filter() { Key = FilterKeys.School, Name = "Ecole", KeyValues = Ecoles, Index = 0 }, + new Filter() { Key = FilterKeys.Ritual, Name = "Rituel", KeyValues = Rituels, Index = 0 }, + new Filter() { Key = FilterKeys.Source, Name = "Source", KeyValues = Sources, Index = 0 }, + }; + } + return _Filters; + } + } + + public override IEnumerable FilterItems(IEnumerable items) { - var classe = Classes[Classe].Key; - var niveauMin = Niveaux[NiveauMin].Key; - var niveauMax = Niveaux[NiveauMax].Key; - var ecole = Ecoles[Ecole].Key; - var rituel = Rituels[Rituel].Key; - var source = Sources[Source].Key; + var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey; + var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey; + var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey; + var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey; + var rituel = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey; + var source = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Source).SelectedKey; + //var classe = Classes[Classe].Key; + //var niveauMin = Niveaux[NiveauMin].Key; + //var niveauMax = Niveaux[NiveauMax].Key; + //var ecole = Ecoles[Ecole].Key; + //var rituel = Rituels[Rituel].Key; + //var source = Sources[Source].Key; return items .Where(item => @@ -334,6 +405,27 @@ namespace AideDeJeu.ViewModels #region Monsters public abstract class MonsterFilterViewModel : FilterViewModel { + private IEnumerable _Filters = null; + public override IEnumerable Filters + { + get + { + if (_Filters == null) + { + _Filters = new List() + { + //new Filter() { Key = FilterKeys.Class, Name = "Classe", KeyValues = Classes, Index = 0 }, + //new Filter() { Key = FilterKeys.MinLevel, Name = "Niveau Min", KeyValues = Niveaux, Index = 0 }, + //new Filter() { Key = FilterKeys.MaxLevel, Name = "Niveau Max", KeyValues = Niveaux, Index = 0 }, + //new Filter() { Key = FilterKeys.School, Name = "Ecole", KeyValues = Ecoles, Index = 0 }, + //new Filter() { Key = FilterKeys.Ritual, Name = "Rituel", KeyValues = Rituels, Index = 0 }, + //new Filter() { Key = FilterKeys.Source, Name = "Source", KeyValues = Sources, Index = 0 }, + }; + } + return _Filters; + } + } + public override IEnumerable FilterItems(IEnumerable items) { var powerComparer = new PowerComparer(); diff --git a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs index 3f05a5ea..13f2a42b 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/ItemsViewModel.cs @@ -10,10 +10,10 @@ namespace AideDeJeu.ViewModels { public ItemsViewModel() { - LoadItemsCommand = new Command(() => ExecuteLoadItemsCommand(null)); + LoadItemsCommand = new Command(() => ExecuteLoadItemsCommand()); } public ICommand LoadItemsCommand { get; protected set; } - public abstract void ExecuteLoadItemsCommand(FilterViewModel filterViewModel); + public abstract void ExecuteLoadItemsCommand(); public abstract Task ExecuteGotoItemCommandAsync(Item item); //private string _SearchText = ""; diff --git a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs index 560f68b8..77ac8c8d 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/MainViewModel.cs @@ -37,7 +37,7 @@ namespace AideDeJeu.ViewModels public class MainViewModel : BaseViewModel { - private ItemSourceType _ItemSourceType = ItemSourceType.MonsterVO; + private ItemSourceType _ItemSourceType = ItemSourceType.SpellVF; public ItemSourceType ItemSourceType { get @@ -121,7 +121,7 @@ namespace AideDeJeu.ViewModels //Monsters = new MonstersViewModel(navigator, Items); LoadItemsCommand = new Command(() => { - GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommand(GetFilterViewModel(ItemSourceType)); + GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommand(); }); GotoItemCommand = new Command(async (item) => await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item)); SwitchToSpells = new Command(() => ItemSourceType = (ItemSourceType & ~ ItemSourceType.Monster) | ItemSourceType.Spell); diff --git a/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs index e6831042..771e4c30 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/MonstersViewModel.cs @@ -48,23 +48,7 @@ namespace AideDeJeu.ViewModels } } - - public IEnumerable GetMonsters(string category, string type, string minPower, string maxPower, string size, string legendary, string source) - { - var powerComparer = new PowerComparer(); - return AllMonsters.Where(monster => - monster.Type.Contains(type) && - (string.IsNullOrEmpty(size) || monster.Size.Equals(size)) && - monster.Source.Contains(source) && - powerComparer.Compare(monster.Challenge, minPower) >= 0 && - powerComparer.Compare(monster.Challenge, maxPower) <= 0 - ) - .OrderBy(monster => monster.NamePHB) - .ToList(); - } - - - public override void ExecuteLoadItemsCommand(FilterViewModel filterViewModel) + public override void ExecuteLoadItemsCommand() { if (IsBusy) return; @@ -74,8 +58,8 @@ namespace AideDeJeu.ViewModels try { Main.Items.Clear(); - //var filter = filterViewModel as MonsterFilterViewModel; - //var items = GetMonsters(category: filter.Categories[filter.Category].Key, type: filter.Types[filter.Type].Key, minPower: filter.Powers[filter.MinPower].Key, maxPower: filter.Powers[filter.MaxPower].Key, size: filter.Sizes[filter.Size].Key, legendary: filter.Legendaries[filter.Legendary].Key, source: filter.Sources[filter.Source].Key); + + var filterViewModel = Main.GetFilterViewModel(ItemSourceType); var items = filterViewModel.FilterItems(AllMonsters); foreach (var item in items) diff --git a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs index 548db346..009d9649 100644 --- a/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs +++ b/AideDeJeu/AideDeJeu/ViewModels/SpellsViewModel.cs @@ -61,7 +61,7 @@ namespace AideDeJeu.ViewModels } - public override void ExecuteLoadItemsCommand(FilterViewModel filterViewModel) + public override void ExecuteLoadItemsCommand() { if (IsBusy) return; @@ -71,9 +71,9 @@ namespace AideDeJeu.ViewModels try { Main.Items.Clear(); - IEnumerable items = null; - SpellFilterViewModel filters = filterViewModel as SpellFilterViewModel; - items = GetSpells(classe: filters.Classes[filters.Classe].Key, niveauMin: filters.Niveaux[filters.NiveauMin].Key, niveauMax: filters.Niveaux[filters.NiveauMax].Key, ecole: filters.Ecoles[filters.Ecole].Key, rituel: filters.Rituels[filters.Rituel].Key, source: filters.Sources[filters.Source].Key); + + var filterViewModel = Main.GetFilterViewModel(ItemSourceType); + var items = filterViewModel.FilterItems(AllSpells); foreach (var item in items) { Main.Items.Add(item); diff --git a/AideDeJeu/AideDeJeu/Views/MainPage.xaml b/AideDeJeu/AideDeJeu/Views/MainPage.xaml index 9f86cc1d..7fce2726 100644 --- a/AideDeJeu/AideDeJeu/Views/MainPage.xaml +++ b/AideDeJeu/AideDeJeu/Views/MainPage.xaml @@ -76,7 +76,21 @@ - + + + + + + + + + + + + +