Add Disableable trait (#3439)

This PR adds a new `Disableable` trait to use for elements that are
capable of being disabled.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2023-11-29 13:01:26 -05:00 committed by GitHub
parent c23a610d52
commit 3e2c517dd1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 27 additions and 16 deletions

View file

@ -1,5 +1,7 @@
use gpui::{ClickEvent, WindowContext}; use gpui::{ClickEvent, WindowContext};
/// A trait for elements that can be clicked.
pub trait Clickable { pub trait Clickable {
/// Sets the click handler that will fire whenever the element is clicked.
fn on_click(self, handler: impl Fn(&ClickEvent, &mut WindowContext) + 'static) -> Self; fn on_click(self, handler: impl Fn(&ClickEvent, &mut WindowContext) + 'static) -> Self;
} }

View file

@ -201,13 +201,11 @@ impl ButtonSize2 {
// children: SmallVec<[AnyElement; 2]>, // children: SmallVec<[AnyElement; 2]>,
// } // }
pub trait ButtonCommon: Clickable { pub trait ButtonCommon: Clickable + Disableable {
fn id(&self) -> &ElementId; fn id(&self) -> &ElementId;
fn style(self, style: ButtonStyle2) -> Self; fn style(self, style: ButtonStyle2) -> Self;
fn disabled(self, disabled: bool) -> Self;
fn size(self, size: ButtonSize2) -> Self; fn size(self, size: ButtonSize2) -> Self;
fn tooltip(self, tooltip: impl Fn(&mut WindowContext) -> AnyView + 'static) -> Self; fn tooltip(self, tooltip: impl Fn(&mut WindowContext) -> AnyView + 'static) -> Self;
// fn width(&mut self, width: DefiniteLength) -> &mut Self;
} }
// pub struct LabelButton { // pub struct LabelButton {
@ -266,14 +264,6 @@ pub struct ButtonLike {
} }
impl ButtonLike { impl ButtonLike {
pub fn children(
&mut self,
children: impl IntoIterator<Item = impl Into<AnyElement>>,
) -> &mut Self {
self.children = children.into_iter().map(Into::into).collect();
self
}
pub fn new(id: impl Into<ElementId>) -> Self { pub fn new(id: impl Into<ElementId>) -> Self {
Self { Self {
id: id.into(), id: id.into(),
@ -287,6 +277,13 @@ impl ButtonLike {
} }
} }
impl Disableable for ButtonLike {
fn disabled(mut self, disabled: bool) -> Self {
self.disabled = disabled;
self
}
}
impl Clickable for ButtonLike { impl Clickable for ButtonLike {
fn on_click(mut self, handler: impl Fn(&ClickEvent, &mut WindowContext) + 'static) -> Self { fn on_click(mut self, handler: impl Fn(&ClickEvent, &mut WindowContext) + 'static) -> Self {
self.on_click = Some(Box::new(handler)); self.on_click = Some(Box::new(handler));
@ -317,11 +314,6 @@ impl ButtonCommon for ButtonLike {
self self
} }
fn disabled(mut self, disabled: bool) -> Self {
self.disabled = disabled;
self
}
fn size(mut self, size: ButtonSize2) -> Self { fn size(mut self, size: ButtonSize2) -> Self {
self.size = size; self.size = size;
self self

View file

@ -0,0 +1,5 @@
/// A trait for elements that can be disabled.
pub trait Disableable {
/// Sets whether the element is disabled.
fn disabled(self, disabled: bool) -> Self;
}

View file

@ -1,6 +1,10 @@
use gpui::DefiniteLength; use gpui::DefiniteLength;
/// A trait for elements that have a fixed with.
pub trait FixedWidth { pub trait FixedWidth {
/// Sets the width of the element.
fn width(self, width: DefiniteLength) -> Self; fn width(self, width: DefiniteLength) -> Self;
/// Sets the element's width to the full width of its container.
fn full_width(self) -> Self; fn full_width(self) -> Self;
} }

View file

@ -1,9 +1,11 @@
pub use gpui::prelude::*;
pub use gpui::{ pub use gpui::{
div, Element, ElementId, InteractiveElement, ParentElement, RenderOnce, SharedString, Styled, div, Element, ElementId, InteractiveElement, ParentElement, RenderOnce, SharedString, Styled,
ViewContext, WindowContext, ViewContext, WindowContext,
}; };
pub use crate::clickable::*; pub use crate::clickable::*;
pub use crate::disableable::*;
pub use crate::fixed::*; pub use crate::fixed::*;
pub use crate::selectable::*; pub use crate::selectable::*;
pub use crate::StyledExt; pub use crate::StyledExt;

View file

@ -1,7 +1,11 @@
use gpui::{AnyView, WindowContext}; use gpui::{AnyView, WindowContext};
/// A trait for elements that can be selected.
pub trait Selectable { pub trait Selectable {
/// Sets whether the element is selected.
fn selected(self, selected: bool) -> Self; fn selected(self, selected: bool) -> Self;
/// Sets the tooltip that should be shown when the element is selected.
fn selected_tooltip( fn selected_tooltip(
self, self,
tooltip: Box<dyn Fn(&mut WindowContext) -> AnyView + 'static>, tooltip: Box<dyn Fn(&mut WindowContext) -> AnyView + 'static>,

View file

@ -14,6 +14,7 @@
mod clickable; mod clickable;
mod components; mod components;
mod disableable;
mod fixed; mod fixed;
pub mod prelude; pub mod prelude;
mod selectable; mod selectable;
@ -23,6 +24,7 @@ pub mod utils;
pub use clickable::*; pub use clickable::*;
pub use components::*; pub use components::*;
pub use disableable::*;
pub use fixed::*; pub use fixed::*;
pub use prelude::*; pub use prelude::*;
pub use selectable::*; pub use selectable::*;