Skip to main content

tabview/
tabview.rs

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}