Web Analytics

AppCUI-rs

⭐ 376 stars Portuguese by gdt050579

🌐 Idioma

AppCUI-rs

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

Status de Build do Windows
Status de Build do Linux
Status de Build do macOS
Cobertura de Código
Licença
Crates.io
Docs.rs
Galeria

AppCUI-rs é uma biblioteca Rust rápida e multiplataforma para construir interfaces de usuário modernas baseadas em texto (TUIs) com widgets ricos, temas e suporte total a Unicode—uma alternativa ao ncurses e outros frameworks de UI para terminais.

✨ Funcionalidades

  • [x] múltiplos controles prontos para uso (botões, rótulos, caixas de texto, caixas de seleção, botões de rádio, visualizações de lista, visualizações de árvore, caixas de combinação, seletores de data/hora, seletores de cor, abas, acordes, etc.). Uma lista completa de controles pode ser encontrada aqui
  • [x] sistema de layout poderoso que permite posicionar controles usando coordenadas absolutas, relativas, encaixe, alinhamento, âncoras ou posicionamento por pivô (veja mais aqui)
  • [x] menus e barras de ferramentas
  • [x] suporte multiplataforma (Windows via API e terminal virtual, Linux via ncurses, macOS via termios)
  • [x] suporte a multithreading para permitir tarefas em segundo plano
  • [x] timers
  • [x] suporte a mouse
  • [x] suporte à área de transferência
  • [x] temas de cores
  • [x] suporte para caracteres Unicode
  • [x] diálogos predefinidos (caixa de mensagem, caixa de entrada, seletor de cores, diálogos de salvar & abrir, navegador de pastas, etc.)
  • [x] suporte a true-color (24 bits por pixel) para terminais que suportam.

📸 Capturas de Tela

👉 Confira a Galeria para demonstrações completas de todos os controles!

🖥️ Backends

AppCUI suporta vários backends dependendo do sistema operacional:

  • Console do Windows - baseado na API Win32 de baixo nível, projetado para o console clássico do Windows
  • Windows VT - baseado em sequências ANSI, projetado para terminais virtuais modernos do Windows
  • NCurses - baseado na API NCurses para ambientes Linux
  • Termios - baseado em sequências ANSI e APIs de baixo nível para macOS
  • Terminal Web - projetado para implementações web (baseado em WebGL)
  • CrossTerm - baseado no crate crossterm, habilitado via uma flag de recurso
Mais informações sobre os backends suportados podem ser encontradas aqui

🚀 Início Rápido

Adicione o seguinte ao seu Cargo.toml:

toml [dependencies] appcui = "*"
Em seguida, crie um novo projeto Rust e adicione o seguinte código:

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 uma versão mais compacta usando 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(()) }


Em seguida, execute o projeto com cargo run. Você deverá ver uma janela com o título Test e o texto Hello World ! no centro.

🧪 Exemplos

O AppCUI-rs vem com um conjunto de exemplos para ajudá-lo a começar. Você pode encontrá-los na pasta examples, incluindo:

🛠️ Um exemplo mais complexo

Um exemplo que cria uma janela com um botão que, ao ser pressionado, aumenta um contador.

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