You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastermind/Sources/MauiSpark/Vues/JetonVue.xaml.cs

100 lines
3.6 KiB

using CoreLibrary.Core;
using CoreLibrary.Exceptions;
using MauiSpark.Convertisseurs;
using System.Globalization;
namespace MauiSpark.Vues;
/// <summary>
/// Vue représentant un jeton coloré.
/// </summary>
public partial class JetonVue : ContentView
{
/// <summary>
/// Propriété attachée à la couleur du jeton.
/// </summary>
public static readonly BindableProperty CouleurProperty = BindableProperty.Create(nameof(Couleur), typeof(Color), typeof(JetonVue), default(Color));
/// <summary>
/// Propriété attachée au code associé au jeton.
/// </summary>
public static readonly BindableProperty CodeProperty = BindableProperty.Create(nameof(Code), typeof(Code), typeof(JetonVue), null);
/// <summary>
/// Propriété attachée indiquant si le jeton est associé à un joueur.
/// </summary>
public static readonly BindableProperty EstJoueurProperty = BindableProperty.Create(nameof(EstJoueur), typeof(bool), typeof(JetonVue), true);
/// <summary>
/// Obtient ou définit la couleur du jeton.
/// </summary>
public Color Couleur
{
get => (Color)GetValue(CouleurProperty);
set => SetValue(CouleurProperty, value);
}
/// <summary>
/// Obtient ou définit le code associé au jeton.
/// </summary>
public Code? Code
{
get => (Code?)GetValue(CodeProperty);
set => SetValue(CodeProperty, value);
}
/// <summary>
/// Obtient ou définit une valeur indiquant si le jeton est associé à un joueur.
/// </summary>
public bool EstJoueur
{
get => (bool)GetValue(EstJoueurProperty);
set => SetValue(EstJoueurProperty, value);
}
/// <summary>
/// Constructeur de la vue du jeton.
/// Initialise les composants de la vue et lie le contexte de liaison à cette instance.
/// </summary>
public JetonVue()
{
InitializeComponent();
BindingContext = this;
}
/// <summary>
/// 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.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement ; ici, le cercle représentant le jeton.</param>
/// <param name="e">Les arguments de l'événement, s'il y en a.</param>
private void QuandTailleChangee(object sender, EventArgs e)
{
double taille = Math.Min(Grid.Width, Grid.Height) / 2;
Cercle.WidthRequest = Cercle.HeightRequest = taille;
}
/// <summary>
/// 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.
/// </summary>
/// <param name="sender">L'objet qui a déclenché l'événement ; ici, le cercle représentant le jeton.</param>
/// <param name="e">Les arguments de l'événement, s'il y en a.</param>
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)
{
Application.Current.MainPage.DisplayAlert("Attention", "La code est plein", "OK");
}
}
}