winio_primitive/
traits.rs1use crate::{Point, Rect, Size};
2
3pub trait Failable {
5 type Error;
7}
8
9pub trait Visible: Failable {
11 fn is_visible(&self) -> Result<bool, Self::Error>;
13
14 fn set_visible(&mut self, v: bool) -> Result<(), Self::Error>;
16
17 fn show(&mut self) -> Result<(), Self::Error> {
19 self.set_visible(true)
20 }
21
22 fn hide(&mut self) -> Result<(), Self::Error> {
24 self.set_visible(false)
25 }
26}
27
28pub trait Enable: Failable {
30 fn is_enabled(&self) -> Result<bool, Self::Error>;
32
33 fn set_enabled(&mut self, v: bool) -> Result<(), Self::Error>;
35
36 fn enable(&mut self) -> Result<(), Self::Error> {
38 self.set_enabled(true)
39 }
40
41 fn disable(&mut self) -> Result<(), Self::Error> {
43 self.set_enabled(false)
44 }
45}
46
47pub trait ToolTip: Failable {
49 fn tooltip(&self) -> Result<String, Self::Error>;
51
52 fn set_tooltip(&mut self, s: impl AsRef<str>) -> Result<(), Self::Error>;
54}
55
56pub trait TextWidget: Failable {
58 fn text(&self) -> Result<String, Self::Error>;
60
61 fn set_text(&mut self, s: impl AsRef<str>) -> Result<(), Self::Error>;
66}
67
68pub trait Layoutable: Failable {
72 fn loc(&self) -> Result<Point, Self::Error>;
74
75 fn set_loc(&mut self, p: Point) -> Result<(), Self::Error>;
77
78 fn size(&self) -> Result<Size, Self::Error>;
80
81 fn set_size(&mut self, s: Size) -> Result<(), Self::Error>;
83
84 fn rect(&self) -> Result<Rect, Self::Error> {
86 Ok(Rect::new(self.loc()?, self.size()?))
87 }
88
89 fn set_rect(&mut self, r: Rect) -> Result<(), Self::Error> {
91 self.set_loc(r.origin)?;
92 self.set_size(r.size)
93 }
94
95 fn preferred_size(&self) -> Result<Size, Self::Error> {
97 Ok(Size::zero())
98 }
99
100 fn min_size(&self) -> Result<Size, Self::Error> {
102 self.preferred_size()
103 }
104}