custom_set/
custom_set.rs

1use std::error::Error;
2
3use ratatui::widgets::Paragraph;
4use widgetui::*;
5
6#[derive(State)]
7pub struct CoolState {
8    pub q_count: i32,
9}
10
11impl Default for CoolState {
12    fn default() -> Self {
13        Self { q_count: 8 }
14    }
15}
16
17pub fn widget(
18    mut frame: ResMut<WidgetFrame>,
19    mut events: ResMut<Events>,
20    mut state: ResMut<CoolState>,
21) -> WidgetResult {
22    if events.key(crossterm::event::KeyCode::Char('q')) {
23        state.q_count -= 1;
24        if state.q_count <= 0 {
25            events.register_exit();
26            return Ok(());
27        }
28    }
29
30    let size = frame.size();
31
32    frame.render_widget(
33        Paragraph::new(format!("Press `q` {} more times", state.q_count)),
34        size,
35    );
36
37    Ok(())
38}
39
40#[set]
41pub fn CoolSet(app: App) -> App {
42    app.widgets(widget).states(CoolState::default())
43}
44
45fn main() -> Result<(), Box<dyn Error>> {
46    Ok(App::new(100)?.sets(CoolSet).run()?)
47}