beuvy_runtime/select/
mod.rs1mod 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}