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,
|
elements::ButtonSide,
|
||||||
history::SearchHistory,
|
history::SearchHistory,
|
||||||
mode::{SearchMode, Side},
|
mode::{SearchMode, Side},
|
||||||
|
search_bar::render_nav_button,
|
||||||
ActivateRegexMode, CycleMode, NextHistoryQuery, PreviousHistoryQuery, SearchOptions,
|
ActivateRegexMode, CycleMode, NextHistoryQuery, PreviousHistoryQuery, SearchOptions,
|
||||||
SelectNextMatch, SelectPrevMatch, ToggleCaseSensitive, ToggleWholeWord,
|
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(
|
fn render_option_button_icon(
|
||||||
&self,
|
&self,
|
||||||
icon: &'static str,
|
icon: &'static str,
|
||||||
@ -1747,6 +1663,18 @@ impl View for ProjectSearchBar {
|
|||||||
|
|
||||||
let semantic_index = SemanticIndex::enabled(cx)
|
let semantic_index = SemanticIndex::enabled(cx)
|
||||||
.then(|| self.render_search_mode_button(SearchMode::Semantic, 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()
|
Flex::row()
|
||||||
.with_child(
|
.with_child(
|
||||||
Flex::column()
|
Flex::column()
|
||||||
@ -1755,16 +1683,8 @@ impl View for ProjectSearchBar {
|
|||||||
.align_children_center()
|
.align_children_center()
|
||||||
.with_child(
|
.with_child(
|
||||||
Flex::row()
|
Flex::row()
|
||||||
.with_child(self.render_nav_button(
|
.with_child(nav_button_for_direction("<", Direction::Prev))
|
||||||
"<",
|
.with_child(nav_button_for_direction(">", Direction::Next))
|
||||||
Direction::Prev,
|
|
||||||
cx,
|
|
||||||
))
|
|
||||||
.with_child(self.render_nav_button(
|
|
||||||
">",
|
|
||||||
Direction::Next,
|
|
||||||
cx,
|
|
||||||
))
|
|
||||||
.aligned(),
|
.aligned(),
|
||||||
)
|
)
|
||||||
.with_children(matches)
|
.with_children(matches)
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
use gpui::{
|
use gpui::{
|
||||||
elements::{MouseEventHandler, Svg},
|
elements::{Flex, Label, MouseEventHandler, ParentElement, Svg},
|
||||||
platform::{CursorStyle, MouseButton},
|
platform::{CursorStyle, MouseButton},
|
||||||
scene::MouseClick,
|
scene::MouseClick,
|
||||||
Action, AnyElement, Element, EventContext, View, ViewContext,
|
Action, AnyElement, Element, EventContext, View, ViewContext,
|
||||||
};
|
};
|
||||||
|
use workspace::searchable::Direction;
|
||||||
|
|
||||||
|
use crate::{elements::ButtonSide, SelectNextMatch, SelectPrevMatch};
|
||||||
|
|
||||||
pub(super) fn render_close_button<V: View>(
|
pub(super) fn render_close_button<V: View>(
|
||||||
theme: &theme::Search,
|
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)
|
.with_tooltip::<CloseButton>(0, tooltip.to_string(), dismiss_action, tooltip_style, cx)
|
||||||
.into_any()
|
.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