diff --git a/crates/collab_ui2/src/collab_panel.rs b/crates/collab_ui2/src/collab_panel.rs index a8db82a843e3557b7634d012137b6ddd1239df2a..62a4dffbfd2ba772ccca5d85a153e044d4692477 100644 --- a/crates/collab_ui2/src/collab_panel.rs +++ b/crates/collab_ui2/src/collab_panel.rs @@ -179,8 +179,8 @@ use project::Fs; use serde_derive::{Deserialize, Serialize}; use settings::{Settings, SettingsStore}; use ui::{ - h_stack, v_stack, Avatar, Button, Color, ContextMenu, Icon, IconButton, IconElement, IconSize, Label, List, - ListHeader, ListItem, Toggle, Tooltip, + h_stack, v_stack, Avatar, Button, Color, ContextMenu, Icon, IconButton, IconElement, IconSize, + Label, List, ListHeader, ListItem, Tooltip, }; use util::{maybe, ResultExt, TryFutureExt}; use workspace::{ @@ -2505,7 +2505,7 @@ impl CollabPanel { .when_some(button, |el, button| el.right_button(button)) .selected(is_selected) .when(can_collapse, |el| { - el.toggle(ui::Toggle::Toggled(is_collapsed)).on_toggle( + el.toggle(Some(is_collapsed)).on_toggle( cx.listener(move |this, _, cx| this.toggle_section_expanded(section, cx)), ) }); @@ -2757,9 +2757,8 @@ impl CollabPanel { .map(|channel| channel.visibility) == Some(proto::ChannelVisibility::Public); let other_selected = self.selected_channel().map(|channel| channel.id) == Some(channel.id); - let disclosed = has_children - .then(|| !self.collapsed_channels.binary_search(&channel.id).is_ok()) - .unwrap_or(false); + let disclosed = + has_children.then(|| !self.collapsed_channels.binary_search(&channel.id).is_ok()); let has_messages_notification = channel.unseen_message_id.is_some(); let has_notes_notification = channel.unseen_note_version.is_some(); @@ -2874,11 +2873,7 @@ impl CollabPanel { ), ), ) - .toggle(if has_children { - Toggle::Toggled(disclosed) - } else { - Toggle::NotToggleable - }) + .toggle(disclosed) .on_toggle( cx.listener(move |this, _, cx| { this.toggle_channel_collapsed(channel_id, cx) diff --git a/crates/ui2/src/components/disclosure.rs b/crates/ui2/src/components/disclosure.rs index eafa11c6ea37bde0361025166ceaf208448a3791..b3736f36a004a2d63bc8613913ad8ae720e47df9 100644 --- a/crates/ui2/src/components/disclosure.rs +++ b/crates/ui2/src/components/disclosure.rs @@ -3,29 +3,22 @@ use std::rc::Rc; use gpui::ClickEvent; use crate::prelude::*; -use crate::{Color, Icon, IconButton, IconSize, ToggleState, Toggleable}; +use crate::{Color, Icon, IconButton, IconSize}; #[derive(IntoElement)] pub struct Disclosure { - state: ToggleState, + is_open: bool, on_toggle: Option>, } impl Disclosure { - pub fn new(state: ToggleState) -> Self { + pub fn new(is_open: bool) -> Self { Self { - state, + is_open, on_toggle: None, } } - pub fn from_toggleable(toggleable: Toggleable) -> Option { - match toggleable { - Toggleable::Toggleable(state) => Some(Self::new(state)), - Toggleable::NotToggleable => None, - } - } - pub fn on_toggle( mut self, handler: impl Into>>, @@ -41,9 +34,10 @@ impl RenderOnce for Disclosure { fn render(self, _cx: &mut WindowContext) -> Self::Rendered { IconButton::new( "toggle", - match self.state { - ToggleState::Toggled => Icon::ChevronDown, - ToggleState::NotToggled => Icon::ChevronRight, + if self.is_open { + Icon::ChevronDown + } else { + Icon::ChevronRight }, ) .color(Color::Muted) diff --git a/crates/ui2/src/components/list.rs b/crates/ui2/src/components/list.rs index 51d3ad8ecbd27cc7abf2245c22a1398782ce971a..f5eb2eb44bf6ef2ff17a161af025cc503f331fe9 100644 --- a/crates/ui2/src/components/list.rs +++ b/crates/ui2/src/components/list.rs @@ -7,7 +7,7 @@ use gpui::{AnyElement, Div}; use smallvec::SmallVec; use crate::prelude::*; -use crate::{v_stack, Label, ToggleState, Toggleable}; +use crate::{v_stack, Label}; pub use list_header::*; pub use list_item::*; @@ -20,7 +20,7 @@ pub struct List { /// Defaults to "No items" empty_message: SharedString, header: Option, - toggle: Toggleable, + toggle: Option, children: SmallVec<[AnyElement; 2]>, } @@ -29,7 +29,7 @@ impl List { Self { empty_message: "No items".into(), header: None, - toggle: Toggleable::NotToggleable, + toggle: None, children: SmallVec::new(), } } @@ -44,7 +44,7 @@ impl List { self } - pub fn toggle(mut self, toggle: Toggleable) -> Self { + pub fn toggle(mut self, toggle: Option) -> Self { self.toggle = toggle; self } @@ -66,7 +66,7 @@ impl RenderOnce for List { .children(self.header.map(|header| header)) .map(|this| match (self.children.is_empty(), self.toggle) { (false, _) => this.children(self.children), - (true, Toggleable::Toggleable(ToggleState::NotToggled)) => this, + (true, Some(false)) => this, (true, _) => this.child(Label::new(self.empty_message.clone()).color(Color::Muted)), }) } diff --git a/crates/ui2/src/components/list/list_header.rs b/crates/ui2/src/components/list/list_header.rs index 70c746d077d961bec9ed6529c91ea7a0d6d79a6d..a205de62206939dc3954560b59c1aed0d86a4207 100644 --- a/crates/ui2/src/components/list/list_header.rs +++ b/crates/ui2/src/components/list/list_header.rs @@ -3,7 +3,7 @@ use std::rc::Rc; use gpui::{ClickEvent, Div}; use crate::prelude::*; -use crate::{h_stack, Disclosure, Icon, IconButton, IconElement, IconSize, Label, Toggleable}; +use crate::{h_stack, Disclosure, Icon, IconButton, IconElement, IconSize, Label}; pub enum ListHeaderMeta { Tools(Vec), @@ -17,7 +17,7 @@ pub struct ListHeader { label: SharedString, left_icon: Option, meta: Option, - toggle: Toggleable, + toggle: Option, on_toggle: Option>, inset: bool, selected: bool, @@ -30,13 +30,13 @@ impl ListHeader { left_icon: None, meta: None, inset: false, - toggle: Toggleable::NotToggleable, + toggle: None, on_toggle: None, selected: false, } } - pub fn toggle(mut self, toggle: Toggleable) -> Self { + pub fn toggle(mut self, toggle: Option) -> Self { self.toggle = toggle; self } @@ -114,8 +114,8 @@ impl RenderOnce for ListHeader { .child(Label::new(self.label.clone()).color(Color::Muted)), ) .children( - Disclosure::from_toggleable(self.toggle) - .map(|disclosure| disclosure.on_toggle(self.on_toggle)), + self.toggle + .map(|is_open| Disclosure::new(is_open).on_toggle(self.on_toggle)), ), ) .child(meta), diff --git a/crates/ui2/src/components/list/list_item.rs b/crates/ui2/src/components/list/list_item.rs index feb123c8cccc5847f78f8973a7eb2eadd05e0ee4..d8630289a79ea6f54ae501722344135df4c077a8 100644 --- a/crates/ui2/src/components/list/list_item.rs +++ b/crates/ui2/src/components/list/list_item.rs @@ -6,7 +6,7 @@ use gpui::{ use smallvec::SmallVec; use crate::prelude::*; -use crate::{Avatar, Disclosure, GraphicSlot, Icon, IconElement, IconSize, Toggleable}; +use crate::{Avatar, Disclosure, GraphicSlot, Icon, IconElement, IconSize}; #[derive(IntoElement)] pub struct ListItem { @@ -17,7 +17,7 @@ pub struct ListItem { indent_level: usize, indent_step_size: Pixels, left_slot: Option, - toggle: Toggleable, + toggle: Option, inset: bool, on_click: Option>, on_toggle: Option>, @@ -33,7 +33,7 @@ impl ListItem { indent_level: 0, indent_step_size: px(12.), left_slot: None, - toggle: Toggleable::NotToggleable, + toggle: None, inset: false, on_click: None, on_secondary_mouse_down: None, @@ -70,7 +70,7 @@ impl ListItem { self } - pub fn toggle(mut self, toggle: Toggleable) -> Self { + pub fn toggle(mut self, toggle: Option) -> Self { self.toggle = toggle; self } @@ -151,8 +151,8 @@ impl RenderOnce for ListItem { .items_center() .relative() .children( - Disclosure::from_toggleable(self.toggle) - .map(|disclosure| disclosure.on_toggle(self.on_toggle)), + self.toggle + .map(|is_open| Disclosure::new(is_open).on_toggle(self.on_toggle)), ) .map(|this| match self.left_slot { Some(GraphicSlot::Icon(i)) => this.child( diff --git a/crates/ui2/src/components/stories/disclosure.rs b/crates/ui2/src/components/stories/disclosure.rs index f08bd43f4e083fbb5bea2c4cd1a5ec1f81bc1cd7..7a2c4194562b0696c0c303a70172b3bac96eedb4 100644 --- a/crates/ui2/src/components/stories/disclosure.rs +++ b/crates/ui2/src/components/stories/disclosure.rs @@ -2,7 +2,7 @@ use gpui::{Div, Render}; use story::Story; use crate::prelude::*; -use crate::{Disclosure, ToggleState}; +use crate::Disclosure; pub struct DisclosureStory; @@ -13,8 +13,8 @@ impl Render for DisclosureStory { Story::container() .child(Story::title_for::()) .child(Story::label("Toggled")) - .child(Disclosure::new(ToggleState::Toggled)) + .child(Disclosure::new(true)) .child(Story::label("Not Toggled")) - .child(Disclosure::new(ToggleState::NotToggled)) + .child(Disclosure::new(false)) } } diff --git a/crates/ui2/src/toggleable.rs b/crates/ui2/src/toggleable.rs deleted file mode 100644 index 99c2df0b0dd830d2270b80f69cd57ff05f1d948a..0000000000000000000000000000000000000000 --- a/crates/ui2/src/toggleable.rs +++ /dev/null @@ -1,38 +0,0 @@ -/// Whether an element is able to be toggled. -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)] -pub enum Toggleable { - Toggleable(ToggleState), - NotToggleable, -} - -/// The current state of a [`Toggleable`] element. -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)] -pub enum ToggleState { - Toggled, - NotToggled, -} - -impl ToggleState { - /// Returns whether an entry is toggled. - pub fn is_toggled(&self) -> bool { - match self { - ToggleState::Toggled => true, - ToggleState::NotToggled => false, - } - } -} - -impl From for ToggleState { - fn from(toggled: bool) -> Self { - match toggled { - true => Self::Toggled, - false => Self::NotToggled, - } - } -} - -impl From for bool { - fn from(value: ToggleState) -> Self { - value.is_toggled() - } -} diff --git a/crates/ui2/src/ui2.rs b/crates/ui2/src/ui2.rs index 997abe4bd6b100e221d9bc9df42d0034070cf3fd..6c5669741be05d2bdbf895d991c5e6a8f301e02f 100644 --- a/crates/ui2/src/ui2.rs +++ b/crates/ui2/src/ui2.rs @@ -20,7 +20,6 @@ pub mod prelude; mod selectable; mod styled_ext; mod styles; -mod toggleable; pub mod utils; pub use clickable::*; @@ -31,4 +30,3 @@ pub use prelude::*; pub use selectable::*; pub use styled_ext::*; pub use styles::*; -pub use toggleable::*;