Skip to main content

embedded_gui/widgets/
data.rs

1use crate::{
2    geometry::Rect,
3    style::Style,
4    widget::{PropertyError, PropertyKey, PropertyValue, Widget},
5};
6
7/// List view widget.
8#[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}