1#![doc = include_str!("../README.md")]
3#![no_std]
4#![no_main]
5
6pub use flip_ui_macro::flip_ui;
8
9use core::marker::PhantomData;
10
11use flipperzero::{
12 dialogs::{DialogFileBrowserOptions, DialogMessage, DialogMessageButton, DialogsApp},
13 furi::string::FuriString,
14};
15
16pub struct InputDialog<'a> {
17 phantom: PhantomData<&'a ()>,
18}
19
20pub enum View<'a> {
21 Message(DialogMessage<'a>),
22 Alert(DialogMessage<'a>),
23 Browser(DialogFileBrowserOptions<'a>),
24 Input(self::InputDialog<'a>),
25}
26
27pub enum Event {
28 Back,
29 MessageLeft,
30 MessageRight,
31 MessageCenter,
32 AlertOk,
33 BrowserSelect(FuriString),
34 Input(FuriString),
35}
36
37impl<'a> View<'a> {
38 pub fn show(&self, app: &mut DialogsApp) -> Event {
39 match self {
40 View::Message(dialog) => match app.show_message(dialog) {
41 DialogMessageButton::Back => Event::Back,
42 DialogMessageButton::Left => Event::MessageLeft,
43 DialogMessageButton::Right => Event::MessageRight,
44 DialogMessageButton::Center => Event::MessageCenter,
45 },
46 View::Alert(dialog) => match app.show_message(dialog) {
47 DialogMessageButton::Center => Event::AlertOk,
48 DialogMessageButton::Back => Event::Back,
49 _ => unreachable!(),
50 },
51 View::Browser(dialog) => match app.show_file_browser(None, Some(dialog)) {
53 Some(path) => Event::BrowserSelect(path),
54 None => Event::Back,
55 },
56 View::Input(_) => Event::Input(FuriString::new()),
58 }
59 }
60}