From a5658be1cca7fc8cbd1382fa3ddef4060e584c77 Mon Sep 17 00:00:00 2001
From: "thibault.capt" <thibault.capt@etu.hesge.ch>
Date: Tue, 10 Oct 2023 17:25:37 +0200
Subject: [PATCH] add new interface gui

---
 Cargo.toml  |  4 ++-
 src/gui.rs  | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main.rs |  5 ++--
 3 files changed, 76 insertions(+), 3 deletions(-)
 create mode 100644 src/gui.rs

diff --git a/Cargo.toml b/Cargo.toml
index 5215147..135ac2a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,4 +6,6 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
-termion = "2.0.1"
\ No newline at end of file
+termion = "2.0.1"
+crossterm = "0.25.0"
+cursive = "0.15.0"
\ No newline at end of file
diff --git a/src/gui.rs b/src/gui.rs
new file mode 100644
index 0000000..7878c2b
--- /dev/null
+++ b/src/gui.rs
@@ -0,0 +1,70 @@
+use cursive::Cursive;
+use cursive::CursiveExt;
+use cursive::views::{TextView, Dialog, LinearLayout, Button};
+use crate::training::Training;
+
+pub struct App {
+    cursive: Cursive,
+    training_list: Vec<Training>,
+}
+
+impl App {
+    pub fn new() -> Self {
+        let mut cursive = Cursive::default();
+        let training_list = Vec::new();
+
+        // Créez une vue TextView pour afficher la liste des entraînements
+        let training_view = TextView::new("Liste des entraînements");
+
+        // Créez un bouton pour lire tous les entraînements
+        let btn_list = Button::new("Voir", |s| {
+            // Vous pouvez ajouter votre logique d'ajout ici
+            s.add_layer(Dialog::info("Fonctionnalité non implémentée"));
+        });
+
+        // Créez un bouton pour ajouter un nouveau entraînement
+        let btn_add = Button::new("Ajouter", |s| {
+            // Vous pouvez ajouter votre logique d'ajout ici
+            s.add_layer(Dialog::info("Fonctionnalité non implémentée"));
+        });
+
+        // Créez un bouton pour modifier un entraînement
+        let btn_update = Button::new("Modifier", |s| {
+            // Vous pouvez ajouter votre logique d'ajout ici
+            s.add_layer(Dialog::info("Fonctionnalité non implémentée"));
+        });
+
+        // Créez un bouton pour supprimer un entraînement
+        let btn_delete = Button::new("Supprimer", |s| {
+            // Vous pouvez ajouter votre logique d'ajout ici
+            s.add_layer(Dialog::info("Fonctionnalité non implémentée"));
+        });
+
+        // Créez un bouton pour supprimer un entraînement
+        let btn_exit = Button::new("Quitter", |s| {
+            // Vous pouvez ajouter votre logique d'ajout ici
+            s.quit();
+        });
+
+        // Créez un LinearLayout pour organiser la vue TextView et le bouton
+        let layout = LinearLayout::vertical()
+            .child(training_view)
+            .child(btn_list)
+            .child(btn_add)
+            .child(btn_update)
+            .child(btn_delete)
+            .child(btn_exit);
+
+
+        cursive.add_layer(layout);
+
+        cursive.add_global_callback('q', |s| s.quit());
+
+
+        App { cursive, training_list }
+    }
+
+    pub fn run(&mut self) {
+        self.cursive.run();
+    }
+}
\ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
index dda1496..dc5bf99 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,9 @@
 mod training;
 mod participant;
-mod terminal;
+//mod terminal;
+mod gui;
 
-use terminal::App;
+use gui::App;
 
 fn main() {
     let mut app = App::new();
-- 
GitLab