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