bevy_codex/widgets/list/
systems.rs1use 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}