mirror of
				https://github.com/Nioux/AideDeJeu.git
				synced 2025-10-30 23:16:09 +00:00 
			
		
		
		
	Début vue pdf
This commit is contained in:
		
							parent
							
								
									e8fe98b227
								
							
						
					
					
						commit
						8fa16487eb
					
				
					 8 changed files with 108 additions and 87 deletions
				
			
		|  | @ -178,6 +178,9 @@ | |||
|     <EmbeddedResource Update="Views\PlayerCharacter\FinalizeView.xaml"> | ||||
|       <Generator>MSBuild:UpdateDesignTimeXaml</Generator> | ||||
|     </EmbeddedResource> | ||||
|     <EmbeddedResource Update="Views\PlayerCharacter\PdfViewPage.xaml"> | ||||
|       <Generator>MSBuild:UpdateDesignTimeXaml</Generator> | ||||
|     </EmbeddedResource> | ||||
|     <EmbeddedResource Update="Views\PlayerCharacter\PlayerCharacterEditorPage.xaml"> | ||||
|       <Generator>MSBuild:UpdateDesignTimeXaml</Generator> | ||||
|     </EmbeddedResource> | ||||
|  |  | |||
|  | @ -39,29 +39,18 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|             SelectedPlayerCharacter.Background.PropertyChanged += Background_PropertyChanged; | ||||
| 
 | ||||
| 
 | ||||
|             // raz des listes de choix | ||||
|             ResetAlignments(); | ||||
|             Races = await Task.Run(async () => await LoadRacesAsync()); | ||||
|             Classes = await Task.Run(async () => await LoadClassesAsync()); | ||||
| 
 | ||||
|             Backgrounds = await Task.Run(async () => await LoadBackgroundsAsync()); | ||||
|             //SelectedBackground = null; | ||||
|             //NotifySelectedBackground = new NotifyTaskCompletion<BackgroundItem>(null); | ||||
|             SubBackgrounds = null; | ||||
|             //SelectedSubBackground = null; | ||||
|             //NotifySelectedSubBackground = new NotifyTaskCompletion<SubBackgroundItem>(null); | ||||
|             PersonalityTraits = null; | ||||
|             PersonalityIdeals = null; | ||||
|             PersonalityLinks = null; | ||||
|             PersonalityDefects = null; | ||||
|             //SelectedPersonalityTrait = null; | ||||
|             //SelectedPersonalityIdeal = null; | ||||
|             //SelectedPersonalityLink = null; | ||||
|             //SelectedPersonalityDefect = null; | ||||
|             BackgroundSpecialties = null; | ||||
|             SubBackgroundSpecialties = null; | ||||
|             //BackgroundSpecialty = null; | ||||
|             SelectedPlayerCharacter.Background.BackgroundSkill = null; | ||||
|             SelectedPlayerCharacter.Background.SubBackgroundSkill = null; | ||||
|         } | ||||
| 
 | ||||
|         private async void Background_PropertyChanged(object sender, PropertyChangedEventArgs e) | ||||
|  | @ -187,8 +176,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|         #endregion Selected PC | ||||
| 
 | ||||
