mirror of
https://github.com/Nioux/AideDeJeu.git
synced 2025-11-01 07:56:04 +00:00
Premier filtre générique ok
This commit is contained in:
parent
2c0d222a03
commit
779cbaa41b
7 changed files with 125 additions and 35 deletions
|
|
@ -209,7 +209,7 @@ namespace AideDeJeu.Tools
|
||||||
{
|
{
|
||||||
var vm = DependencyService.Get<MainViewModel>();
|
var vm = DependencyService.Get<MainViewModel>();
|
||||||
var itemSourceType = vm.ItemSourceType;
|
var itemSourceType = vm.ItemSourceType;
|
||||||
return vm.GetFilterViewModel(itemSourceType);
|
return vm.GetFilterViewModel(itemSourceType).Filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
|
|
||||||
|
|
@ -14,19 +14,90 @@ namespace AideDeJeu.ViewModels
|
||||||
{
|
{
|
||||||
public ICommand LoadItemsCommand { get; protected set; }
|
public ICommand LoadItemsCommand { get; protected set; }
|
||||||
public abstract IEnumerable<Item> FilterItems(IEnumerable<Item> items);
|
public abstract IEnumerable<Item> FilterItems(IEnumerable<Item> items);
|
||||||
|
public abstract IEnumerable<Filter> 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<KeyValuePair<string, string>> 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
|
#region Spells
|
||||||
public abstract class SpellFilterViewModel : FilterViewModel
|
public abstract class SpellFilterViewModel : FilterViewModel
|
||||||
{
|
{
|
||||||
|
private IEnumerable<Filter> _Filters = null;
|
||||||
|
public override IEnumerable<Filter> Filters
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if(_Filters == null)
|
||||||
|
{
|
||||||
|
_Filters = new List<Filter>()
|
||||||
|
{
|
||||||
|
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<Item> FilterItems(IEnumerable<Item> items)
|
public override IEnumerable<Item> FilterItems(IEnumerable<Item> items)
|
||||||
{
|
{
|
||||||
var classe = Classes[Classe].Key;
|
var classe = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Class).SelectedKey;
|
||||||
var niveauMin = Niveaux[NiveauMin].Key;
|
var niveauMin = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MinLevel).SelectedKey;
|
||||||
var niveauMax = Niveaux[NiveauMax].Key;
|
var niveauMax = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.MaxLevel).SelectedKey;
|
||||||
var ecole = Ecoles[Ecole].Key;
|
var ecole = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.School).SelectedKey;
|
||||||
var rituel = Rituels[Rituel].Key;
|
var rituel = Filters.SingleOrDefault(filter => filter.Key == FilterKeys.Ritual).SelectedKey;
|
||||||
var source = Sources[Source].Key;
|
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
|
return items
|
||||||
.Where(item =>
|
.Where(item =>
|
||||||
|
|
@ -334,6 +405,27 @@ namespace AideDeJeu.ViewModels
|
||||||
#region Monsters
|
#region Monsters
|
||||||
public abstract class MonsterFilterViewModel : FilterViewModel
|
public abstract class MonsterFilterViewModel : FilterViewModel
|
||||||
{
|
{
|
||||||
|
private IEnumerable<Filter> _Filters = null;
|
||||||
|
public override IEnumerable<Filter> Filters
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_Filters == null)
|
||||||
|
{
|
||||||
|
_Filters = new List<Filter>()
|
||||||
|
{
|
||||||
|
//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<Item> FilterItems(IEnumerable<Item> items)
|
public override IEnumerable<Item> FilterItems(IEnumerable<Item> items)
|
||||||
{
|
{
|
||||||
var powerComparer = new PowerComparer();
|
var powerComparer = new PowerComparer();
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ namespace AideDeJeu.ViewModels
|
||||||
{
|
{
|
||||||
public ItemsViewModel()
|
public ItemsViewModel()
|
||||||
{
|
{
|
||||||
LoadItemsCommand = new Command(() => ExecuteLoadItemsCommand(null));
|
LoadItemsCommand = new Command(() => ExecuteLoadItemsCommand());
|
||||||
}
|
}
|
||||||
public ICommand LoadItemsCommand { get; protected set; }
|
public ICommand LoadItemsCommand { get; protected set; }
|
||||||
public abstract void ExecuteLoadItemsCommand(FilterViewModel filterViewModel);
|
public abstract void ExecuteLoadItemsCommand();
|
||||||
public abstract Task ExecuteGotoItemCommandAsync(Item item);
|
public abstract Task ExecuteGotoItemCommandAsync(Item item);
|
||||||
|
|
||||||
//private string _SearchText = "";
|
//private string _SearchText = "";
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace AideDeJeu.ViewModels
|
||||||
|
|
||||||
public class MainViewModel : BaseViewModel
|
public class MainViewModel : BaseViewModel
|
||||||
{
|
{
|
||||||
private ItemSourceType _ItemSourceType = ItemSourceType.MonsterVO;
|
private ItemSourceType _ItemSourceType = ItemSourceType.SpellVF;
|
||||||
public ItemSourceType ItemSourceType
|
public ItemSourceType ItemSourceType
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
@ -121,7 +121,7 @@ namespace AideDeJeu.ViewModels
|
||||||
//Monsters = new MonstersViewModel(navigator, Items);
|
//Monsters = new MonstersViewModel(navigator, Items);
|
||||||
LoadItemsCommand = new Command(() =>
|
LoadItemsCommand = new Command(() =>
|
||||||
{
|
{
|
||||||
GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommand(GetFilterViewModel(ItemSourceType));
|
GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommand();
|
||||||
});
|
});
|
||||||
GotoItemCommand = new Command<Item>(async (item) => await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item));
|
GotoItemCommand = new Command<Item>(async (item) => await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item));
|
||||||
SwitchToSpells = new Command(() => ItemSourceType = (ItemSourceType & ~ ItemSourceType.Monster) | ItemSourceType.Spell);
|
SwitchToSpells = new Command(() => ItemSourceType = (ItemSourceType & ~ ItemSourceType.Monster) | ItemSourceType.Spell);
|
||||||
|
|
|
||||||
|
|
@ -48,23 +48,7 @@ namespace AideDeJeu.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void ExecuteLoadItemsCommand()
|
||||||
public IEnumerable<Monster> 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)
|
|
||||||
{
|
{
|
||||||
if (IsBusy)
|
if (IsBusy)
|
||||||
return;
|
return;
|
||||||
|
|
@ -74,8 +58,8 @@ namespace AideDeJeu.ViewModels
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Main.Items.Clear();
|
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);
|
var items = filterViewModel.FilterItems(AllMonsters);
|
||||||
|
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ namespace AideDeJeu.ViewModels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override void ExecuteLoadItemsCommand(FilterViewModel filterViewModel)
|
public override void ExecuteLoadItemsCommand()
|
||||||
{
|
{
|
||||||
if (IsBusy)
|
if (IsBusy)
|
||||||
return;
|
return;
|
||||||
|
|
@ -71,9 +71,9 @@ namespace AideDeJeu.ViewModels
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Main.Items.Clear();
|
Main.Items.Clear();
|
||||||
IEnumerable<Spell> items = null;
|
|
||||||
SpellFilterViewModel filters = filterViewModel as SpellFilterViewModel;
|
var filterViewModel = Main.GetFilterViewModel(ItemSourceType);
|
||||||
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 items = filterViewModel.FilterItems(AllSpells);
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
{
|
{
|
||||||
Main.Items.Add(item);
|
Main.Items.Add(item);
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,21 @@
|
||||||
</MasterDetailPage.Resources>
|
</MasterDetailPage.Resources>
|
||||||
<MasterDetailPage.Master>
|
<MasterDetailPage.Master>
|
||||||
<ContentPage Title=" ">
|
<ContentPage Title=" ">
|
||||||
<ContentView ControlTemplate="{Binding ItemsType, Converter={StaticResource ItemsTypeTemplateConverter}}" BindingContext="{Binding}" />
|
<ListView ItemsSource="{Binding ItemSourceType, Converter={StaticResource ItemSourceTypeToFilterConverter}}" HasUnevenRows="True" RowHeight="-1" SeparatorVisibility="None" IsPullToRefreshEnabled="False" >
|
||||||
|
<ListView.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<ViewCell>
|
||||||
|
<ViewCell.View>
|
||||||
|
<StackLayout>
|
||||||
|
<Label BindingContext="{Binding}" Text="{Binding Name}" Style="{StaticResource Key=subsubsection}" />
|
||||||
|
<Picker HorizontalOptions="FillAndExpand" ItemsSource="{Binding KeyValues, Mode=OneWay}" ItemDisplayBinding="{Binding Value, Mode=OneWay}" SelectedIndex="{Binding Index}" />
|
||||||
|
</StackLayout>
|
||||||
|
</ViewCell.View>
|
||||||
|
</ViewCell>
|
||||||
|
</DataTemplate>
|
||||||
|
</ListView.ItemTemplate>
|
||||||
|
</ListView>
|
||||||
|
<!--<ContentView ControlTemplate="{Binding ItemsType, Converter={StaticResource ItemsTypeTemplateConverter}}" BindingContext="{Binding}" />-->
|
||||||
</ContentPage>
|
</ContentPage>
|
||||||
</MasterDetailPage.Master>
|
</MasterDetailPage.Master>
|
||||||
<MasterDetailPage.Detail>
|
<MasterDetailPage.Detail>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue