Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use bevy::prelude::{Bundle, Commands, Component, Entity, In, Query, Res};
use kayak_ui::prelude::*;
#[derive(Component, Default, PartialEq, Eq, Clone)]
pub struct TabContext {
pub current_index: usize,
}
#[derive(Component, Default, PartialEq, Eq, Clone)]
pub struct TabContextProvider {
pub initial_index: usize,
}
impl Widget for TabContextProvider {}
#[derive(Bundle)]
pub struct TabContextProviderBundle {
pub tab_provider: TabContextProvider,
pub children: KChildren,
pub styles: KStyle,
pub widget_name: WidgetName,
}
impl Default for TabContextProviderBundle {
fn default() -> Self {
Self {
tab_provider: Default::default(),
children: Default::default(),
styles: KStyle {
..Default::default()
},
widget_name: TabContextProvider::default().get_name(),
}
}
}
pub fn tab_context_render(
In(entity): In<Entity>,
widget_context: Res<KayakWidgetContext>,
mut commands: Commands,
query: Query<(&KChildren, &TabContextProvider)>,
) -> bool {
if let Ok((children, tab_context_provider)) = query.get(entity) {
if widget_context
.get_context_entity::<TabContext>(entity)
.is_none()
{
let context_entity = commands
.spawn(TabContext {
current_index: tab_context_provider.initial_index,
})
.id();
widget_context.set_context_entity::<TabContext>(Some(entity), context_entity);
}
children.process(&widget_context, &mut commands, Some(entity));
}
true
}