use bevy::ecs::{component::Component, system::SystemParam};
use bevy_immediate::{
Imm,
attach::{BevyImmediateAttachPlugin, ImmediateAttach},
impl_capability_set,
ui::{ImplCapsUi, clicked::ImmUiClicked, selected::ImmUiSelected, text::ImmUiText},
};
use crate::{extension::ImmCapUiCollapse, styles};
pub struct CapsMyUi;
impl_capability_set!(
CapsMyUi,
ImplCapMyUi > ImplCapsUi,
(
bevy_immediate::ui::base::CapabilityUiBase,
bevy_immediate::ui::layout_order::CapabilityUiLayoutOrder,
bevy_immediate::ui::look::CapabilityUiLook,
bevy_immediate::ui::disabled::CapabilityUiDisabled,
bevy_immediate::ui::interaction::CapabilityUiInteraction,
bevy_immediate::ui::text::CapabilityUiText,
bevy_immediate::ui::text_input::CapabilityUiTextInput,
bevy_immediate::ui::selected::CapabilityUiSelectable,
bevy_immediate::ui::checked::CapabilityUiChecked,
bevy_immediate::ui::clicked::CapabilityUiClicked,
bevy_immediate::ui::activated::CapabilityUiActivated,
bevy_immediate::ui::anchored::CapabilityUiAnchored,
bevy_immediate_ui::slider_value::CapabilityUiSliderValue,
bevy_immediate_ui::number_input::CapabilityUiNumberInput,
crate::extension::CapUiToggle,
)
);
pub struct ExtensionUseExamplePlugin;
impl bevy::app::Plugin for ExtensionUseExamplePlugin {
fn build(&self, app: &mut bevy::app::App) {
app.add_plugins(BevyImmediateAttachPlugin::<CapsMyUi, ExtensionUseExampleRoot>::new());
}
}
#[derive(Component)]
pub struct ExtensionUseExampleRoot;
#[derive(SystemParam)]
pub struct Params {}
impl ImmediateAttach<CapsMyUi> for ExtensionUseExampleRoot {
type Params = Params;
fn construct(ui: &mut Imm<CapsMyUi>, _params: &mut Params) {
let mut button = ui.ch().on_spawn_insert(styles::button_bundle);
let toggle = button.get_toggle();
button = button.selected_set(toggle).add(|ui| {
if toggle {
ui.ch().text("Open");
} else {
ui.ch().text("Closed");
};
});
if button.clicked() {
button.flip_toggle();
}
if toggle {
ui.ch_id("my_hidden_element")
.on_spawn_insert(styles::container_with_background)
.add(|ui| {
ui.ch().text("Collapsable content");
});
}
ui.ch().text("Text after collapsable element");
}
}