Skip to main content

containers/
containers.rs

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}