bevy_codex/widgets/list/
systems.rs

1use bevy::prelude::*;
2use bevy_lunex::prelude::*;
3
4use super::components::{List, ListUi};
5use crate::{resources::CodexSettings, widgets::button::components::CustomButton};
6
7pub fn build_list(
8    mut commands: Commands,
9    query: Query<(Entity, &List), Added<List>>,
10    assets: Res<AssetServer>,
11    codex_settings: Res<CodexSettings>,
12) {
13    for (entity, list) in &query {
14        commands
15            .entity(entity)
16            .insert(UiTreeBundle::<ListUi>::from(UiTree::new2d("List")))
17            .with_children(|ui| {
18                let mut offset = 0.0;
19                let list_link = UiLink::<ListUi>::path("List");
20                ui.spawn((
21                    list_link.clone(),
22                    UiLayout::window_full().pack::<Base>(),
23                    Pickable::IGNORE,
24                ));
25                for item in &list.items {
26                    ui.spawn((
27                        list_link.add("Button-".to_string() + item),
28                        UiLayout::window()
29                            .y(Rl(offset))
30                            .x(Rl(5.0))
31                            .size((Rl(90.0), Ab(list.size)))
32                            .pack::<Base>(),
33                        Pickable::IGNORE,
34                        CustomButton {
35                            link: "Button".to_string(),
36                            text: item.to_string(),
37                            texture: assets.load(codex_settings.button_texture.clone()),
38                            color: codex_settings.button_color,
39                        },
40                    ));
41                    offset += list.gap + list.size;
42                }
43            });
44    }
45}