2024-01-09 19:15:25 +00:00
/// A trait for elements that can be selected. Generally used to enable "toggle" or "active" behavior and styles on an element through the [Selection] status.
2023-11-29 17:23:09 +00:00
pub trait Selectable {
2023-11-29 18:01:26 +00:00
/// Sets whether the element is selected.
2023-11-29 17:23:09 +00:00
fn selected ( self , selected : bool ) -> Self ;
}
2024-01-09 19:15:25 +00:00
/// Represents the selection status of an element.
2023-11-29 17:23:09 +00:00
#[ derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy) ]
pub enum Selection {
2024-01-09 19:15:25 +00:00
/// The element is not selected.
2023-11-29 17:23:09 +00:00
#[ default ]
Unselected ,
2024-01-09 19:15:25 +00:00
/// The selection state of the element is indeterminate.
2023-11-29 17:23:09 +00:00
Indeterminate ,
2024-01-09 19:15:25 +00:00
/// The element is selected.
2023-11-29 17:23:09 +00:00
Selected ,
}
impl Selection {
2024-01-09 19:15:25 +00:00
/// Returns the inverse of the current selection status.
///
/// Indeterminate states become selected if inverted.
2023-11-29 17:23:09 +00:00
pub fn inverse ( & self ) -> Self {
match self {
Self ::Unselected | Self ::Indeterminate = > Self ::Selected ,
Self ::Selected = > Self ::Unselected ,
}
}
}