pixels_graphics_lib/ui/
mod.rs

1pub mod alert;
2pub mod button;
3pub mod checkbox;
4pub mod dir_panel;
5pub mod helpers;
6pub mod icon_button;
7pub mod label;
8pub mod layout;
9pub mod menu_bar;
10mod menu_item_view;
11pub mod styles;
12pub mod text_field;
13pub mod toggle_button;
14pub mod toggle_icon_button;
15pub mod tooltip;
16
17use crate::prelude::*;
18use buffer_graphics_lib::prelude::*;
19use std::fmt::Debug;
20
21pub mod prelude {
22    pub use crate::ui::alert::*;
23    pub use crate::ui::button::*;
24    pub use crate::ui::checkbox::*;
25    pub use crate::ui::dir_panel::*;
26    pub use crate::ui::helpers::*;
27    pub use crate::ui::icon_button::*;
28    pub use crate::ui::label::*;
29    pub use crate::ui::layout::column::*;
30    pub use crate::ui::layout::row::*;
31    pub use crate::ui::layout::*;
32    pub use crate::ui::menu_bar::*;
33    pub use crate::ui::styles::*;
34    pub use crate::ui::text_field::*;
35    pub use crate::ui::toggle_button::*;
36    pub use crate::ui::toggle_icon_button::*;
37    pub use crate::ui::tooltip::*;
38    pub use crate::ui::*;
39}
40
41#[macro_export]
42macro_rules! render {
43    ($graphics:tt, $mouse:tt, $($view:expr$(,)?)*) => {
44        $(
45            $view.render($graphics, $mouse);
46        )*
47    };
48}
49
50pub trait PixelView: Debug {
51    fn set_position(&mut self, top_left: Coord);
52
53    fn bounds(&self) -> &Rect;
54
55    fn render(&self, graphics: &mut Graphics, mouse: &MouseData);
56
57    fn update(&mut self, timing: &Timing);
58
59    fn set_state(&mut self, new_state: ViewState);
60
61    fn get_state(&self) -> ViewState;
62}
63
64#[derive(Copy, Clone, Eq, PartialEq, Debug, Hash)]
65pub enum ViewState {
66    Normal,
67    Disabled,
68    Error,
69}
70
71impl ViewState {
72    /// Return pair of (is_error, is_disabled)
73    pub fn get_err_dis(&self) -> (bool, bool) {
74        match self {
75            ViewState::Normal => (false, false),
76            ViewState::Disabled => (false, true),
77            ViewState::Error => (true, false),
78        }
79    }
80}