|         #region Alignment | ||||
|         private NotifyTaskCompletion<List<AlignmentItem>> _Alignments = null; | ||||
|         public NotifyTaskCompletion<List<AlignmentItem>> Alignments | ||||
|         private List<AlignmentItem> _Alignments = null; | ||||
|         public List<AlignmentItem> Alignments | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|  | @ -215,9 +204,9 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         private void ResetAlignments() | ||||
|         private async Task ResetAlignments() | ||||
|         { | ||||
|             Alignments = new NotifyTaskCompletion<List<AlignmentItem>>(Task.Run(() => LoadAlignmentsAsync())); | ||||
|             Alignments = await LoadAlignmentsAsync(); | ||||
|             if (!string.IsNullOrEmpty(SelectedPlayerCharacter.Background.PersonalityIdeal)) | ||||
|             { | ||||
|                 var regex = new Regex(".*\\((?<alignment>.*?)\\)$"); | ||||
|  | @ -225,17 +214,17 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|                 var alignment = match.Groups["alignment"].Value; | ||||
|                 if (!string.IsNullOrEmpty(alignment) && alignment.ToLower() != "tous") | ||||
|                 { | ||||
|                     Alignments = new NotifyTaskCompletion<List<AlignmentItem>>(Task.Run(() => LoadAlignmentsAsync(alignment))); | ||||
|                     Alignments = await LoadAlignmentsAsync(alignment); | ||||
|                     SelectedPlayerCharacter.Alignment = null; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     Alignments = new NotifyTaskCompletion<List<AlignmentItem>>(Task.Run(() => LoadAlignmentsAsync())); | ||||
|                     Alignments = await LoadAlignmentsAsync(); | ||||
|                 } | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 Alignments = new NotifyTaskCompletion<List<AlignmentItem>>(Task.Run(() => LoadAlignmentsAsync())); | ||||
|                 Alignments = await LoadAlignmentsAsync(); | ||||
|             } | ||||
|         } | ||||
|         #endregion Alignment | ||||
|  | @ -1233,13 +1222,13 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         async Task ExecuteGenerateAndOpenPdfCommandAsync() | ||||
|         public async Task ExecuteGenerateAndOpenPdfCommandAsync() | ||||
|         { | ||||
|             await GeneratePdfAsync(); | ||||
|             await GeneratePdfAsync(SelectedPlayerCharacter); | ||||
|             await OpenPdfAsync(); | ||||
|         } | ||||
| 
 | ||||
|         async Task GeneratePdfAsync() | ||||
|         public async Task<string> GeneratePdfAsync(PlayerCharacterViewModel playerCharacter) | ||||
|         { | ||||
|             //PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest)); | ||||
|             //PdfDocument srcDoc; | ||||
|  | @ -1259,7 +1248,8 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|             //System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); | ||||
|             //PdfDocument pdfDoc = new PdfDocument(new PdfWriter()); | ||||
|             //var stream = DependencyService.Get<INativeAPI>().CreateStream("test.pdf"); | ||||
|             var stream = new FileStream(Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory, "test.pdf"), FileMode.Create, FileAccess.ReadWrite); | ||||
|             var filePath = Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory, "test.pdf"); | ||||
|             var stream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite); | ||||
| 
 | ||||
|             //PdfReader reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.178_hd_01_feuille_de_perso_v1.pdf")); | ||||
|             PdfReader reader = new PdfReader(AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.feuille_de_personnage_editable.pdf")); | ||||
|  | @ -1267,23 +1257,23 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|             var fontPath = Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory, "LinLibertine_aBS.ttf"); | ||||
|             using (var inFont = AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.LinLibertine_aBS.ttf")) | ||||
|             { | ||||
|                 using (var outFont = new FileStream(fontPath, FileMode.Create, FileAccess.ReadWrite)) | ||||
|                 { | ||||
|                     await inFont.CopyToAsync(outFont); | ||||
|                 } | ||||
|             } | ||||
|             //var fontPath = Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory, "LinLibertine_aBS.ttf"); | ||||
|             //using (var inFont = AideDeJeu.Tools.Helpers.GetResourceStream("AideDeJeu.Pdf.LinLibertine_aBS.ttf")) | ||||
|             //{ | ||||
|             //    using (var outFont = new FileStream(fontPath, FileMode.Create, FileAccess.ReadWrite)) | ||||
|             //    { | ||||
|             //        await inFont.CopyToAsync(outFont); | ||||
|             //    } | ||||
|             //} | ||||
|             //var set = listFonts(reader); | ||||
|             //var truc = findFontInPage(reader, "MinionPro-It", 1); | ||||
|             //var fonts = BaseFont.GetDocumentFonts(reader); | ||||
|             //var font = BaseFont.CreateFont("TMULFZ+MinionPro-It", BaseFont.WINANSI, BaseFont.EMBEDDED); | ||||
|             //var font = findFontInForm(reader, new PdfName("MinionPro-It")); | ||||
|             FontFactory.Register(fontPath, "mafont"); | ||||
|             var bigFont = FontFactory.GetFont("mafont", 20, iTextSharp.text.Font.BOLD); | ||||
|             var normalFont = FontFactory.GetFont("mafont", 12, iTextSharp.text.Font.NORMAL); | ||||
|             var smallFont = FontFactory.GetFont("mafont", 6, iTextSharp.text.Font.NORMAL); | ||||
|             //FontFactory.Register(fontPath, "mafont"); | ||||
|             //var bigFont = FontFactory.GetFont("mafont", 20, iTextSharp.text.Font.BOLD); | ||||
|             //var normalFont = FontFactory.GetFont("mafont", 12, iTextSharp.text.Font.NORMAL); | ||||
|             //var smallFont = FontFactory.GetFont("mafont", 6, iTextSharp.text.Font.NORMAL); | ||||
|             //System.Text.Encoding.RegisterProvider(new System.Text.EncodingProvider()); | ||||
|             //var font = BaseFont.CreateFont("mafont", BaseFont.WINANSI, BaseFont.EMBEDDED); | ||||
|             //var font = mafont.BaseFont; | ||||
|  | @ -1425,7 +1415,7 @@ namespace AideDeJeu.ViewModels.PlayerCharacter | |||
|              | ||||
|             document.Close(); | ||||
|             */ | ||||
| 
 | ||||
|             return filePath; | ||||
|         } | ||||
| 
 | ||||
