embedded_gui/widgets/
data.rs1use crate::{
2 geometry::Rect,
3 style::Style,
4 widget::{PropertyError, PropertyKey, PropertyValue, Widget},
5};
6
7#[derive(Clone, Copy, Debug, PartialEq)]
9pub struct ListWidget<'a> {
10 pub items: &'a [&'a str],
11 pub selected: usize,
12 pub offset: usize,
13 pub visible_rows: usize,
14}
15
16impl<'a> Widget for ListWidget<'a> {
17 fn render_widget_bounds(&self, _bounds: Rect, _style: &Style) {}
18
19 fn get_property(&self, key: PropertyKey) -> Option<PropertyValue<'_>> {
20 match key {
21 PropertyKey::Selected => Some(PropertyValue::Usize(self.selected)),
22 PropertyKey::Offset => Some(PropertyValue::Usize(self.offset)),
23 _ => None,
24 }
25 }
26
27 fn set_property<'b>(
28 &mut self,
29 key: PropertyKey,
30 val: PropertyValue<'b>,
31 ) -> Result<(), PropertyError> {
32 match (key, val) {
33 (PropertyKey::Selected, PropertyValue::Usize(s)) => {
34 self.selected = s;
35 Ok(())
36 }
37 (PropertyKey::Offset, PropertyValue::Usize(o)) => {
38 self.offset = o;
39 Ok(())
40 }
41 _ => Err(PropertyError::NotFound),
42 }
43 }
44}