1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-29 22:45:44 +00:00

Premier filtre générique ok

This commit is contained in:
Yan Maniez 2018-05-28 10:45:11 +02:00
parent 2c0d222a03
commit 779cbaa41b
7 changed files with 125 additions and 35 deletions

View file

@ -209,7 +209,7 @@ namespace AideDeJeu.Tools
{
var vm = DependencyService.Get<MainViewModel>();
var itemSourceType = vm.ItemSourceType;
return vm.GetFilterViewModel(itemSourceType);
return vm.GetFilterViewModel(itemSourceType).Filters;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

View file

@ -14,19 +14,90 @@ namespace AideDeJeu.ViewModels
{
public ICommand LoadItemsCommand { get; protected set; }
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
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)
{
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<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)
{
var powerComparer = new PowerComparer();

View file

@ -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 = "";

View file

@ -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<Item>(async (item) => await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item));
SwitchToSpells = new Command(() => ItemSourceType = (ItemSourceType & ~ ItemSourceType.Monster) | ItemSourceType.Spell);

View file

@ -48,23 +48,7 @@ namespace AideDeJeu.ViewModels
}
}
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)
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)

View file

@ -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<Spell> 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);

View file

@ -76,7 +76,21 @@
</MasterDetailPage.Resources>
<MasterDetailPage.Master>
<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>
</MasterDetailPage.Master>
<MasterDetailPage.Detail>