Add chevron icons to the dropdown menus in the LSP log pane (#34149)
A bunch of dropdown menus in this pane that weren't clear that were menus without chevrons in it. :) <img src="https://github.com/user-attachments/assets/fc701a5d-ed89-4de3-a76e-06d22ad9e366" width="600"/> Release Notes: - N/A
This commit is contained in:
parent
de627ba04d
commit
e30e4381de
1 changed files with 62 additions and 41 deletions
|
@ -1331,6 +1331,7 @@ impl Render for LspLogToolbarItemView {
|
||||||
let Some(log_view) = self.log_view.clone() else {
|
let Some(log_view) = self.log_view.clone() else {
|
||||||
return div();
|
return div();
|
||||||
};
|
};
|
||||||
|
|
||||||
let (menu_rows, current_server_id) = log_view.update(cx, |log_view, cx| {
|
let (menu_rows, current_server_id) = log_view.update(cx, |log_view, cx| {
|
||||||
let menu_rows = log_view.menu_items(cx).unwrap_or_default();
|
let menu_rows = log_view.menu_items(cx).unwrap_or_default();
|
||||||
let current_server_id = log_view.current_server_id;
|
let current_server_id = log_view.current_server_id;
|
||||||
|
@ -1344,6 +1345,7 @@ impl Render for LspLogToolbarItemView {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let available_language_servers: Vec<_> = menu_rows
|
let available_language_servers: Vec<_> = menu_rows
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|row| {
|
.map(|row| {
|
||||||
|
@ -1355,21 +1357,28 @@ impl Render for LspLogToolbarItemView {
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let log_toolbar_view = cx.entity().clone();
|
let log_toolbar_view = cx.entity().clone();
|
||||||
|
|
||||||
let lsp_menu = PopoverMenu::new("LspLogView")
|
let lsp_menu = PopoverMenu::new("LspLogView")
|
||||||
.anchor(Corner::TopLeft)
|
.anchor(Corner::TopLeft)
|
||||||
.trigger(Button::new(
|
.trigger(
|
||||||
"language_server_menu_header",
|
Button::new(
|
||||||
current_server
|
"language_server_menu_header",
|
||||||
.as_ref()
|
current_server
|
||||||
.map(|row| {
|
.as_ref()
|
||||||
Cow::Owned(format!(
|
.map(|row| {
|
||||||
"{} ({})",
|
Cow::Owned(format!(
|
||||||
row.server_name.0, row.worktree_root_name,
|
"{} ({})",
|
||||||
))
|
row.server_name.0, row.worktree_root_name,
|
||||||
})
|
))
|
||||||
.unwrap_or_else(|| "No server selected".into()),
|
})
|
||||||
))
|
.unwrap_or_else(|| "No server selected".into()),
|
||||||
|
)
|
||||||
|
.icon(IconName::ChevronDown)
|
||||||
|
.icon_size(IconSize::Small)
|
||||||
|
.icon_color(Color::Muted),
|
||||||
|
)
|
||||||
.menu({
|
.menu({
|
||||||
let log_view = log_view.clone();
|
let log_view = log_view.clone();
|
||||||
move |window, cx| {
|
move |window, cx| {
|
||||||
|
@ -1413,6 +1422,7 @@ impl Render for LspLogToolbarItemView {
|
||||||
.into()
|
.into()
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let view_selector = current_server.map(|server| {
|
let view_selector = current_server.map(|server| {
|
||||||
let server_id = server.server_id;
|
let server_id = server.server_id;
|
||||||
let is_remote = server.server_kind.is_remote();
|
let is_remote = server.server_kind.is_remote();
|
||||||
|
@ -1420,10 +1430,12 @@ impl Render for LspLogToolbarItemView {
|
||||||
let log_view = log_view.clone();
|
let log_view = log_view.clone();
|
||||||
PopoverMenu::new("LspViewSelector")
|
PopoverMenu::new("LspViewSelector")
|
||||||
.anchor(Corner::TopLeft)
|
.anchor(Corner::TopLeft)
|
||||||
.trigger(Button::new(
|
.trigger(
|
||||||
"language_server_menu_header",
|
Button::new("language_server_menu_header", server.selected_entry.label())
|
||||||
server.selected_entry.label(),
|
.icon(IconName::ChevronDown)
|
||||||
))
|
.icon_size(IconSize::Small)
|
||||||
|
.icon_color(Color::Muted),
|
||||||
|
)
|
||||||
.menu(move |window, cx| {
|
.menu(move |window, cx| {
|
||||||
let log_toolbar_view = log_toolbar_view.clone();
|
let log_toolbar_view = log_toolbar_view.clone();
|
||||||
let log_view = log_view.clone();
|
let log_view = log_view.clone();
|
||||||
|
@ -1494,11 +1506,14 @@ impl Render for LspLogToolbarItemView {
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
h_flex()
|
h_flex()
|
||||||
.size_full()
|
.size_full()
|
||||||
|
.gap_1()
|
||||||
.justify_between()
|
.justify_between()
|
||||||
.child(
|
.child(
|
||||||
h_flex()
|
h_flex()
|
||||||
|
.gap_0p5()
|
||||||
.child(lsp_menu)
|
.child(lsp_menu)
|
||||||
.children(view_selector)
|
.children(view_selector)
|
||||||
.child(
|
.child(
|
||||||
|
@ -1508,10 +1523,15 @@ impl Render for LspLogToolbarItemView {
|
||||||
div().child(
|
div().child(
|
||||||
PopoverMenu::new("lsp-trace-level-menu")
|
PopoverMenu::new("lsp-trace-level-menu")
|
||||||
.anchor(Corner::TopLeft)
|
.anchor(Corner::TopLeft)
|
||||||
.trigger(Button::new(
|
.trigger(
|
||||||
"language_server_trace_level_selector",
|
Button::new(
|
||||||
"Trace level",
|
"language_server_trace_level_selector",
|
||||||
))
|
"Trace level",
|
||||||
|
)
|
||||||
|
.icon(IconName::ChevronDown)
|
||||||
|
.icon_size(IconSize::Small)
|
||||||
|
.icon_color(Color::Muted),
|
||||||
|
)
|
||||||
.menu({
|
.menu({
|
||||||
let log_view = log_view.clone();
|
let log_view = log_view.clone();
|
||||||
|
|
||||||
|
@ -1571,10 +1591,15 @@ impl Render for LspLogToolbarItemView {
|
||||||
div().child(
|
div().child(
|
||||||
PopoverMenu::new("lsp-log-level-menu")
|
PopoverMenu::new("lsp-log-level-menu")
|
||||||
.anchor(Corner::TopLeft)
|
.anchor(Corner::TopLeft)
|
||||||
.trigger(Button::new(
|
.trigger(
|
||||||
"language_server_log_level_selector",
|
Button::new(
|
||||||
"Log level",
|
"language_server_log_level_selector",
|
||||||
))
|
"Log level",
|
||||||
|
)
|
||||||
|
.icon(IconName::ChevronDown)
|
||||||
|
.icon_size(IconSize::Small)
|
||||||
|
.icon_color(Color::Muted),
|
||||||
|
)
|
||||||
.menu({
|
.menu({
|
||||||
let log_view = log_view.clone();
|
let log_view = log_view.clone();
|
||||||
|
|
||||||
|
@ -1635,23 +1660,19 @@ impl Render for LspLogToolbarItemView {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
div()
|
Button::new("clear_log_button", "Clear").on_click(cx.listener(
|
||||||
.child(
|
|this, _, window, cx| {
|
||||||
Button::new("clear_log_button", "Clear").on_click(cx.listener(
|
if let Some(log_view) = this.log_view.as_ref() {
|
||||||
|this, _, window, cx| {
|
log_view.update(cx, |log_view, cx| {
|
||||||
if let Some(log_view) = this.log_view.as_ref() {
|
log_view.editor.update(cx, |editor, cx| {
|
||||||
log_view.update(cx, |log_view, cx| {
|
editor.set_read_only(false);
|
||||||
log_view.editor.update(cx, |editor, cx| {
|
editor.clear(window, cx);
|
||||||
editor.set_read_only(false);
|
editor.set_read_only(true);
|
||||||
editor.clear(window, cx);
|
});
|
||||||
editor.set_read_only(true);
|
})
|
||||||
});
|
}
|
||||||
})
|
},
|
||||||
}
|
)),
|
||||||
},
|
|
||||||
)),
|
|
||||||
)
|
|
||||||
.ml_2(),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue