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}