toolbar.rs

 1use std::path::PathBuf;
 2use std::str::FromStr;
 3use std::sync::Arc;
 4
 5use ui::prelude::*;
 6use ui::{theme, Breadcrumb, HighlightColor, HighlightedText, Icon, IconButton, Symbol, Toolbar};
 7
 8use crate::story::Story;
 9
10#[derive(Element, Default)]
11pub struct ToolbarStory {}
12
13impl ToolbarStory {
14    fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
15        let theme = theme(cx);
16
17        struct LeftItemsPayload {
18            pub theme: Arc<Theme>,
19        }
20
21        Story::container(cx)
22            .child(Story::title_for::<_, Toolbar<V>>(cx))
23            .child(Story::label(cx, "Default"))
24            .child(Toolbar::new(
25                |_, payload| {
26                    let payload = payload.downcast_ref::<LeftItemsPayload>().unwrap();
27
28                    let theme = payload.theme.clone();
29
30                    vec![Breadcrumb::new(
31                        PathBuf::from_str("crates/ui/src/components/toolbar.rs").unwrap(),
32                        vec![
33                            Symbol(vec![
34                                HighlightedText {
35                                    text: "impl ".to_string(),
36                                    color: HighlightColor::Keyword.hsla(&theme),
37                                },
38                                HighlightedText {
39                                    text: "ToolbarStory".to_string(),
40                                    color: HighlightColor::Function.hsla(&theme),
41                                },
42                            ]),
43                            Symbol(vec![
44                                HighlightedText {
45                                    text: "fn ".to_string(),
46                                    color: HighlightColor::Keyword.hsla(&theme),
47                                },
48                                HighlightedText {
49                                    text: "render".to_string(),
50                                    color: HighlightColor::Function.hsla(&theme),
51                                },
52                            ]),
53                        ],
54                    )
55                    .into_any()]
56                },
57                Box::new(LeftItemsPayload {
58                    theme: theme.clone(),
59                }),
60                |_, _| {
61                    vec![
62                        IconButton::new(Icon::InlayHint).into_any(),
63                        IconButton::new(Icon::MagnifyingGlass).into_any(),
64                        IconButton::new(Icon::MagicWand).into_any(),
65                    ]
66                },
67                Box::new(()),
68            ))
69    }
70}