|         async Task OpenPdfAsync() | ||||
|  |  | |||
|  | @ -15,11 +15,6 @@ | |||
|         <ScrollView Grid.ColumnSpan="2" Orientation="Vertical"> | ||||
|             <StackLayout> | ||||
| 
 | ||||
|                 <!-- DEBUG --> | ||||
|                 <!--<Label Text="{Binding Backgrounds.Status, StringFormat='Backgrounds.Status = {0}'}" /> | ||||
|                 <Label Text="{Binding NotifySelectedBackground.Status, StringFormat='NotifySelectedBackground.Status = {0}'}" /> | ||||
|                 <Label Text="{Binding NotifySelectedSubBackground.Status, StringFormat='NotifySelectedSubBackground.Status = {0}'}" />--> | ||||
| 
 | ||||
|                 <pickers:ItemPickerView BindingContext="{Binding}" Title="Historique" ItemsSource="{Binding Backgrounds}" SelectedItem="{Binding SelectedPlayerCharacter.Background.Background, Mode=TwoWay}" /> | ||||
|                 <pickers:ItemPickerView BindingContext="{Binding}" Title="Variante" ItemsSource="{Binding SubBackgrounds}" SelectedItem="{Binding SelectedPlayerCharacter.Background.SubBackground, Mode=TwoWay}" IsVisible="{Binding SubBackgrounds, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" /> | ||||
| 
 | ||||
|  | @ -44,9 +39,6 @@ | |||
| 
 | ||||
|                 <pickers:StringPickerView BindingContext="{Binding}" Title="Défaut" IsVisible="{Binding SelectedPlayerCharacter.Background.Background, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" ItemsSource="{Binding PersonalityDefects}" SelectedItem="{Binding SelectedPlayerCharacter.Background.PersonalityDefect, Mode=TwoWay}" /> | ||||
| 
 | ||||
|                 <!-- test --> | ||||
|                 <!--<views:StringPickerView BindingContext="{Binding}" IsVisible="{Binding SelectedBackground, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" Title="Compétences" SelectedItem="{Binding PreferedBackground.Abilities}" />--> | ||||
| 
 | ||||
