1use crossterm::event::{Event, KeyCode};
2use flux_tui::canvas::Canvas;
3use flux_tui::common::Color;
4use flux_tui::components::*;
5use flux_tui::tui::Tui;
6use flux_tui::window::*;
7use std::cell::RefCell;
8use std::rc::Rc;
9use vector2d::Vector2D;
10
11fn main() {
12 let control = Rc::new(RefCell::new(Control::default()));
13 let mut tui = Tui::new(control.clone()).unwrap();
14 tui.render().unwrap();
15 while let Ok(()) = tui.handle_next_event() {
16 if !control.borrow().running {
17 return;
18 }
19 tui.render().unwrap();
20 }
21}
22
23
24struct Control {
25 running: bool,
26 uid: WindowUID,
27 tabview: Rc<RefCell<TabView>>,
28}
29
30impl Default for Control {
31 fn default() -> Self {
32 let label = WindowFactory::create::<Label>();
33 label.borrow_mut().set_text("Lorem ipsum");
34 let label2 = WindowFactory::create::<Label>();
35 label2.borrow_mut().set_text("Bibsum loram");
36 let label3 = WindowFactory::create::<Label>();
37 label3.borrow_mut().set_text("Epsum larel");
38 let label4 = WindowFactory::create::<Label>();
39 label4.borrow_mut().set_text("Ipsel Aarel");
40
41 let tabview = WindowFactory::create::<TabView>();
42 {
43 let mut brw = tabview.borrow_mut();
44 brw.enable_tab_enumeration();
45 brw.set_highlight_fg_color(Some(Color::Grey));
46 brw.set_highlight_bg_color(Some(Color::Blue));
47 brw.add_item(Tab::new("WIP Tab Number. 1", label));
48 brw.add_item(Tab::new("WIP Tab Number. 2", label2));
49 brw.add_item(Tab::new("WIP Tab Number. 3", label3));
50 brw.add_item(Tab::new("WIP Tab Number. 4", label4));
51 }
52
53 Self {
54 uid: WindowUID::new(),
55 tabview,
56 running: true,
57 }
58 }
59}
60
61impl Window for Control {
62 fn render(&self, _: &mut Canvas) {}
63
64 fn handle_event(&mut self, event: &mut WindowEvent) {
65 if let Event::Key(k) = event.raw() {
66 if k.code == KeyCode::Esc {
67 self.running = false;
68 }
69 }
70 }
71
72 fn children(&mut self, mut builder: SubWindowBuilder) -> SubWindows {
73 builder.add_pair(self.tabview.clone(), None).ok();
74 builder.build().unwrap()
75 }
76
77 fn focus(&self) -> Option<WindowRef> {
78 Some(self.tabview.clone())
79 }
80}
81
82impl HasWindowUID for Control {
83 fn uid(&self) -> WindowUID {
84 self.uid
85 }
86}
87
88impl WindowLayout for Control {
89 fn desired_size(&self, available_size: Vector2D<u16>) -> Vector2D<u16> {
90 available_size / 2
91 }
92}