Similar to https://github.com/zed-industries/zed/pull/18690 & https://github.com/zed-industries/zed/pull/18695, this PR enables required docs for `ui` and does some cleanup. Changes: - Enables the `deny(missing_docs)` crate-wide. - Adds `allow(missing_docs)` on many modules until folks pick them up to document them - Documents some modules (all in `ui/src/styles`) - Crate root-level organization: Traits move to `traits`, other misc organization - Cleaned out a bunch of unused code. Note: I'd like to remove `utils/format_distance` but the assistant panel uses it. To move it over to use the `time_format` crate we may need to update it to use `time` instead of `chrono`. Needs more investigation. Release Notes: - N/A
52 lines
1.4 KiB
Rust
52 lines
1.4 KiB
Rust
/// 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.
|
|
pub trait Selectable {
|
|
/// Sets whether the element is selected.
|
|
fn selected(self, selected: bool) -> Self;
|
|
}
|
|
|
|
/// Represents the selection status of an element.
|
|
#[derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy)]
|
|
pub enum Selection {
|
|
/// The element is not selected.
|
|
#[default]
|
|
Unselected,
|
|
/// The selection state of the element is indeterminate.
|
|
Indeterminate,
|
|
/// The element is selected.
|
|
Selected,
|
|
}
|
|
|
|
impl Selection {
|
|
/// Returns the inverse of the current selection status.
|
|
///
|
|
/// Indeterminate states become selected if inverted.
|
|
pub fn inverse(&self) -> Self {
|
|
match self {
|
|
Self::Unselected | Self::Indeterminate => Self::Selected,
|
|
Self::Selected => Self::Unselected,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<bool> for Selection {
|
|
fn from(selected: bool) -> Self {
|
|
if selected {
|
|
Self::Selected
|
|
} else {
|
|
Self::Unselected
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<Option<bool>> for Selection {
|
|
fn from(selected: Option<bool>) -> Self {
|
|
match selected {
|
|
Some(true) => Self::Selected,
|
|
Some(false) => Self::Unselected,
|
|
None => Self::Unselected,
|
|
}
|
|
}
|
|
}
|