|                 <Frame BorderColor="Black" Padding="2" Margin="10" IsVisible="{Binding SelectedPlayerCharacter.Background.BackgroundOrSubBackground, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}"> | ||||
|                     <StackLayout Padding="0"> | ||||
|                         <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" HorizontalOptions="FillAndExpand" Markdown="# Compétences" /> | ||||
|  |  | |||
|  | @ -14,12 +14,29 @@ | |||
|     <ContentView.Content> | ||||
|         <ScrollView Grid.ColumnSpan="2" Orientation="Vertical"> | ||||
|             <StackLayout> | ||||
|                 <Entry Placeholder="Nom" Text="{Binding Name}" Keyboard="Text" /> | ||||
|                 <!--<Picker Title="Alignement" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Alignments.IsSuccessfullyCompleted}" ItemsSource="{Binding Alignments.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding AlignmentSelectedIndex, Mode=TwoWay}" />--> | ||||
|                 <pickers:ItemPickerView BindingContext="{Binding}" IsEnabled="{Binding Alignments.IsSuccessfullyCompleted}" Title="Alignement" ItemsSource="{Binding Alignments.Result}" SelectedItem="{Binding SelectedPlayerCharacter.Alignment, Mode=TwoWay}" /> | ||||
|                 <Frame BorderColor="Black" Padding="2" Margin="10"> | ||||
|                     <StackLayout Padding="0"> | ||||
|                         <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" HorizontalOptions="FillAndExpand" Markdown="# Nom" /> | ||||
|                         <Entry Margin="10" Placeholder="Nom" Text="{Binding Name}" Keyboard="Text" /> | ||||
|                     </StackLayout> | ||||
|                 </Frame> | ||||
|                 <Frame BorderColor="Black" Padding="2" Margin="10"> | ||||
|                     <StackLayout Padding="0"> | ||||
|                         <mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" HorizontalOptions="FillAndExpand" Markdown="# Niveau" /> | ||||
|                         <Picker Margin="10" Title="Niveau" HorizontalOptions="FillAndExpand"> | ||||
|                             <Picker.ItemsSource> | ||||
|                                 <x:Array Type="{x:Type x:Int32}"> | ||||
|                                     <x:Int32>1</x:Int32> | ||||
|                                 </x:Array> | ||||
|                             </Picker.ItemsSource> | ||||
|                             <Picker.SelectedItem> | ||||
|                                 <x:Int32>1</x:Int32> | ||||
|                             </Picker.SelectedItem> | ||||
|                         </Picker> | ||||
|                     </StackLayout> | ||||
|                 </Frame> | ||||
|                 <pickers:ItemPickerView BindingContext="{Binding}" IsEnabled="{Binding Alignments, Converter={StaticResource NullToFalseConverter}}" Title="Alignement" ItemsSource="{Binding Alignments}" SelectedItem="{Binding SelectedPlayerCharacter.Alignment, Mode=TwoWay}" /> | ||||
| 
 | ||||
|                 <!--<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedPlayerCharacter.Alignment.Description}" />--> | ||||
|                 <Picker Title="Niveau" HorizontalOptions="FillAndExpand" ItemsSource="{Binding Levels}" ItemDisplayBinding="{Binding StringFormat='Niveau : {0}'}" /> | ||||
|             </StackLayout> | ||||
|         </ScrollView> | ||||
|     </ContentView.Content> | ||||
|  |  | |||
							
								
								
									
										12
									
								
								AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								AideDeJeu/AideDeJeu/Views/PlayerCharacter/PdfViewPage.xaml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | ||||
| <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" | ||||
|              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||||
|              x:Class="AideDeJeu.Views.PlayerCharacter.PdfViewPage"> | ||||
|     <ContentPage.Content> | ||||
|         <StackLayout> | ||||
|             <Label Text="{Binding PdfFile.Result}" | ||||
|                 VerticalOptions="CenterAndExpand"  | ||||
|                 HorizontalOptions="CenterAndExpand" /> | ||||
|         </StackLayout> | ||||
|     </ContentPage.Content> | ||||
| </ContentPage> | ||||
|  | @ -0,0 +1,24 @@ | |||
| using AideDeJeu.Tools; | ||||
| using AideDeJeu.ViewModels.PlayerCharacter; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| using Xamarin.Forms; | ||||
| using Xamarin.Forms.Xaml; | ||||
| 
 | ||||
| namespace AideDeJeu.Views.PlayerCharacter | ||||
| { | ||||
|     [XamlCompilation(XamlCompilationOptions.Compile)] | ||||
|     public partial class PdfViewPage : ContentPage | ||||
|     { | ||||
|         public PdfViewPage() | ||||
|         { | ||||
|             InitializeComponent(); | ||||
|         } | ||||
| 
 | ||||
|         public NotifyTaskCompletion<string> PdfFile { get; set; } | ||||
|     } | ||||
| } | ||||
|  | @ -117,27 +117,10 @@ | |||
|             <pcviews:AbilitiesView Grid.ColumnSpan="2" BindingContext="{Binding}" /> | ||||
| 
 | ||||
|             <Button Grid.Column="0" Grid.Row="1" Text="Historique" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Background}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Équipement" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Equipment}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Autres" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Others}"/> | ||||
|         </Grid> | ||||
|     </ContentPage> | ||||
|     <ContentPage x:Name="Equipment" Title="Équipement"> | ||||
|         <Grid> | ||||
|             <Grid.ColumnDefinitions> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|             </Grid.ColumnDefinitions> | ||||
|             <Grid.RowDefinitions> | ||||
|                 <RowDefinition Height="*" /> | ||||
|                 <RowDefinition Height="auto" /> | ||||
|             </Grid.RowDefinitions> | ||||
| 
 | ||||
|             <pcviews:EquipmentView Grid.ColumnSpan="2" BindingContext="{Binding}" /> | ||||
| 
 | ||||
|             <Button Grid.Column="0" Grid.Row="1" Text="Caractéristiques" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Abilities}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Finalisation" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Finalize}"/> | ||||
|         </Grid> | ||||
|     </ContentPage> | ||||
|     <ContentPage x:Name="Finalize" Title="Finalisation"> | ||||
|     <ContentPage x:Name="Others" Title="Autres"> | ||||
|         <Grid> | ||||
|             <Grid.ColumnDefinitions> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|  | @ -150,25 +133,8 @@ | |||
| 
 | ||||
|             <pcviews:FinalizeView Grid.ColumnSpan="2" BindingContext="{Binding}" /> | ||||
| 
 | ||||
|             <Button Grid.Column="0" Grid.Row="1" Text="Équipement" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Equipment}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Résumé" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Resume}"/> | ||||
|         </Grid> | ||||
|     </ContentPage> | ||||
|     <ContentPage x:Name="Resume" Title="Résumé"> | ||||
|         <Grid> | ||||
|             <Grid.ColumnDefinitions> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|                 <ColumnDefinition Width="*" /> | ||||
|             </Grid.ColumnDefinitions> | ||||
|             <Grid.RowDefinitions> | ||||
|                 <RowDefinition Height="*" /> | ||||
|                 <RowDefinition Height="auto" /> | ||||
|             </Grid.RowDefinitions> | ||||
| 
 | ||||
|             <pcviews:ResumeView Grid.ColumnSpan="2" BindingContext="{Binding}" /> | ||||
| 
 | ||||
|             <Button Grid.Column="0" Grid.Row="1" Text="Finalisation" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Finalize}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Ouvrir en PDF" Command="{Binding GenerateAndOpenPdfCommand}" /> | ||||
|             <Button Grid.Column="0" Grid.Row="1" Text="Caractéristiques" Command="{Binding ChangePageCommand, Source={x:Reference This}}" CommandParameter="{x:Reference Abilities}"/> | ||||
|             <Button Grid.Column="1" Grid.Row="1" Text="Résumé" Command="{Binding PdfViewCommand, Source={x:Reference This}}" CommandParameter="{Binding SelectedPlayerCharacter}" /> | ||||
|         </Grid> | ||||
|     </ContentPage> | ||||
| </CarouselPage> | ||||
|  | @ -50,5 +50,22 @@ namespace AideDeJeu.Views.PlayerCharacter | |||
|         { | ||||
|             This.CurrentPage = param as ContentPage; | ||||
|         } | ||||
| 
 | ||||
|         public Command PdfViewCommand | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 return new Command<object>(ExecutePdfViewCommand); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void ExecutePdfViewCommand(object param) | ||||
|         { | ||||
|             var vm = BindingContext as PlayerCharacterEditorViewModel; | ||||
|             var page = new PdfViewPage(); | ||||
|             page.PdfFile = new Tools.NotifyTaskCompletion<string>(Task.Run(async() => await vm.GeneratePdfAsync(param as PlayerCharacterViewModel))); | ||||
|             page.BindingContext = page; | ||||
|             Navigation.PushModalAsync(page, true); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Yan Maniez
						Yan Maniez