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:
parent
c23a610d52
commit
3e2c517dd1
7 changed files with 27 additions and 16 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
5
crates/ui2/src/disableable.rs
Normal file
5
crates/ui2/src/disableable.rs
Normal 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;
|
||||||
|
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>,
|
||||||
|
|
|
@ -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::*;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue