From aa7254167a7512fc31392c615359a42f26b2934e Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Wed, 22 Mar 2023 15:31:21 +0200 Subject: [PATCH 1/5] Fix typo --- crates/language_selector/src/active_buffer_language.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/language_selector/src/active_buffer_language.rs b/crates/language_selector/src/active_buffer_language.rs index ce9fd5a3b0..3979ce292c 100644 --- a/crates/language_selector/src/active_buffer_language.rs +++ b/crates/language_selector/src/active_buffer_language.rs @@ -53,7 +53,7 @@ impl View for ActiveBufferLanguage { let active_language = if let Some(active_language) = self.active_language.as_ref() { active_language.to_string() } else { - "Unkown".to_string() + "Unknown".to_string() }; MouseEventHandler::::new(0, cx, |state, cx| { From d5bb2d13b83f7f0e7c0ca58acb5a7325729119ee Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Wed, 22 Mar 2023 16:13:58 +0200 Subject: [PATCH 2/5] Introduce terminal button count Co-Authored-By: Antonio Scandurra --- crates/project/src/terminals.rs | 3 ++- crates/terminal_view/src/terminal_button.rs | 25 ++++++++++++++++----- crates/theme/src/theme.rs | 12 +++++++++- crates/workspace/src/sidebar.rs | 4 ++-- styles/src/styleTree/statusBar.ts | 4 ++++ 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/crates/project/src/terminals.rs b/crates/project/src/terminals.rs index f7b4105dd2..0f3092ca41 100644 --- a/crates/project/src/terminals.rs +++ b/crates/project/src/terminals.rs @@ -43,11 +43,12 @@ impl Project { .push(terminal_handle.downgrade()); let id = terminal_handle.id(); - cx.observe_release(&terminal_handle, move |project, _terminal, _cx| { + cx.observe_release(&terminal_handle, move |project, _terminal, cx| { let handles = &mut project.terminals.local_handles; if let Some(index) = handles.iter().position(|terminal| terminal.id() == id) { handles.remove(index); + cx.notify(); } }) .detach(); diff --git a/crates/terminal_view/src/terminal_button.rs b/crates/terminal_view/src/terminal_button.rs index 8c723ad4d4..3943984405 100644 --- a/crates/terminal_view/src/terminal_button.rs +++ b/crates/terminal_view/src/terminal_button.rs @@ -56,13 +56,14 @@ impl View for TerminalButton { .unwrap_or(false); let has_terminals = !project.local_terminal_handles().is_empty(); + let terminal_count = project.local_terminal_handles().len() as i32; let theme = cx.global::().theme.clone(); Stack::new() .with_child( MouseEventHandler::::new(0, cx, { let theme = theme.clone(); - move |state, _| { + move |state, _cx| { let style = theme .workspace .status_bar @@ -70,10 +71,23 @@ impl View for TerminalButton { .item .style_for(state, active); - Svg::new("icons/terminal_12.svg") - .with_color(style.icon_color) + Flex::row() + .with_child( + Svg::new("icons/terminal_12.svg") + .with_color(style.icon_color) + .constrained() + .with_width(style.icon_size) + .aligned() + .named("terminals-icon"), + ) + .with_child( + Label::new(terminal_count.to_string(), style.label.text.clone()) + .contained() + .with_style(style.label.container) + .aligned() + .boxed(), + ) .constrained() - .with_width(style.icon_size) .with_height(style.icon_size) .contained() .with_style(style.container) @@ -112,8 +126,7 @@ impl View for TerminalButton { impl TerminalButton { pub fn new(workspace: ViewHandle, cx: &mut ViewContext) -> Self { - // When terminal moves, redraw so that the icon and toggle status matches. - cx.subscribe(&workspace, |_, _, _, cx| cx.notify()).detach(); + cx.observe(&workspace, |_, _, cx| cx.notify()).detach(); Self { workspace: workspace.downgrade(), popup_menu: cx.add_view(|cx| { diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 87de31f635..5650ae1886 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -299,6 +299,15 @@ pub struct StatusBar { pub diagnostic_message: Interactive, } +#[derive(Deserialize, Default)] +pub struct TerminalButton { + #[serde(flatten)] + pub container: ContainerStyle, + pub icon_color: Color, + pub icon_size: f32, + pub text: TextStyle, +} + #[derive(Deserialize, Default)] pub struct StatusBarSidebarButtons { pub group_left: ContainerStyle, @@ -340,12 +349,13 @@ pub struct Sidebar { pub container: ContainerStyle, } -#[derive(Clone, Copy, Deserialize, Default)] +#[derive(Clone, Deserialize, Default)] pub struct SidebarItem { #[serde(flatten)] pub container: ContainerStyle, pub icon_color: Color, pub icon_size: f32, + pub label: ContainedText, } #[derive(Deserialize, Default)] diff --git a/crates/workspace/src/sidebar.rs b/crates/workspace/src/sidebar.rs index 214f227757..37375b7e4a 100644 --- a/crates/workspace/src/sidebar.rs +++ b/crates/workspace/src/sidebar.rs @@ -230,7 +230,7 @@ impl View for SidebarButtons { let tooltip_style = theme.tooltip.clone(); let theme = &theme.workspace.status_bar.sidebar_buttons; let sidebar = self.sidebar.read(cx); - let item_style = theme.item; + let item_style = theme.item.clone(); let badge_style = theme.badge; let active_ix = sidebar.active_item_ix; let is_open = sidebar.is_open; @@ -254,7 +254,7 @@ impl View for SidebarButtons { sidebar_side, item_index: ix, }; - MouseEventHandler::::new(ix, cx, move |state, cx| { + MouseEventHandler::::new(ix, cx, |state, cx| { let is_active = is_open && ix == active_ix; let style = item_style.style_for(state, is_active); Stack::new() diff --git a/styles/src/styleTree/statusBar.ts b/styles/src/styleTree/statusBar.ts index b7e9696488..41961c4615 100644 --- a/styles/src/styleTree/statusBar.ts +++ b/styles/src/styleTree/statusBar.ts @@ -100,6 +100,10 @@ export default function statusBar(colorScheme: ColorScheme) { ...statusContainer, iconSize: 16, iconColor: foreground(layer, "variant"), + label: { + margin: { left: 6 }, + ...text(layer, "sans", { size: "sm" }), + }, hover: { iconColor: foreground(layer, "hovered"), background: background(layer, "variant"), From 15406ff2d9b4db6e172658fa09c8e9acd521996b Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Wed, 22 Mar 2023 16:31:42 +0200 Subject: [PATCH 3/5] Remove comment --- crates/terminal_view/src/terminal_button.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/terminal_view/src/terminal_button.rs b/crates/terminal_view/src/terminal_button.rs index 3943984405..83bce4d9f6 100644 --- a/crates/terminal_view/src/terminal_button.rs +++ b/crates/terminal_view/src/terminal_button.rs @@ -19,7 +19,6 @@ pub struct FocusTerminal { terminal_handle: WeakModelHandle, } -//actions!(terminal, [DeployTerminalMenu]); impl_internal_actions!(terminal, [FocusTerminal, DeployTerminalMenu]); pub fn init(cx: &mut MutableAppContext) { From bd1515cdd22b29b18639f46706b8dcfe2a001130 Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Wed, 22 Mar 2023 18:23:41 +0200 Subject: [PATCH 4/5] Only show count when we have terminals Co-Authored-By: Mikayla Maki --- crates/terminal_view/src/terminal_button.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/terminal_view/src/terminal_button.rs b/crates/terminal_view/src/terminal_button.rs index 83bce4d9f6..87f0a2deba 100644 --- a/crates/terminal_view/src/terminal_button.rs +++ b/crates/terminal_view/src/terminal_button.rs @@ -79,13 +79,13 @@ impl View for TerminalButton { .aligned() .named("terminals-icon"), ) - .with_child( + .with_children(has_terminals.then(|| { Label::new(terminal_count.to_string(), style.label.text.clone()) .contained() .with_style(style.label.container) .aligned() - .boxed(), - ) + .boxed() + })) .constrained() .with_height(style.icon_size) .contained() From fd9eff3a78a1f0d9bf1394f43f67f7124d0c955f Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Wed, 22 Mar 2023 19:28:06 +0200 Subject: [PATCH 5/5] Remove struct --- crates/theme/src/theme.rs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/crates/theme/src/theme.rs b/crates/theme/src/theme.rs index 5650ae1886..d64a1d2499 100644 --- a/crates/theme/src/theme.rs +++ b/crates/theme/src/theme.rs @@ -299,15 +299,6 @@ pub struct StatusBar { pub diagnostic_message: Interactive, } -#[derive(Deserialize, Default)] -pub struct TerminalButton { - #[serde(flatten)] - pub container: ContainerStyle, - pub icon_color: Color, - pub icon_size: f32, - pub text: TextStyle, -} - #[derive(Deserialize, Default)] pub struct StatusBarSidebarButtons { pub group_left: ContainerStyle,