Skip to main content

beuvy_runtime/select/
mod.rs

1mod build;
2mod model;
3mod systems;
4
5pub use model::{
6    AddSelect, AddSelectOption, Select, SelectOptionState, SelectPanel, SelectValueChangedMessage,
7    default_select_node, selected_option, sync_select_label, trigger_label_entity,
8};
9
10use crate::button::ButtonSet;
11use crate::form_item::FormItemSet;
12use bevy::prelude::*;
13use build::add_select;
14use systems::{
15    close_selects_on_foreign_click, sync_select_accessory_layout, sync_select_button_layouts,
16    sync_select_option_indicators, sync_select_panel_placement, sync_select_semantics,
17    sync_select_visual_state,
18};
19
20pub struct SelectPlugin;
21
22impl Plugin for SelectPlugin {
23    fn build(&self, app: &mut App) {
24        app.add_message::<Pointer<Click>>()
25            .add_message::<SelectValueChangedMessage>()
26            .add_systems(Update, add_select.after(FormItemSet::Build))
27            .add_systems(
28                Update,
29                (
30                    close_selects_on_foreign_click,
31                    sync_select_visual_state,
32                    sync_select_semantics,
33                    sync_select_panel_placement,
34                    sync_select_button_layouts,
35                    sync_select_accessory_layout,
36                    sync_select_option_indicators,
37                )
38                    .after(ButtonSet::Build),
39            );
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    #[test]
48    fn select_plugin_schedule_initializes() {
49        let mut app = App::new();
50        app.add_plugins(MinimalPlugins).add_plugins(SelectPlugin);
51        app.update();
52    }
53}