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.
CShark/WpfApp1/userControlDescription.xaml.cs

246 lines
8.0 KiB

using Business;
using Modèle;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp1
{
/// <summary>
/// Classe EditWeGoEventArgs qui implémente EventArgs
/// Elle permet de créer un argument qui permet de transformer le content control de la main window en UserControlEdit après avoir cliquer sur le bouton Edit
/// </summary>
public class EditWeGoEventArgs : EventArgs
{
/// <summary>
/// Le requin que l'on veut passer lors de l'événement
/// </summary>
public Requin Requin { get; private set; }
/// <summary>
/// L'Evénement pour changer le content control
/// </summary>
/// <param name="requin"></param>
public EditWeGoEventArgs(Requin requin) => Requin = requin;
}
/// <summary>
/// Classe AccueilWeGo qui implémente EventArgs
/// Elle permet de créer un argument qui permet de transformer le content control de la main window en UserControlAccueil après avoir cliquer sur le bouton Exit
/// </summary>
public class AccueilWeGoEventArgs : EventArgs
{
/// <summary>
/// La Zone que l'on veut passer lors de l'événement
/// </summary>
public Nullable<Zone> Zone { get; private set; }
/// <summary>
/// L'Evénement pour crevenir à la page d'accueil
/// </summary>
/// <param name="zone"></param>
public AccueilWeGoEventArgs(Zone? zone) => Zone = zone;
}
/// <summary>
/// Logique d'interaction pour userControlDescription.xaml
/// </summary>
public partial class userControlDescription : UserControl
{
/// <summary>
/// UserControl qui affiche la desription d'un requin
/// </summary>
public userControlDescription()
{
InitializeComponent();
}
/// <summary>
/// ManagerUser lié à celui de l'app
/// </summary>
public ManagerUsers MgrUser => (Application.Current as App).LeManagerUsers;
/// <summary>
/// Manager lié à celui de l'app
/// </summary>
public Manager Mgr => (Application.Current as App).LeManager;
private Requin _requin;
/// <summary>
/// le requin qui permet de changer l'affichage de la page
/// </summary>
public Requin requin
{
get { return _requin; }
set
{
_requin = value;
UptadeUi(_requin);
}
}
/// <summary>
/// La zone de la page principale
/// </summary>
public Zone? zone { get; set; }
/// <summary>
/// L'Event handler EditWeGo
/// </summary>
public event EventHandler<EditWeGoEventArgs> EditWeGo;
/// <summary>
/// L'événement appelé lors du clique
/// </summary>
/// <param name="args"></param>
protected virtual void OnEditWeGo(EditWeGoEventArgs args)
=> EditWeGo?.Invoke(this, args);
/// <summary>
/// L'eventhandler AccueilWeGo
/// </summary>
public event EventHandler<AccueilWeGoEventArgs> AccueilWeGo;
/// <summary>
/// L'événement appelé lors du clique
/// </summary>
/// <param name="args"></param>
protected virtual void OnAccueilWeGo(AccueilWeGoEventArgs args)
=> AccueilWeGo?.Invoke(this, args);
/// <summary>
/// Un compteur
/// </summary>
public int cmp = 0;
/// <summary>
/// Evénement qui permet de changer le content control de la main window
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void exit_Click(object sender, RoutedEventArgs e)
{
//Change le content control en UserControlAcceuil
OnAccueilWeGo(new AccueilWeGoEventArgs(zone));
}
/// <summary>
/// Evénement qui soit change le content control de la main window soit ouvre la page SeConnecter
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void edit_Click(object sender, RoutedEventArgs e)
{
//Test si l'utilisateur est connecté
if (MgrUser.SelectedUser == null)
{
//Si il ne l'est pas alors ouvrir la page SeConnecter
MessageBox.Show("Vous avez besoin d'être connecté pour accéder à cette fonctionnalité");
var seConnecter = new SeConnecter();
seConnecter.ShowDialog();
}
else
{
//Si il l'est changer le content control en UserControlEdit
OnEditWeGo(new EditWeGoEventArgs(requin));
}
}
/// <summary>
/// Méthode qui permet de transformer un url venant d'internet en BitmapImage
/// </summary>
/// <param name="url"></param>
/// <returns>BitmapImage la nouvel BitmapImage créée à partir de du string</returns>
private BitmapImage urlEnBitmap(string url)
{
var path = @url;
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = new Uri(path, UriKind.Absolute);
bitmap.EndInit();
return bitmap;
}
/// <summary>
/// Méthode qui permet de mettre à jour l'affichage de la page en fonction du requin
/// </summary>
/// <param name="requin"></param>
private void UptadeUi(Requin requin)
{
string url = "Images/" + requin.StatutCons.ToString() + ".png";
nameReq.Text = requin.Nom;
sciName.Text = requin.NomSci;
desc.Text = requin.Description;
funFact.Text = requin.FunFact;
consPic.Source = new BitmapImage(new Uri(url, UriKind.Relative));
//La source des vidéos ne peut pas venir d'internet ou de youtube. Avec plus de temps nous aurions rajouté cette fonctionnalité
vid.Source = new Uri(requin.Video, UriKind.Relative);
//La source des photos peuvent venir d'internet
if (requin.Photo.Contains("Images/")) //Vérifie si la photo vient d'internet ou du dossier
{
//Si elle vient du dossier alors la transforme directement en BitmapImage
photo.Source = new BitmapImage(new Uri(requin.Photo, UriKind.RelativeOrAbsolute));
}
else
{
//Sinon appelle la fonction urlEnBitmap
BitmapImage bitmap = new BitmapImage();
bitmap = urlEnBitmap(requin.Photo);
photo.Source = bitmap;
}
//Même choses que les tests du dessus
if (requin.PhotoCarte.Contains("Images/"))
{
cartePic.Source = new BitmapImage(new Uri(requin.PhotoCarte, UriKind.RelativeOrAbsolute));
}
else
{
BitmapImage bitmap = new BitmapImage();
bitmap = urlEnBitmap(requin.PhotoCarte);
cartePic.Source = bitmap;
}
}
/// <summary>
/// Evénement qui est déclenché lorsque l'on clique sur la vidéo (easter egg)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void vid_MouseDown(object sender, MouseButtonEventArgs e)
{
cmp = cmp+1;
if (cmp == 10)
{
vid.Source = new Uri("Videos/requin_Ashley.mp4", UriKind.Relative);
}
}
}
}