Web Analytics

AppCUI-rs

⭐ 376 stars French by gdt050579

🌐 Langue

AppCUI-rs

`` ⯈ 𝗔𝗽𝗽𝗖𝗨𝗜-𝗿𝘀 🖳


Statut de compilation Windows
Statut de compilation Linux
Statut de compilation macOS
Couverture du code
Licence
Crates.io
Docs.rs
Galerie

AppCUI-rs est une bibliothèque Rust rapide et multiplateforme pour créer des interfaces utilisateur modernes en mode texte (TUI) avec des widgets riches, des thèmes et une prise en charge complète d’Unicode—une alternative à ncurses et autres frameworks d’UI terminal.

✨ Fonctionnalités

  • [x] nombreux contrôles prêts à l’emploi (boutons, labels, champs texte, cases à cocher, boutons radio, listes, arbres, boîtes combinées, sélectionneurs de date/heure, sélectionneurs de couleur, onglets, accordéons, etc.). La liste complète des contrôles se trouve ici
  • [x] système de mise en page puissant permettant de positionner les contrôles avec des coordonnées absolues, relatives, docking, alignement, ancres ou positionnement par pivot (voir plus ici)
  • [x] menus et barres d’outils
  • [x] prise en charge multiplateforme (Windows via API et terminal virtuel, Linux via ncurses, macOS via termios)
  • [x] prise en charge du multithreading pour permettre des tâches en arrière-plan
  • [x] minuteurs
  • [x] prise en charge de la souris
  • [x] prise en charge du presse-papiers
  • [x] thèmes de couleurs
  • [x] prise en charge des caractères Unicode
  • [x] dialogues prédéfinis (boîte de message, boîte de saisie, sélectionneur de couleur, dialogues d’enregistrement et d’ouverture, navigateur de dossiers, etc.)
  • [x] prise en charge des couleurs vraies (24 bits par pixel) pour les terminaux compatibles.

📸 Captures d’écran

👉 Découvrez la Galerie pour des démonstrations complètes de tous les contrôles !

🖥️ Backends

AppCUI prend en charge différents backends selon le système d’exploitation :

  • Console Windows - basé sur l'API bas niveau Win32, conçu pour la console classique de Windows
  • Windows VT - basé sur les séquences ANSI, conçu pour les terminaux virtuels modernes de Windows
  • NCurses - basé sur l'API NCurses pour les environnements Linux
  • Termios - basé sur les séquences ANSI et les API bas niveau pour macOS
  • Terminal Web - conçu pour les implémentations web (basé sur WebGL)
  • CrossTerm - basé sur le crate crossterm, activé via un drapeau de fonctionnalité
Plus d'informations sur les backends pris en charge sont disponibles ici

🚀 Démarrage rapide

Ajoutez ce qui suit à votre Cargo.toml :

toml [dependencies] appcui = "*"

Créez ensuite un nouveau projet Rust et ajoutez le code suivant :
rust use appcui::prelude::*;

fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = Window::new( "Test", LayoutBuilder::new().alignment(Alignment::Center).width(30).height(9).build(), window::Flags::Sizeable, ); win.add(Label::new( "Hello World !", LayoutBuilder::new().alignment(Alignment::Center).width(13).height(1).build(), )); app.add_window(win); app.run(); Ok(()) }


Ou une version plus compacte utilisant les proc-macros :
rs use appcui::prelude::*;

fn main() -> Result<(), appcui::system::Error> { let mut app = App::new().build()?; let mut win = window!("Test,a:c,w:30,h:9"); win.add(label!("'Hello World !',a:c,w:13,h:1")); app.add_window(win); app.run(); Ok(()) }


Exécutez ensuite le projet avec cargo run. Vous devriez voir une fenêtre avec le titre Test et le texte Hello World ! au centre.

🧪 Exemples

AppCUI-rs est fourni avec un ensemble d'exemples pour vous aider à démarrer. Vous pouvez les trouver dans le dossier examples, notamment :

🛠️ Un exemple plus complexe

Un exemple qui crée une fenêtre avec un bouton qui, lorsqu'il est pressé, incrémente un compteur.

rust use appcui::prelude::*;

// Create a window that handles button events and has a counter #[Window(events = ButtonEvents)] struct CounterWindow { counter: i32 }

impl CounterWindow { fn new() -> Self { let mut w = Self { // set up the window title and position base: window!("'Counter window',a:c,w:30,h:5"), // initial counter is 1 counter: 1 }; // add a single button with the caption "1" (like the counter) w.add(button!("'1',d:b,w:20")); w } } impl ButtonEvents for CounterWindow { // When the button is pressed, this function will be called // with the handle of the button that was pressed // Since we only have one button, we don't need to store its handle // in the struct, as we will receive the handle via the on_pressed method fn on_pressed(&mut self, handle: Handle