multi_buffer.rs

 1use crate::prelude::*;
 2use crate::{v_stack, Buffer, Icon, IconButton, Label};
 3
 4#[derive(Component)]
 5pub struct MultiBuffer {
 6    buffers: Vec<Buffer>,
 7}
 8
 9impl MultiBuffer {
10    pub fn new(buffers: Vec<Buffer>) -> Self {
11        Self { buffers }
12    }
13
14    fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
15        let theme = theme(cx);
16
17        v_stack()
18            .w_full()
19            .h_full()
20            .flex_1()
21            .children(self.buffers.clone().into_iter().map(|buffer| {
22                v_stack()
23                    .child(
24                        div()
25                            .flex()
26                            .items_center()
27                            .justify_between()
28                            .p_4()
29                            .bg(theme.editor_subheader)
30                            .child(Label::new("main.rs"))
31                            .child(IconButton::new("arrow_up_right", Icon::ArrowUpRight)),
32                    )
33                    .child(buffer)
34            }))
35    }
36}
37
38#[cfg(feature = "stories")]
39pub use stories::*;
40
41#[cfg(feature = "stories")]
42mod stories {
43    use crate::{hello_world_rust_buffer_example, Story};
44
45    use super::*;
46
47    #[derive(Component)]
48    pub struct MultiBufferStory;
49
50    impl MultiBufferStory {
51        fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
52            let theme = theme(cx);
53
54            Story::container(cx)
55                .child(Story::title_for::<_, MultiBuffer>(cx))
56                .child(Story::label(cx, "Default"))
57                .child(MultiBuffer::new(vec![
58                    hello_world_rust_buffer_example(&theme),
59                    hello_world_rust_buffer_example(&theme),
60                    hello_world_rust_buffer_example(&theme),
61                    hello_world_rust_buffer_example(&theme),
62                    hello_world_rust_buffer_example(&theme),
63                ]))
64        }
65    }
66}