pub struct StackView<'a, ViewId, TitleFor, const N: usize>{ /* private fields */ }Expand description
Stack navigation container built on StackNav.
Implementations§
Source§impl<'a, ViewId, TitleFor, const N: usize> StackView<'a, ViewId, TitleFor, N>
impl<'a, ViewId, TitleFor, const N: usize> StackView<'a, ViewId, TitleFor, N>
Sourcepub fn new(root: ViewId, title_for: TitleFor) -> Self
pub fn new(root: ViewId, title_for: TitleFor) -> Self
Creates a stack view with a root view and title callback.
Examples found in repository?
examples/containers.rs (lines 30-33)
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}Sourcepub fn push_view(&mut self, view: ViewId) -> Result<(), StackError>
pub fn push_view(&mut self, view: ViewId) -> Result<(), StackError>
Pushes a new view onto the stack.
Examples found in repository?
examples/containers.rs (line 34)
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}Sourcepub fn pop_view(&mut self) -> Result<ViewId, StackError>
pub fn pop_view(&mut self) -> Result<ViewId, StackError>
Pops the current view off the stack.
Sourcepub fn is_animating(&self) -> bool
pub fn is_animating(&self) -> bool
Returns whether the stack is animating.
Builds a navigation view for the supplied frame.
Examples found in repository?
src/containers.rs (line 154)
149 pub fn handle_touch(
150 &mut self,
151 touch: TouchEvent,
152 frame: Rectangle,
153 ) -> ButtonTouchResponse<NavHeaderAction> {
154 self.nav_view(frame)
155 .handle_touch(&mut self.header_touch, touch)
156 }
157
158 /// Draws stack navigation chrome.
159 pub fn draw_chrome<D>(
160 &self,
161 display: &mut D,
162 frame: Rectangle,
163 theme: &FsTheme,
164 i18n: &I18n<'a>,
165 ) where
166 D: embedded_graphics::draw_target::DrawTarget<
167 Color = embedded_graphics::pixelcolor::Rgb565,
168 >,
169 {
170 self.nav_view(frame)
171 .draw_chrome(display, theme, i18n, &self.header_touch);
172 }
173
174 /// Returns stack-motion geometry for animated presentation.
175 pub fn motion(&self, frame: Rectangle) -> Option<StackMotion> {
176 let nav = self.nav_view(frame);
177 nav.layers.overlay.map(|overlay| StackMotion {
178 header: nav.header,
179 body: nav.body,
180 overlay: overlay.translated_frame(),
181 })
182 }Sourcepub fn clear_touch_state(&mut self)
pub fn clear_touch_state(&mut self)
Clears transient header touch state.
Sourcepub fn handle_touch(
&mut self,
touch: TouchEvent,
frame: Rectangle,
) -> ButtonTouchResponse<NavHeaderAction>
pub fn handle_touch( &mut self, touch: TouchEvent, frame: Rectangle, ) -> ButtonTouchResponse<NavHeaderAction>
Routes one touch event to the navigation chrome.
Examples found in repository?
examples/containers.rs (lines 36-39)
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}Sourcepub fn draw_chrome<D>(
&self,
display: &mut D,
frame: Rectangle,
theme: &FsTheme,
i18n: &I18n<'a>,
)where
D: DrawTarget<Color = Rgb565>,
pub fn draw_chrome<D>(
&self,
display: &mut D,
frame: Rectangle,
theme: &FsTheme,
i18n: &I18n<'a>,
)where
D: DrawTarget<Color = Rgb565>,
Draws stack navigation chrome.
Sourcepub fn motion(&self, frame: Rectangle) -> Option<StackMotion>
pub fn motion(&self, frame: Rectangle) -> Option<StackMotion>
Returns stack-motion geometry for animated presentation.
Examples found in repository?
examples/containers.rs (line 35)
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}Auto Trait Implementations§
impl<'a, ViewId, TitleFor, const N: usize> Freeze for StackView<'a, ViewId, TitleFor, N>
impl<'a, ViewId, TitleFor, const N: usize> RefUnwindSafe for StackView<'a, ViewId, TitleFor, N>where
TitleFor: RefUnwindSafe,
ViewId: RefUnwindSafe,
impl<'a, ViewId, TitleFor, const N: usize> Send for StackView<'a, ViewId, TitleFor, N>
impl<'a, ViewId, TitleFor, const N: usize> Sync for StackView<'a, ViewId, TitleFor, N>
impl<'a, ViewId, TitleFor, const N: usize> Unpin for StackView<'a, ViewId, TitleFor, N>
impl<'a, ViewId, TitleFor, const N: usize> UnsafeUnpin for StackView<'a, ViewId, TitleFor, N>where
TitleFor: UnsafeUnpin,
ViewId: UnsafeUnpin,
impl<'a, ViewId, TitleFor, const N: usize> UnwindSafe for StackView<'a, ViewId, TitleFor, N>where
TitleFor: UnwindSafe,
ViewId: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
Source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
Source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.