using Business; using Modèle; using System; using System.Collections.Generic; using System.Linq; 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 { /// /// Classe DescWeGoEventArgs qui implémente EventArgs /// Elle permet de créer un argument qui permet de transformer le content control de la main window en UserControlDescription après avoir cliquer sur un UserControlRequin /// public class DescWeGoEventArgs : EventArgs { /// /// Le requin que l'on veut passer lors de l'événement /// public Requin Requin { get; private set; } /// /// L'Evénement pour changer le content control /// /// public DescWeGoEventArgs(Requin requin) => Requin = requin; } /// /// Logique d'interaction pour UserControlEdit.xaml /// public partial class UserControlEdit : UserControl { /// /// UserControl qui permet de modifier un requin /// public UserControlEdit() { InitializeComponent(); DataContext = Mgr; } /// /// ManagerUser lié à celui de l'app /// public Manager Mgr => (Application.Current as App).LeManager; /// /// ManagerUser lié à celui de l'app /// public ManagerUsers MgrUser => (Application.Current as App).LeManagerUsers; private Requin _requin; /// /// Requin qui permet de mettre à jour l'affichage de la page /// public Requin requin { get { return _requin; } set { _requin = value; UptadeUi(_requin); } } private List consList = new List //List qui contient tous les status de conservation { Conservation.EX, Conservation.EW, Conservation.CR, Conservation.EN, Conservation.VU, Conservation.NT, Conservation.LC, Conservation.DD, Conservation.NE }; /// /// L'Event handler DescWeGo /// public event EventHandler DescWeGo; /// /// L'Evénement appelé lors du clique /// /// protected virtual void OnDescWeGo(DescWeGoEventArgs args) => DescWeGo?.Invoke(this, args); /// /// Méthode qui permet de mettre à jour l'affichage de la page à partir d'un requin /// /// private void UptadeUi(Requin requin) { //Met à jour les textBoxs leNom.Contenu = requin.Nom; nomSci.Contenu = requin.NomSci; desc.Contenu = requin.Description; LienPhoto.Contenu = requin.Photo; LienVid.Contenu = requin.Video; LienMap.Contenu = requin.PhotoCarte; funFact.Contenu = requin.FunFact; //Boucles qui permettent de cocher le bon radioButton en fonction du status de conservation du requin foreach (Control control in this.radioButtons.Children) //For each sur tout ce que possède radioButtons { if (control is RadioButton radio) //Regarde si le control est un RadioButton { if (radio.Content is string radString) //Transforme le radio.content en string { if (radString == requin.StatutCons.ToString()) //Test si il est égal au ToString du status de conservation du requin { radio.IsChecked = true; //Coche le RadioButton goto loopEnd; //Permet de sortir des boucles quand le radioButton a été coché } } } } loopEnd: //Coche les bonnes zones en fonction de la répartition du requin foreach (Zone z in requin.Repartition) { if (z == Zone.ATLANTIQUE) { Atla.IsChecked = true; } if (z == Zone.ARCTIQUE) { Arct.IsChecked = true; } if (z == Zone.INDIEN) { Indi.IsChecked = true; } if (z == Zone.PACIFIQUE) { Paci.IsChecked = true; } } } /// /// Evénement qui permet à l'utilisateur de retourner à la page de description du requin /// /// /// private void exit_Click(object sender, RoutedEventArgs e) { //Change le content control de la main window en UserControlDescription OnDescWeGo(new DescWeGoEventArgs(requin)); } /// /// Evénement qui permet de valider les modifications faites à un requin /// /// /// private void submit_Click(object sender, RoutedEventArgs e) { int test = 0; //Récupère les informations qu'a rentré l'utilisateur List lesZones = new List(); Conservation cons = new Conservation(); string nom = leNom.LeContenu.Text; string sciNam = nomSci.LeContenu.Text; string descri = desc.LeContenu.Text; string photo = LienPhoto.LeContenu.Text; string video = LienVid.LeContenu.Text; string map = LienMap.LeContenu.Text; string fun = funFact.LeContenu.Text; //Bouclesqui récupèrent le RadioButton coché et mettent le bon status de conservation dans cons foreach (Control control in this.radioButtons.Children) { if (control is RadioButton radio) { if (radio.IsChecked == true) //Test si le RadioButton est coché { if (radio.Content is string radString) //Transforme son content en string { foreach (Conservation conserv in consList) //Boucles pour tester avec tous les status de conservation { if (radString == conserv.ToString()) { cons = conserv; test++; goto loopEnd ; //Sort des boucles } } } } } } loopEnd: //Test si la vidéo vient du répertoire Vidéos if (!video.Contains("Videos/")) { MessageBox.Show("Les vidéos doivent venir obligatoirement du répertoire Videos"); return; } //Test quels checkBox sont cochées et ajoute dans la liste de zone du requin les zones cochées if (Arct.IsChecked == true) { lesZones.Add(Zone.ARCTIQUE); } if (Atla.IsChecked == true) { lesZones.Add(Zone.ATLANTIQUE); } if (Indi.IsChecked == true) { lesZones.Add(Zone.INDIEN); } if (Paci.IsChecked == true) { lesZones.Add(Zone.PACIFIQUE); } //Test si toutes les informations sont bien remplies if (test == 0 || lesZones.Count()==0 || Mgr.verifierRequin(nom, sciNam, descri, photo, video, map)==false) { MessageBox.Show("Veuillez remplir tout les champs obligatoires"); } //Test si la fun fact et vide else if (string.IsNullOrWhiteSpace(fun)) { //Si elle est vide alors utilise le constructeur de requin avec la liste de fun facts Requin req = new Requin(nom, sciNam, descri, photo, video, map, cons, lesZones, Mgr.FunFacts); //Test si l'utilisateur est un Expert ou un Utilisateur if (MgrUser.SelectedUser is Utilisateur user) { //Ajoute le requin dans la liste des requins modifiés user.AjouterRequin(req, Mgr.RequinsEdit); } else { //Ajoute le requin dans la liste de requin validés Mgr.ModifieRequin(Mgr.Requins.SingleOrDefault(r => r.Equals(req)), req); } //Change le content control de la main window en UserControlDesscription OnDescWeGo(new DescWeGoEventArgs(requin)); } else { Requin req = new Requin(nom, sciNam, descri, photo, video, map, cons, lesZones, fun); if (MgrUser.SelectedUser is Utilisateur user) { user.AjouterRequin(req, Mgr.RequinsEdit); } else { Mgr.ModifieRequin(Mgr.Requins.SingleOrDefault(r => r.Equals(req)), req); } OnDescWeGo(new DescWeGoEventArgs(requin)); } } } }