mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +00:00 
			
		
		
		
	Listes
This commit is contained in:
		
							parent
							
								
									ad9344567c
								
							
						
					
					
						commit
						bf01af25ee
					
				
					 3 changed files with 205 additions and 5 deletions
				
			
		
							
								
								
									
										162
									
								
								AideDeJeu/AideDeJeu/ViewModels/Library/ItemViewModel.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								AideDeJeu/AideDeJeu/ViewModels/Library/ItemViewModel.cs
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,162 @@ | ||||||
|  | using AideDeJeuLib; | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.Windows.Input; | ||||||
|  | using Xamarin.Forms; | ||||||
|  | 
 | ||||||
|  | namespace AideDeJeu.ViewModels.Library | ||||||
|  | { | ||||||
|  |     public class ItemViewModel : BaseViewModel | ||||||
|  |     { | ||||||
|  |         Item _Item = null; | ||||||
|  |         public Item Item | ||||||
|  |         { | ||||||
|  |             get { return _Item; } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 SetProperty(ref _Item, value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         CancellationTokenSource cancellationTokenSource; | ||||||
|  | 
 | ||||||
|  |         public ItemViewModel(Item item = null) | ||||||
|  |         { | ||||||
|  |             Title = item?.Name; | ||||||
|  |             Item = item; | ||||||
|  |             LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommandAsync().ConfigureAwait(false)); | ||||||
|  |             SearchCommand = new Command<string>((text) => | ||||||
|  |             { | ||||||
|  |                 if (Filter != null) | ||||||
|  |                 { | ||||||
|  |                     Filter.SearchText = text; | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  |         public Command<string> SearchCommand { get; private set; } | ||||||
|  |         public ICommand LoadItemsCommand { get; protected set; } | ||||||
|  | 
 | ||||||
|  |         private FilterViewModel _Filter; | ||||||
|  |         public FilterViewModel Filter | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _Filter; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 SetProperty(ref _Filter, value); | ||||||
|  |                 if (_Filter != null) | ||||||
|  |                 { | ||||||
|  |                     _Filter.LoadItemsCommand = LoadItemsCommand; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Item _Items = new Item(); | ||||||
|  |         public Item Items | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _Items; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 SetProperty(ref _Items, value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public IEnumerable<Item> _Children = new List<Item>(); | ||||||
|  |         public IEnumerable<Item> Children | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _Children; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 SetProperty(ref _Children, value); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private Item _SelectedItem; | ||||||
|  |         public Item SelectedItem | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _SelectedItem; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 SetProperty(ref _SelectedItem, value); | ||||||
|  |                 if (_SelectedItem != null) | ||||||
|  |                 { | ||||||
|  |                     if (_SelectedItem is LinkItem) | ||||||
|  |                     { | ||||||
|  |                         Main.Navigator.NavigateToLinkAsync("/" + (_SelectedItem as LinkItem).Link).ConfigureAwait(true); | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         Main.Navigator.GotoItemDetailPageAsync(_SelectedItem).ConfigureAwait(true); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private Item _AllItems; | ||||||
|  |         public Item AllItems | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return _AllItems; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _AllItems = value; | ||||||
|  |                 if (_AllItems != null) | ||||||
|  |                 { | ||||||
|  |                     Title = _AllItems.Name; | ||||||
|  |                     Filter = _AllItems.GetNewFilterViewModel(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         async Task LoadItemsAsync(CancellationToken cancellationToken = default) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 if (Filter != null) | ||||||
|  |                 { | ||||||
|  |                     var start = DateTime.Now; | ||||||
|  |                     var items = await Task.Run(async () => await Filter.GetFilteredItemsAsync(cancellationToken: cancellationToken)); | ||||||
|  |                     var end = DateTime.Now; | ||||||
|  |                     Debug.WriteLine((end - start).TotalMilliseconds); | ||||||
|  |                     Items = new Item(items.ToList()); | ||||||
|  |                     Children = items; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     Items = AllItems; | ||||||
|  |                     //Children = await AllItems.GetChildrenAsync(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (OperationCanceledException ex) | ||||||
|  |             { | ||||||
|  |                 Debug.WriteLine(ex); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public async Task ExecuteLoadItemsCommandAsync() | ||||||
|  |         { | ||||||
|  |             cancellationTokenSource?.Cancel(); | ||||||
|  |             cancellationTokenSource = new CancellationTokenSource(); | ||||||
|  |             await LoadItemsAsync(cancellationTokenSource.Token); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -11,6 +11,7 @@ | ||||||
|         <ResourceDictionary> |         <ResourceDictionary> | ||||||
|             <tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" /> |             <tools:MonsterMarkdownTheme x:Key="MonsterMarkdownTheme" /> | ||||||
|             <tools:NullToFalseConverter x:Key="NullToFalseConverter" /> |             <tools:NullToFalseConverter x:Key="NullToFalseConverter" /> | ||||||
|  |             <tools:HeaderLevelToStyleConverter x:Key="HeaderLevelToStyleConverter" /> | ||||||
|         </ResourceDictionary> |         </ResourceDictionary> | ||||||
|     </ContentPage.Resources> |     </ContentPage.Resources> | ||||||
|     <ContentPage.ToolbarItems> |     <ContentPage.ToolbarItems> | ||||||
|  | @ -18,13 +19,32 @@ | ||||||
|         <ToolbarItem Name="Print" Text="Générer un PDF" Order="Primary" Icon="scroll_unfurled.png" Command="{Binding Main.Navigator.GeneratePDFCommand}" CommandParameter="{Binding Item.Markdown}" /> |         <ToolbarItem Name="Print" Text="Générer un PDF" Order="Primary" Icon="scroll_unfurled.png" Command="{Binding Main.Navigator.GeneratePDFCommand}" CommandParameter="{Binding Item.Markdown}" /> | ||||||
|     </ContentPage.ToolbarItems> |     </ContentPage.ToolbarItems> | ||||||
|     <Grid> |     <Grid> | ||||||
|         <ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}"> |         <!--<ScrollView Orientation="Vertical" BackgroundColor="{StaticResource HDWhite}"> | ||||||
|             <mdview:MarkdownView  |             <mdview:MarkdownView  | ||||||
|                 Theme="{StaticResource MonsterMarkdownTheme}"  |                 Theme="{StaticResource MonsterMarkdownTheme}"  | ||||||
|                 Markdown="{Binding Item.Item.Markdown}"  |                 Markdown="{Binding Item.Item.Markdown}"  | ||||||
|                 NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}" |                 NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}" | ||||||
|                 /> |                 /> | ||||||
|         </ScrollView> |         </ScrollView>--> | ||||||
|  |         <ListView Grid.Column="0" Grid.Row="0" x:Name="ItemsListView" ItemsSource="{Binding Item.Children}" VerticalOptions="FillAndExpand" HasUnevenRows="true" CachingStrategy="RecycleElement" SelectedItem="{Binding Item.SelectedItem}" ItemTapped="ItemsListView_ItemTapped"> | ||||||
|  |             <ListView.Header> | ||||||
|  |                 <mdview:MarkdownView  | ||||||
|  |                 Theme="{StaticResource MonsterMarkdownTheme}"  | ||||||
|  |                 Markdown="{Binding Item.Item.Markdown}"  | ||||||
|  |                 NavigateToLinkCommand="{Binding Main.Navigator.NavigateToLinkCommand}" | ||||||
|  |                 /> | ||||||
|  |             </ListView.Header> | ||||||
|  |             <ListView.ItemTemplate> | ||||||
|  |                 <DataTemplate> | ||||||
|  |                     <ViewCell> | ||||||
|  |                         <StackLayout Padding="10" Orientation="Vertical"> | ||||||
|  |                             <Label Text="{Binding Name}" LineBreakMode="WordWrap" TextColor="{StaticResource HDBlue}" Style="{Binding NameLevel,Converter={StaticResource HeaderLevelToStyleConverter}, ConverterParameter=2}" /> | ||||||
|  |                             <Label Text="{Binding AltNameText}" LineBreakMode="WordWrap" TextColor="{StaticResource HDLightGrey}" Style="{Binding NameLevel,Converter={StaticResource HeaderLevelToStyleConverter}, ConverterParameter=4}" /> | ||||||
|  |                         </StackLayout> | ||||||
|  |                     </ViewCell> | ||||||
|  |                 </DataTemplate> | ||||||
|  |             </ListView.ItemTemplate> | ||||||
|  |         </ListView> | ||||||
|         <ActivityIndicator  |         <ActivityIndicator  | ||||||
|             VerticalOptions="StartAndExpand" |             VerticalOptions="StartAndExpand" | ||||||
|             HorizontalOptions="End" |             HorizontalOptions="End" | ||||||
|  |  | ||||||
|  | @ -28,8 +28,8 @@ namespace AideDeJeu.Views.Library | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private ItemDetailViewModel _Item = null; |         private ItemViewModel _Item = null; | ||||||
|         public ItemDetailViewModel Item |         public ItemViewModel Item | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|             { |             { | ||||||
|  | @ -99,8 +99,19 @@ namespace AideDeJeu.Views.Library | ||||||
|             { |             { | ||||||
|                 var items = item; // as Items; |                 var items = item; // as Items; | ||||||
|                 var filterViewModel = items.GetNewFilterViewModel(); |                 var filterViewModel = items.GetNewFilterViewModel(); | ||||||
|                 var itemsViewModel = new ItemDetailViewModel() { Item = items }; |                 var itemsViewModel = new ItemViewModel() { Item = items, AllItems = items, Filter = filterViewModel }; | ||||||
|                 this.Item = itemsViewModel; |                 this.Item = itemsViewModel; | ||||||
|  |                 itemsViewModel.LoadItemsCommand.Execute(null); | ||||||
|  |                 if (!string.IsNullOrEmpty(with)) | ||||||
|  |                 { | ||||||
|  |                     var swith = with.Split('_'); | ||||||
|  |                     for (int i = 0; i < swith.Length / 2; i++) | ||||||
|  |                     { | ||||||
|  |                         var key = swith[i * 2 + 0]; | ||||||
|  |                         var val = swith[i * 2 + 1]; | ||||||
|  |                         filterViewModel.FilterWith(key, val); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|                 //SwitchToMainTab(); |                 //SwitchToMainTab(); | ||||||
|                 //if (filterViewModel == null) |                 //if (filterViewModel == null) | ||||||
|                 //{ |                 //{ | ||||||
|  | @ -118,6 +129,13 @@ namespace AideDeJeu.Views.Library | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         private void ItemsListView_ItemTapped(object sender, ItemTappedEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (e.Item == null) return; | ||||||
|  |             ((ListView)sender).SelectedItem = null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         protected bool SetProperty<T>(ref T backingStore, T value, |         protected bool SetProperty<T>(ref T backingStore, T value, | ||||||
|             [CallerMemberName]string propertyName = "", |             [CallerMemberName]string propertyName = "", | ||||||
|             Action onChanged = null) |             Action onChanged = null) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez