1#[path = "support/mod.rs"]
2mod support;
3
4use embedded_graphics::{
5 prelude::{Point, Size},
6 primitives::Rectangle,
7};
8use faststep::{
9 Localized, SplitAxis, SplitView, StackView, TabSpec, TabView, TouchEvent, TouchPhase,
10};
11
12#[derive(Clone, Copy, Debug, PartialEq, Eq)]
13enum Screen {
14 Devices,
15 DeviceDetail,
16}
17
18#[derive(Clone, Copy, Debug, PartialEq, Eq)]
19enum TabId {
20 Home,
21 Logs,
22 Settings,
23}
24
25fn main() {
26 let bounds = Rectangle::new(Point::zero(), Size::new(320, 240));
27 let split = SplitView::new(SplitAxis::Horizontal, 620, 12);
28 let _layout = split.layout(bounds);
29
30 let mut stack = StackView::<Screen, _, 4>::new(Screen::Devices, |screen| match screen {
31 Screen::Devices => Localized::new("screen.devices", "Devices"),
32 Screen::DeviceDetail => Localized::new("screen.detail", "Device"),
33 });
34 let _ = stack.push_view(Screen::DeviceDetail);
35 let _ = stack.motion(bounds);
36 let _ = stack.handle_touch(
37 TouchEvent::new(Point::new(12, 12), TouchPhase::Start, 1),
38 bounds,
39 );
40
41 let tabs = [
42 TabSpec {
43 key: TabId::Home,
44 icon: "H",
45 title: Localized::new("tab.home", "Home"),
46 },
47 TabSpec {
48 key: TabId::Logs,
49 icon: "L",
50 title: Localized::new("tab.logs", "Logs"),
51 },
52 TabSpec {
53 key: TabId::Settings,
54 icon: "S",
55 title: Localized::new("tab.settings", "Settings"),
56 },
57 ];
58 let mut tab_view = TabView::new(tabs, 0);
59 let _ = tab_view.content_frame(bounds, &support::theme());
60 let _ = tab_view.handle_touch(
61 TouchEvent::new(Point::new(200, 220), TouchPhase::End, 2),
62 bounds,
63 &support::theme(),
64 );
65}