diff --git a/MusiLib/MusiLib/App.xaml.cs b/MusiLib/MusiLib/App.xaml.cs index 6e09416..f389066 100644 --- a/MusiLib/MusiLib/App.xaml.cs +++ b/MusiLib/MusiLib/App.xaml.cs @@ -18,6 +18,7 @@ public partial class App : Application string favorisUtilisateursFilePath = Path.Combine(FilePath, FileNameFU); string partitionsFilePath = Path.Combine(FilePath, FileNameP); + /*Si les fichiers existent déjà, on récupère la persistance car on a donc des favoris à récupérer*/ if (File.Exists(partitionsFilePath) && File.Exists(favorisUtilisateursFilePath)) { MyManager = new Manager(new DataContractPersistance.DataContractPers()); diff --git a/MusiLib/MusiLib/Stub/Stub.cs b/MusiLib/MusiLib/Stub/Stub.cs index 722370c..62dc8eb 100644 --- a/MusiLib/MusiLib/Stub/Stub.cs +++ b/MusiLib/MusiLib/Stub/Stub.cs @@ -18,9 +18,9 @@ namespace MusiLib.Stub List favoris = new List(); - - + /*Charge toutes nos partitions*/ + Partition amazing_grace = new Partition("Amazing Grace", "John Newton", "Facile", "Amazing Grace est l'un des cantiques chrétiens les plus célèbres dans le monde anglophone. La première publication des paroles date de 1779. Associé à diverses mélodies au fil des années, il est aujourd'hui interprété sur la musique de New Britain", "piano", "amazing-grace.mid"); Partition au_clair_de_la_lune = new Partition("Au clair de la lune", "Édouard-Léon Scott de Martinville", "Moyen", "Au clair de la lune est une chanson populaire française dont la mélodie, très caractéristique, ainsi que les paroles — surtout celles du premier couplet — sont si familières qu'elles ont fait l'objet d'innombrables citations, adaptations, parodies, pastiches, etc.", "piano", "au_clair_de_la_lune.wav"); Partition aura_lee_love_me = new Partition("aura lee love me", "Elvis Presley", "Facile", " Love Me Tender est une ballade de 1956 enregistrée par Elvis Presley et publiée par Elvis Presley Music du film du même nom de la 20th Century Fox . Les paroles sont créditées à Vera Matson (bien que le parolier réel était son mari, Ken Darby) et Elvis Presley lui-même. La mélodie est identique à la ballade sentimentale de la guerre civile Aura Lea et donc attribuée au compositeur d'Aura Lea, l'Anglais George R. Poulton.", "piano", "aura-lee-love-me-tender.mid"); diff --git a/MusiLib/MusiLib/Views/Accueil.xaml.cs b/MusiLib/MusiLib/Views/Accueil.xaml.cs index fb99adf..cf52062 100644 --- a/MusiLib/MusiLib/Views/Accueil.xaml.cs +++ b/MusiLib/MusiLib/Views/Accueil.xaml.cs @@ -21,6 +21,7 @@ namespace MusiLib.Views chargerPartitions(); } + /*Nous redirige vers la page des favoris*/ private void GoToFavorisButton(object sender, EventArgs e) { if (!IAllowClick.AllowTap) return; @@ -31,6 +32,7 @@ namespace MusiLib.Views IAllowClick.ResumeTap(); } + /*Nous redirige vers la partition sur laquelle on a cliqué*/ private void GoToPartitionButton(object sender, EventArgs e) { if (!IAllowClick.AllowTap) return; @@ -47,8 +49,10 @@ namespace MusiLib.Views IAllowClick.ResumeTap(); } + /*Charge automatiquement toutes les partitions en ImageButton et les affiche à l'écran*/ private void chargerPartitions() { + /*Supprime les partitions présentes (on les différencie des autres ImageButton grâce à l'automationId*/ var imageButtonsToRemove = grille.Children.OfType().Where(btn => !string.IsNullOrEmpty(btn.AutomationId)).ToList(); foreach (var button in imageButtonsToRemove) { @@ -59,6 +63,7 @@ namespace MusiLib.Views int imagesParLigne = 3; int indice = 0; + /*Crée les ImageButton des partitions*/ foreach (Partition partition in partitionsFiltrees) { int indicePartition = MyManager.partitions.IndexOf(partition); @@ -86,6 +91,7 @@ namespace MusiLib.Views } } + /*Récupère des valeurs prédéfinies pour les margin de chargerFavoris afin d'avoir un affichage aligné*/ private Thickness GetImageButtonMargin(int colonne) { if (colonne == 0) @@ -102,6 +108,7 @@ namespace MusiLib.Views } } + /*Permet de modifier l'affichage des partitions en fonction de ce qu'on recherche*/ private void SearchBar_TextChanged(object sender, TextChangedEventArgs e) { string texteRecherche = e.NewTextValue; @@ -119,6 +126,7 @@ namespace MusiLib.Views chargerPartitions(); } + /*Lance un popup de plusieurs choix quand on clic sur le bouton de tri*/ private async void TriButton_Clicked(object sender, EventArgs e) { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Type", "Difficulté", "Ordre alphabétique", "Réinitialiser"); @@ -141,7 +149,7 @@ namespace MusiLib.Views } - + /*Lance un popup de plusieurs choix quand on clic sur Type dans le popup TriButton_Clicked*/ private async Task TrierParTypeButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Batterie", "Guitare", "Piano"); @@ -154,6 +162,7 @@ namespace MusiLib.Views chargerPartitions(); } + /*Lance un popup de plusieurs choix quand on clic sur Difficulté dans le popup TriButton_Clicked*/ private async Task TrierParDifficulteButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Facile", "Moyen", "Difficile"); @@ -166,6 +175,7 @@ namespace MusiLib.Views chargerPartitions(); } + /*Lance un popup de plusieurs choix quand on clic sur Ordre Alphabétique dans le popup TriButton_Clicked*/ private async Task TrierParOrdreAlphabetiqueButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Croissant", "Décroissant"); @@ -178,6 +188,7 @@ namespace MusiLib.Views chargerPartitions(); } + /*Réinitialise les partitions pour annuler le tri*/ private void ReinitialiserButton() { partitionsFiltrees.Clear(); diff --git a/MusiLib/MusiLib/Views/Favoris.xaml.cs b/MusiLib/MusiLib/Views/Favoris.xaml.cs index 30c69ba..c69d223 100644 --- a/MusiLib/MusiLib/Views/Favoris.xaml.cs +++ b/MusiLib/MusiLib/Views/Favoris.xaml.cs @@ -22,7 +22,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } - + /*Nous redirige vers l'accueil avec le logo de l'appli*/ private void GoToAccueilByLogoButton(object sender, EventArgs e) { if (!IAllowClick.AllowTap) return; @@ -33,7 +33,7 @@ public partial class Favoris : ContentPage, IAllowClick IAllowClick.ResumeTap(); } - + /*Nous redirige vers la partition sur laquelle on a cliqué*/ private void GoToPartitionButton(object sender, EventArgs e) { if (!IAllowClick.AllowTap) return; @@ -50,9 +50,10 @@ public partial class Favoris : ContentPage, IAllowClick IAllowClick.ResumeTap(); } - + /*Permet de charger automatiquement tout les favoris qu'on a et les afficher à l'écran*/ private void chargerFavoris() { + /*Supprime les partitions présentes (on les différencie des autres ImageButton grâce à l'automationId*/ var imageButtonsToRemove = grille.Children.OfType().Where(btn => !string.IsNullOrEmpty(btn.AutomationId)).ToList(); foreach (var button in imageButtonsToRemove) { @@ -62,10 +63,9 @@ public partial class Favoris : ContentPage, IAllowClick int imagesParLigne = 3; int indice = 0; + /*Crée les ImageButton des partitions*/ foreach (Partition favoris in partitionsFiltrees) { - /*int indicePartition = MyManager.partitions.IndexOf(favoris);*/ - string nomFavori = favoris.Nom; int indicePartition = MyManager.partitions.FindIndex(partition => partition.Nom == nomFavori); @@ -92,6 +92,7 @@ public partial class Favoris : ContentPage, IAllowClick } } + /*Récupère des valeurs prédéfinies pour les margin de chargerFavoris afin d'avoir un affichage aligné*/ private Thickness GetImageButtonMargin(int colonne) { if (colonne == 0) @@ -108,6 +109,7 @@ public partial class Favoris : ContentPage, IAllowClick } } + /*Permet de modifier l'affichage des partitions en fonction de ce qu'on recherche*/ private void SearchBar_TextChanged(object sender, TextChangedEventArgs e) { string texteRecherche = e.NewTextValue; @@ -125,6 +127,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } + /*Lance un popup de plusieurs choix quand on clic sur le bouton de tri*/ private async void TriButton_Clicked(object sender, EventArgs e) { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Type", "Difficulté", "Ordre alphabétique", "Réinitialiser"); @@ -147,7 +150,7 @@ public partial class Favoris : ContentPage, IAllowClick } - + /*Lance un popup de plusieurs choix quand on clic sur Type dans le popup TriButton_Clicked*/ private async Task TrierParTypeButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Batterie", "Guitare", "Piano"); @@ -160,6 +163,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } + /*Lance un popup de plusieurs choix quand on clic sur Difficulté dans le popup TriButton_Clicked*/ private async Task TrierParDifficulteButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Facile", "Moyen", "Difficile"); @@ -172,6 +176,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } + /*Lance un popup de plusieurs choix quand on clic sur Ordre Alphabétique dans le popup TriButton_Clicked*/ private async Task TrierParOrdreAlphabetiqueButton() { var action = await DisplayActionSheet("Trier par", "Annuler", null, "Croissant", "Décroissant"); @@ -184,6 +189,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } + /*Réinitialise les partitions pour annuler le tri*/ private void ReinitialiserButton() { partitionsFiltrees.Clear(); @@ -191,6 +197,7 @@ public partial class Favoris : ContentPage, IAllowClick chargerFavoris(); } + /*Charge à chaque réapparition de la page (quand on revient d'une partition par exemple) les partitions afin de remettre les partitions si jamais une est supprimé des favoris*/ protected override void OnAppearing() { base.OnAppearing(); diff --git a/MusiLib/MusiLib/Views/IAllowClick.cs b/MusiLib/MusiLib/Views/IAllowClick.cs index cba0184..3989d86 100644 --- a/MusiLib/MusiLib/Views/IAllowClick.cs +++ b/MusiLib/MusiLib/Views/IAllowClick.cs @@ -6,6 +6,16 @@ using System.Threading.Tasks; namespace MusiLib.Views { + /*Permet de mettre un délai entre chaque clic pour éviter les problèmes de multi-pages sur Android*/ + /*Est utilisé sur chaque bouton sous la forme : + + if (!IAllowClick.AllowTap) return; + else IAllowClick.AllowTap = false; + + ...... + + IAllowClick.ResumeTap(); + */ public interface IAllowClick { public static bool AllowTap = true; diff --git a/MusiLib/MusiLib/Views/PartitionView.xaml.cs b/MusiLib/MusiLib/Views/PartitionView.xaml.cs index 457fc3d..bc74e9b 100644 --- a/MusiLib/MusiLib/Views/PartitionView.xaml.cs +++ b/MusiLib/MusiLib/Views/PartitionView.xaml.cs @@ -36,6 +36,7 @@ public partial class PartitionView : ContentPage ChargerPartitionsSimilaires(); } + /*Permet de lancer la musique de la partition en cours*/ private void Play_Music(object sender, EventArgs e) { @@ -59,6 +60,7 @@ public partial class PartitionView : ContentPage } } + /*Permet de lancer le métronome*/ private void Play_Metronome(object sender, EventArgs e) { @@ -82,6 +84,7 @@ public partial class PartitionView : ContentPage } } + /*Permet d'arrêter la musique*/ private void Stop_Music(object sender, EventArgs e) { music.StopMusic(); @@ -93,6 +96,7 @@ public partial class PartitionView : ContentPage sliderMetro.Value = 1; } + /*Permet d'arrêter le métronome*/ private void Stop_Metronome(object sender, EventArgs e) { metronome.StopMusic(); @@ -100,6 +104,7 @@ public partial class PartitionView : ContentPage button.Text = "Jouer"; } + /*Coupe la musique et le métronome quand on revient en arrière avec le bouton retour du téléphone*/ protected override bool OnBackButtonPressed() { metronome.StopMusic(); @@ -107,6 +112,7 @@ public partial class PartitionView : ContentPage return base.OnBackButtonPressed(); } + /*Coupe la musique et le métronome quand on revient en arrière*/ protected override void OnDisappearing() { base.OnDisappearing(); @@ -114,12 +120,14 @@ public partial class PartitionView : ContentPage music.StopMusic(); } + /*Initialise le Shell_Navigating au chargement de la page*/ protected override void OnAppearing() { base.OnAppearing(); Shell.Current.Navigating += Shell_Navigating; } + /*Coupe la musique et le métronome quand on revient en arrière avec le bouton retour de l'appli | Fonctionne avec OnDisappearing*/ private void Shell_Navigating(object sender, ShellNavigatingEventArgs e) { if (e.Source == ShellNavigationSource.ShellItemChanged) @@ -129,6 +137,7 @@ public partial class PartitionView : ContentPage } } + /*Permet de mettre la bonne image suivant si la partition est en favori ou pas au chargement*/ private void InitializeButton() { if (MyManager.favoris.Any(favori => favori.Nom == MyManager.partitions[IdTab].Nom)) @@ -141,6 +150,7 @@ public partial class PartitionView : ContentPage } } + /*Initialise et crée des ImageButton des partitions du même auteur et même instrument pour les afficher automatiquement*/ private void ChargerPartitionsSimilaires() { string auteur = MyManager.partitions[IdTab].Auteur; @@ -176,7 +186,7 @@ public partial class PartitionView : ContentPage - + /*Nous redirige vers la partition sur laquelle on a cliqué*/ private void GoToPartitionButton(object sender, EventArgs e) { if (!IAllowClick.AllowTap) return; @@ -193,7 +203,7 @@ public partial class PartitionView : ContentPage IAllowClick.ResumeTap(); } - + /*Permet d'ajouter une partition aux favoris, sauvegarde sur le téléphone et change l'image du bouton*/ private void AddFavoriButton(object sender, EventArgs e) { ImageButton button = (ImageButton)sender; @@ -212,12 +222,14 @@ public partial class PartitionView : ContentPage } } + /*Permet d'envoyer la valeur du slider pour modifier le tempo de la musique*/ private void TempoSlider(object sender, ValueChangedEventArgs e) { float selectedValue = (float)e.NewValue; music.ReglerTempo(selectedValue); } + /*Permet d'envoyer la valeur du slider pour modifier le tempo du métronome*/ private void BPMSlider(object sender, ValueChangedEventArgs e) { float selectedValue = (float)e.NewValue;