mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-15 06:40:17 +00:00
Add dismiss button to project search
This commit is contained in:
parent
9889449a81
commit
7a1f40405a
4 changed files with 57 additions and 37 deletions
|
@ -222,7 +222,12 @@ impl View for BufferSearchBar {
|
|||
)
|
||||
.flex(1., true),
|
||||
)
|
||||
.with_child(self.render_close_button(&theme.search, cx))
|
||||
.with_child(super::search_bar::render_close_button(
|
||||
&theme.search,
|
||||
cx,
|
||||
|_, this, cx| this.dismiss(&Default::default(), cx),
|
||||
Some(Box::new(Dismiss)),
|
||||
))
|
||||
.contained()
|
||||
.with_style(theme.search.container)
|
||||
.into_any_named("search bar")
|
||||
|
@ -518,41 +523,6 @@ impl BufferSearchBar {
|
|||
.into_any()
|
||||
}
|
||||
|
||||
fn render_close_button(
|
||||
&self,
|
||||
theme: &theme::Search,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> AnyElement<Self> {
|
||||
let tooltip = "Dismiss Buffer Search";
|
||||
let tooltip_style = theme::current(cx).tooltip.clone();
|
||||
|
||||
enum CloseButton {}
|
||||
MouseEventHandler::<CloseButton, _>::new(0, cx, |state, _| {
|
||||
let style = theme.dismiss_button.style_for(state);
|
||||
Svg::new("icons/x_mark_8.svg")
|
||||
.with_color(style.color)
|
||||
.constrained()
|
||||
.with_width(style.icon_width)
|
||||
.aligned()
|
||||
.constrained()
|
||||
.with_width(style.button_width)
|
||||
.contained()
|
||||
.with_style(style.container)
|
||||
})
|
||||
.on_click(MouseButton::Left, move |_, this, cx| {
|
||||
this.dismiss(&Default::default(), cx)
|
||||
})
|
||||
.with_cursor_style(CursorStyle::PointingHand)
|
||||
.with_tooltip::<CloseButton>(
|
||||
0,
|
||||
tooltip.to_string(),
|
||||
Some(Box::new(Dismiss)),
|
||||
tooltip_style,
|
||||
cx,
|
||||
)
|
||||
.into_any()
|
||||
}
|
||||
|
||||
fn deploy(pane: &mut Pane, action: &Deploy, cx: &mut ViewContext<Pane>) {
|
||||
let mut propagate_action = true;
|
||||
if let Some(search_bar) = pane.toolbar().read(cx).item_of_type::<BufferSearchBar>() {
|
||||
|
|
|
@ -362,10 +362,12 @@ impl ProjectSearch {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum ViewEvent {
|
||||
UpdateTab,
|
||||
Activate,
|
||||
EditorEvent(editor::Event),
|
||||
Dismiss,
|
||||
}
|
||||
|
||||
impl Entity for ProjectSearchView {
|
||||
|
@ -547,7 +549,9 @@ impl Item for ProjectSearchView {
|
|||
.then(|| query_text.into())
|
||||
.or_else(|| Some("Project Search".into()))
|
||||
}
|
||||
|
||||
fn should_close_item_on_event(event: &Self::Event) -> bool {
|
||||
event == &Self::Event::Dismiss
|
||||
}
|
||||
fn act_as_type<'a>(
|
||||
&'a self,
|
||||
type_id: TypeId,
|
||||
|
@ -679,6 +683,7 @@ impl Item for ProjectSearchView {
|
|||
smallvec::smallvec![ItemEvent::UpdateBreadcrumbs, ItemEvent::UpdateTab]
|
||||
}
|
||||
ViewEvent::EditorEvent(editor_event) => Editor::to_item_events(editor_event),
|
||||
ViewEvent::Dismiss => smallvec::smallvec![ItemEvent::CloseItem],
|
||||
_ => SmallVec::new(),
|
||||
}
|
||||
}
|
||||
|
@ -2010,6 +2015,16 @@ impl View for ProjectSearchBar {
|
|||
.with_child(self.render_search_mode_button(SearchMode::Text, cx))
|
||||
.with_children(semantic_index)
|
||||
.with_child(self.render_search_mode_button(SearchMode::Regex, cx))
|
||||
.with_child(super::search_bar::render_close_button(
|
||||
&theme.search,
|
||||
cx,
|
||||
|_, this, cx| {
|
||||
if let Some(search) = this.active_project_search.as_mut() {
|
||||
search.update(cx, |_, cx| cx.emit(ViewEvent::Dismiss))
|
||||
}
|
||||
},
|
||||
None,
|
||||
))
|
||||
.constrained()
|
||||
.with_height(theme.workspace.toolbar.height)
|
||||
.contained()
|
||||
|
|
|
@ -7,6 +7,7 @@ use smallvec::SmallVec;
|
|||
|
||||
pub mod buffer_search;
|
||||
pub mod project_search;
|
||||
pub(crate) mod search_bar;
|
||||
|
||||
pub fn init(cx: &mut AppContext) {
|
||||
buffer_search::init(cx);
|
||||
|
|
34
crates/search/src/search_bar.rs
Normal file
34
crates/search/src/search_bar.rs
Normal file
|
@ -0,0 +1,34 @@
|
|||
use gpui::{
|
||||
elements::{MouseEventHandler, Svg},
|
||||
platform::{CursorStyle, MouseButton},
|
||||
scene::MouseClick,
|
||||
Action, AnyElement, Element, EventContext, View, ViewContext,
|
||||
};
|
||||
|
||||
pub(super) fn render_close_button<V: View>(
|
||||
theme: &theme::Search,
|
||||
cx: &mut ViewContext<V>,
|
||||
on_click: impl Fn(MouseClick, &mut V, &mut EventContext<V>) + 'static,
|
||||
dismiss_action: Option<Box<dyn Action>>,
|
||||
) -> AnyElement<V> {
|
||||
let tooltip = "Dismiss Buffer Search";
|
||||
let tooltip_style = theme::current(cx).tooltip.clone();
|
||||
|
||||
enum CloseButton {}
|
||||
MouseEventHandler::<CloseButton, _>::new(0, cx, |state, _| {
|
||||
let style = theme.dismiss_button.style_for(state);
|
||||
Svg::new("icons/x_mark_8.svg")
|
||||
.with_color(style.color)
|
||||
.constrained()
|
||||
.with_width(style.icon_width)
|
||||
.aligned()
|
||||
.constrained()
|
||||
.with_width(style.button_width)
|
||||
.contained()
|
||||
.with_style(style.container)
|
||||
})
|
||||
.on_click(MouseButton::Left, on_click)
|
||||
.with_cursor_style(CursorStyle::PointingHand)
|
||||
.with_tooltip::<CloseButton>(0, tooltip.to_string(), dismiss_action, tooltip_style, cx)
|
||||
.into_any()
|
||||
}
|
Loading…
Reference in a new issue