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:
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 itemSourceType = vm.ItemSourceType;
|
||||
return vm.GetFilterViewModel(itemSourceType);
|
||||
return vm.GetFilterViewModel(itemSourceType).Filters;
|
||||
}
|
||||
|
||||
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 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();
|
||||
|
|
|
|||
|
|
@ -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 = "";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue