using CoreLibrary.Core; using CoreLibrary.Exceptions; using MauiSpark.Convertisseurs; using System.Globalization; namespace MauiSpark.Vues; /// /// Vue représentant un jeton coloré. /// public partial class JetonVue : ContentView { /// /// Propriété attachée à la couleur du jeton. /// public static readonly BindableProperty CouleurProperty = BindableProperty.Create(nameof(Couleur), typeof(Color), typeof(JetonVue), default(Color)); /// /// Propriété attachée au code associé au jeton. /// public static readonly BindableProperty CodeProperty = BindableProperty.Create(nameof(Code), typeof(Code), typeof(JetonVue), null); /// /// Propriété attachée indiquant si le jeton est associé à un joueur. /// public static readonly BindableProperty EstJoueurProperty = BindableProperty.Create(nameof(EstJoueur), typeof(bool), typeof(JetonVue), true); /// /// Obtient ou définit la couleur du jeton. /// public Color Couleur { get => (Color)GetValue(CouleurProperty); set => SetValue(CouleurProperty, value); } /// /// Obtient ou définit le code associé au jeton. /// public Code? Code { get => (Code?)GetValue(CodeProperty); set => SetValue(CodeProperty, value); } /// /// Obtient ou définit une valeur indiquant si le jeton est associé à un joueur. /// public bool EstJoueur { get => (bool)GetValue(EstJoueurProperty); set => SetValue(EstJoueurProperty, value); } /// /// Constructeur de la vue du jeton. /// Initialise les composants de la vue et lie le contexte de liaison à cette instance. /// public JetonVue() { InitializeComponent(); BindingContext = this; } /// /// Méthode déclenchée lorsque la taille du jeton est modifiée. /// Réajuste la taille du cercle représentant le jeton pour qu'il soit toujours circulaire. /// /// L'objet qui a déclenché l'événement ; ici, le cercle représentant le jeton. /// Les arguments de l'événement, s'il y en a. private void QuandTailleChangee(object sender, EventArgs e) { double taille = Math.Min(Grid.Width, Grid.Height) / 2; Cercle.WidthRequest = Cercle.HeightRequest = taille; } /// /// Méthode déclenchée lorsque le jeton est pressé. /// Ajoute un jeton à un code si celui-ci est associé à un joueur. /// Affiche une alerte si le code est déjà complet. /// /// L'objet qui a déclenché l'événement ; ici, le cercle représentant le jeton. /// Les arguments de l'événement, s'il y en a. private void JetonPresse(object sender, EventArgs e) { if (Cercle == null || !sender.Equals(Cercle) || Code == null || Application.Current == null || Application.Current.MainPage == null || !EstJoueur) return; Couleur couleur = (Couleur)new CouleurVersCouleurMAUI().ConvertBack(((SolidColorBrush)Cercle.Fill).Color, typeof(Couleur), null, CultureInfo.InvariantCulture); try { Code.AjouterJeton(new Jeton(couleur)); } catch (CodeCompletException exception) { Application.Current.MainPage.DisplayAlert("Attention", exception.Message, "OK"); } } }