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}