veloren_voxygen_egui/
widgets.rs

1use egui::{ScrollArea, Ui, Vec2, WidgetText};
2
3pub(crate) fn filterable_list(
4    ui: &mut Ui,
5    list_items: &[String],
6    search_text: &str,
7    selected_index: &mut usize,
8) {
9    let scroll_area = ScrollArea::vertical();
10    scroll_area.show(ui, |ui| {
11        ui.spacing_mut().item_spacing = Vec2::new(0.0, 2.0);
12        let search_text = search_text.to_lowercase();
13        for (i, list_item) in list_items.iter().enumerate().filter_map(|(i, list_item)| {
14            if search_text.is_empty() || list_item.to_lowercase().contains(&search_text) {
15                Some((i, list_item))
16            } else {
17                None
18            }
19        }) {
20            if ui
21                .selectable_label(i == *selected_index, list_item)
22                .clicked()
23            {
24                *selected_index = i;
25            };
26        }
27    });
28}
29
30pub(crate) fn two_col_row(
31    ui: &mut Ui,
32    label: impl Into<WidgetText>,
33    content: impl Into<WidgetText>,
34) {
35    ui.label(label);
36    ui.label(content);
37    ui.end_row();
38}