mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-20 02:47:34 +03:00
Move nav buttons generation to search_bar
This commit is contained in:
parent
c53554ead3
commit
31a56720d9
@ -2,6 +2,7 @@ use crate::{
|
||||
elements::ButtonSide,
|
||||
history::SearchHistory,
|
||||
mode::{SearchMode, Side},
|
||||
search_bar::render_nav_button,
|
||||
ActivateRegexMode, CycleMode, NextHistoryQuery, PreviousHistoryQuery, SearchOptions,
|
||||
SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleWholeWord,
|
||||
};
|
||||
@ -1322,91 +1323,6 @@ impl ProjectSearchBar {
|
||||
}
|
||||
}
|
||||
|
||||
fn render_nav_button(
|
||||
&self,
|
||||
icon: &'static str,
|
||||
direction: Direction,
|
||||
cx: &mut ViewContext<Self>,
|
||||
) -> AnyElement<Self> {
|
||||
let action: Box<dyn Action>;
|
||||
let tooltip;
|
||||
|
||||
match direction {
|
||||
Direction::Prev => {
|
||||
action = Box::new(SelectPrevMatch);
|
||||
tooltip = "Select Previous Match";
|
||||
}
|
||||
Direction::Next => {
|
||||
action = Box::new(SelectNextMatch);
|
||||
tooltip = "Select Next Match";
|
||||
}
|
||||
};
|
||||
let tooltip_style = theme::current(cx).tooltip.clone();
|
||||
|
||||
enum NavButton {}
|
||||
MouseEventHandler::<NavButton, _>::new(direction as usize, cx, |state, cx| {
|
||||
let theme = theme::current(cx);
|
||||
let mut style = theme.search.nav_button.style_for(state).clone();
|
||||
|
||||
match direction {
|
||||
Direction::Prev => style.container.border.left = false,
|
||||
Direction::Next => style.container.border.right = false,
|
||||
};
|
||||
let label = Label::new(icon, style.label.clone())
|
||||
.contained()
|
||||
.with_style(style.container.clone());
|
||||
match direction {
|
||||
Direction::Prev => Flex::row()
|
||||
.with_child(
|
||||
ButtonSide::left(
|
||||
style
|
||||
.clone()
|
||||
.container
|
||||
.background_color
|
||||
.unwrap_or_else(gpui::color::Color::transparent_black),
|
||||
)
|
||||
.with_border(style.container.border.width, style.container.border.color)
|
||||
.contained()
|
||||
.constrained()
|
||||
.with_max_width(theme.search.mode_filling_width),
|
||||
)
|
||||
.with_child(label)
|
||||
.constrained()
|
||||
.with_height(theme.workspace.toolbar.height),
|
||||
Direction::Next => Flex::row()
|
||||
.with_child(label)
|
||||
.with_child(
|
||||
ButtonSide::right(
|
||||
style
|
||||
.clone()
|
||||
.container
|
||||
.background_color
|
||||
.unwrap_or_else(gpui::color::Color::transparent_black),
|
||||
)
|
||||
.with_border(style.container.border.width, style.container.border.color)
|
||||
.contained()
|
||||
.constrained()
|
||||
.with_max_width(theme.search.mode_filling_width),
|
||||
)
|
||||
.constrained()
|
||||
.with_height(theme.workspace.toolbar.height),
|
||||
}
|
||||
})
|
||||
.on_click(MouseButton::Left, move |_, this, cx| {
|
||||
if let Some(search) = this.active_project_search.as_ref() {
|
||||
search.update(cx, |search, cx| search.select_match(direction, cx));
|
||||
}
|
||||
})
|
||||
.with_cursor_style(CursorStyle::PointingHand)
|
||||
.with_tooltip::<NavButton>(
|
||||
direction as usize,
|
||||
tooltip.to_string(),
|
||||
Some(action),
|
||||
tooltip_style,
|
||||
cx,
|
||||
)
|
||||
.into_any()
|
||||
}
|
||||
fn render_option_button_icon(
|
||||
&self,
|
||||
icon: &'static str,
|
||||
@ -1747,6 +1663,18 @@ impl View for ProjectSearchBar {
|
||||
|
||||
let semantic_index = SemanticIndex::enabled(cx)
|
||||
.then(|| self.render_search_mode_button(SearchMode::Semantic, cx));
|
||||
let mut nav_button_for_direction = |label, direction| {
|
||||
render_nav_button(
|
||||
label,
|
||||
direction,
|
||||
move |_, this, cx| {
|
||||
if let Some(search) = this.active_project_search.as_ref() {
|
||||
search.update(cx, |search, cx| search.select_match(direction, cx));
|
||||
}
|
||||
},
|
||||
cx,
|
||||
)
|
||||
};
|
||||
Flex::row()
|
||||
.with_child(
|
||||
Flex::column()
|
||||
@ -1755,16 +1683,8 @@ impl View for ProjectSearchBar {
|
||||
.align_children_center()
|
||||
.with_child(
|
||||
Flex::row()
|
||||
.with_child(self.render_nav_button(
|
||||
"<",
|
||||
Direction::Prev,
|
||||
cx,
|
||||
))
|
||||
.with_child(self.render_nav_button(
|
||||
">",
|
||||
Direction::Next,
|
||||
cx,
|
||||
))
|
||||
.with_child(nav_button_for_direction("<", Direction::Prev))
|
||||
.with_child(nav_button_for_direction(">", Direction::Next))
|
||||
.aligned(),
|
||||
)
|
||||
.with_children(matches)
|
||||
|
@ -1,9 +1,12 @@
|
||||
use gpui::{
|
||||
elements::{MouseEventHandler, Svg},
|
||||
elements::{Flex, Label, MouseEventHandler, ParentElement, Svg},
|
||||
platform::{CursorStyle, MouseButton},
|
||||
scene::MouseClick,
|
||||
Action, AnyElement, Element, EventContext, View, ViewContext,
|
||||
};
|
||||
use workspace::searchable::Direction;
|
||||
|
||||
use crate::{elements::ButtonSide, SelectNextMatch, SelectPrevMatch};
|
||||
|
||||
pub(super) fn render_close_button<V: View>(
|
||||
theme: &theme::Search,
|
||||
@ -32,3 +35,91 @@ pub(super) fn render_close_button<V: View>(
|
||||
.with_tooltip::<CloseButton>(0, tooltip.to_string(), dismiss_action, tooltip_style, cx)
|
||||
.into_any()
|
||||
}
|
||||
|
||||
pub(super) fn render_nav_button<V: View>(
|
||||
icon: &'static str,
|
||||
direction: Direction,
|
||||
on_click: impl Fn(MouseClick, &mut V, &mut EventContext<V>) + 'static,
|
||||
cx: &mut ViewContext<V>,
|
||||
) -> AnyElement<V> {
|
||||
let action: Box<dyn Action>;
|
||||
let tooltip;
|
||||
|
||||
match direction {
|
||||
Direction::Prev => {
|
||||
action = Box::new(SelectPrevMatch);
|
||||
tooltip = "Select Previous Match";
|
||||
}
|
||||
Direction::Next => {
|
||||
action = Box::new(SelectNextMatch);
|
||||
tooltip = "Select Next Match";
|
||||
}
|
||||
};
|
||||
let tooltip_style = theme::current(cx).tooltip.clone();
|
||||
|
||||
enum NavButton {}
|
||||
MouseEventHandler::<NavButton, _>::new(direction as usize, cx, |state, cx| {
|
||||
let theme = theme::current(cx);
|
||||
let mut style = theme.search.nav_button.style_for(state).clone();
|
||||
|
||||
match direction {
|
||||
Direction::Prev => style.container.border.left = false,
|
||||
Direction::Next => style.container.border.right = false,
|
||||
};
|
||||
let label = Label::new(icon, style.label.clone())
|
||||
.contained()
|
||||
.with_style(style.container.clone());
|
||||
match direction {
|
||||
Direction::Prev => Flex::row()
|
||||
.with_child(
|
||||
ButtonSide::left(
|
||||
style
|
||||
.clone()
|
||||
.container
|
||||
.background_color
|
||||
.unwrap_or_else(gpui::color::Color::transparent_black),
|
||||
)
|
||||
.with_border(style.container.border.width, style.container.border.color)
|
||||
.contained()
|
||||
.constrained()
|
||||
.with_max_width(theme.search.mode_filling_width),
|
||||
)
|
||||
.with_child(label)
|
||||
.constrained()
|
||||
.with_height(theme.workspace.toolbar.height),
|
||||
Direction::Next => Flex::row()
|
||||
.with_child(label)
|
||||
.with_child(
|
||||
ButtonSide::right(
|
||||
style
|
||||
.clone()
|
||||
.container
|
||||
.background_color
|
||||
.unwrap_or_else(gpui::color::Color::transparent_black),
|
||||
)
|
||||
.with_border(style.container.border.width, style.container.border.color)
|
||||
.contained()
|
||||
.constrained()
|
||||
.with_max_width(theme.search.mode_filling_width),
|
||||
)
|
||||
.constrained()
|
||||
.with_height(theme.workspace.toolbar.height),
|
||||
}
|
||||
})
|
||||
.on_click(
|
||||
MouseButton::Left,
|
||||
on_click, /*move |_, this, cx| {
|
||||
if let Some(search) = this.active_project_search.as_ref() {
|
||||
search.update(cx, |search, cx| search.select_match(direction, cx));
|
||||
}*/
|
||||
)
|
||||
.with_cursor_style(CursorStyle::PointingHand)
|
||||
.with_tooltip::<NavButton>(
|
||||
direction as usize,
|
||||
tooltip.to_string(),
|
||||
Some(action),
|
||||
tooltip_style,
|
||||
cx,
|
||||
)
|
||||
.into_any()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user