gamai/prop/
prop.rs

1// use std::ops::Deref;
2// use std::ops::DerefMut;
3
4// /// Trait for structs that implement Deref and DerefMut, required for use as a prop.
5// pub trait Prop<T>: Deref<Target = T> + DerefMut<Target = T> {}
6// impl<T> Prop<T> for T where T: Deref<Target = T> + DerefMut<Target = T> {}
7// /// Trait for structs that implement Deref and DerefMut, required for use as a prop.
8// pub trait Prop<T> {
9// 	fn get(&self) -> &T;
10// 	fn set(&mut self, value: T);
11// }
12// impl<T> Prop<T> for T where T: Deref<Target = T> + DerefMut<Target = T> {}
13
14
15// pub trait PropList<T> {
16// 	fn get_props() -> Vec<Box<dyn Prop<T>>>;
17// }
18
19pub struct SetPropError(pub String);
20
21pub struct PropHandle<PropT, ValueT> {
22	pub get: fn(prop: &PropT) -> ValueT,
23	pub set: fn(prop: &mut PropT, value: ValueT) -> Result<(), SetPropError>,
24	pub show_if: fn(prop: &PropT) -> bool,
25}
26
27pub trait PropInput<T> {
28	fn get(&self) -> &T;
29	fn set(&mut self, value: T);
30	fn show_if(&self) -> bool { true }
31}
32
33pub struct RangeProp<T> {
34	pub value: T,
35	pub min: T,
36	pub max: T,
37	pub step: T,
38}
39
40// impl PropInput<u32> for SliderProp<u32> {
41// 	fn get(&self) -> &u32 { &self.value }
42// 	fn set(&mut self, value: u32) { self.value = value }
43// }
44
45pub struct DropdownProp<T> {
46	pub value: T,
47	pub index: usize,
48	pub display_names: Vec<String>,
49}
50
51// impl PropInput<u32> for DropdownProp<u32> {
52// 	fn get(&self) -> &u32 { &self.value }
53// 	fn set(&mut self, value: u32) { self.value = value }
54// }
55
56
57
58pub trait UiBuilder<T> {
59	fn get_binding(){
60
61	}
62}
63
64pub enum BuiltinUiBindings {
65	Group,
66	Slider,
67	Dropdown,
68}
69
70
71pub enum BuiltinUiComponents {}
72
73
74
75
76
77
78/*
791. example implementation
80
81struct Foobar {
82	a:u32,
83	b:u32,
84}
85
86impl PropList<Foobar> for Foobar {
87	fn get_props() -> Vec<Box<dyn Prop<Foobar>>> {
88		vec![
89			Box::new(PropHandle {
90				get: |prop: &Foobar| prop.a,
91			}),
92			Box::new(PropHandle {
93				get: |prop: &Foobar| prop.b,
94			}),
95		]
96	}
97}
98
99fn SliderComponent<T:AcceptsSlider>(entity:Entity){
100
101
102
103}
104
105
106
107
108trait PropInput<T>{
109
110
111}
112
113
114*/