Forego using dispatch_action for click handlers

This commit is contained in:
Piotr Osiewicz 2023-12-11 15:32:28 +01:00
parent 38d844ab66
commit 66e0650f75

View File

@ -1748,9 +1748,9 @@ impl Render for ProjectSearchBar {
.tooltip(|cx| {
Tooltip::for_action("Toggle filters", &ToggleFilters, cx)
})
.on_click(|_, cx| {
cx.dispatch_action(ToggleFilters.boxed_clone())
})
.on_click(cx.listener(|this, _, cx| {
this.toggle_filters(cx);
}))
.selected(
self.active_project_search
.as_ref()
@ -1771,9 +1771,14 @@ impl Render for ProjectSearchBar {
)
})
.selected(self.is_option_enabled(SearchOptions::CASE_SENSITIVE, cx))
.on_click(|_, cx| {
cx.dispatch_action(ToggleCaseSensitive.boxed_clone())
}),
.on_click(cx.listener(
|this, _, cx| {
this.toggle_search_option(
SearchOptions::CASE_SENSITIVE,
cx,
);
},
)),
)
.child(
IconButton::new("project-search-whole-word", Icon::WholeWord)
@ -1785,9 +1790,9 @@ impl Render for ProjectSearchBar {
)
})
.selected(self.is_option_enabled(SearchOptions::WHOLE_WORD, cx))
.on_click(|_, cx| {
cx.dispatch_action(ToggleWholeWord.boxed_clone())
}),
.on_click(cx.listener(|this, _, cx| {
this.toggle_search_option(SearchOptions::WHOLE_WORD, cx);
})),
),
)
.border_2()
@ -1823,9 +1828,9 @@ impl Render for ProjectSearchBar {
.child(
Button::new("project-search-text-button", "Text")
.selected(search.current_mode == SearchMode::Text)
.on_click(|_, cx| {
cx.dispatch_action(ActivateTextMode.boxed_clone())
})
.on_click(cx.listener(|this, _, cx| {
this.activate_search_mode(SearchMode::Text, cx)
}))
.tooltip(|cx| {
Tooltip::for_action("Toggle text search", &ActivateTextMode, cx)
}),
@ -1833,9 +1838,9 @@ impl Render for ProjectSearchBar {
.child(
Button::new("project-search-regex-button", "Regex")
.selected(search.current_mode == SearchMode::Regex)
.on_click(|_, cx| {
cx.dispatch_action(ActivateRegexMode.boxed_clone())
})
.on_click(cx.listener(|this, _, cx| {
this.activate_search_mode(SearchMode::Regex, cx)
}))
.tooltip(|cx| {
Tooltip::for_action(
"Toggle regular expression search",
@ -1847,9 +1852,9 @@ impl Render for ProjectSearchBar {
)
.child(
IconButton::new("project-search-toggle-replace", Icon::Replace)
.on_click(|_, cx| {
cx.dispatch_action(ToggleReplace.boxed_clone());
})
.on_click(cx.listener(|this, _, cx| {
this.toggle_replace(&ToggleReplace, cx);
}))
.tooltip(|cx| Tooltip::for_action("Toggle replace", &ToggleReplace, cx)),
),
);
@ -1869,37 +1874,52 @@ impl Render for ProjectSearchBar {
.when(search.replace_enabled, |this| {
this.children([
IconButton::new("project-search-replace-next", Icon::ReplaceNext)
.on_click(|_, cx| {
cx.dispatch_action(ReplaceNext.boxed_clone());
})
.on_click(cx.listener(|this, _, cx| {
if let Some(search) = this.active_project_search.as_ref() {
search.update(cx, |this, cx| {
this.replace_next(&ReplaceNext, cx);
})
}
}))
.tooltip(|cx| Tooltip::for_action("Replace next match", &ReplaceNext, cx)),
IconButton::new("project-search-replace-all", Icon::ReplaceAll)
.on_click(|_, cx| {
cx.dispatch_action(ReplaceAll.boxed_clone());
})
.on_click(cx.listener(|this, _, cx| {
if let Some(search) = this.active_project_search.as_ref() {
search.update(cx, |this, cx| {
this.replace_all(&ReplaceAll, cx);
})
}
}))
.tooltip(|cx| Tooltip::for_action("Replace all matches", &ReplaceAll, cx)),
])
})
.when_some(search.active_match_index, |this, index| {
let match_quantity = search.model.read(cx).match_ranges.len();
debug_assert!(match_quantity > index);
this.child(
IconButton::new("project-search-select-all", Icon::SelectAll)
.on_click(|_, cx| cx.dispatch_action(SelectAll.boxed_clone()))
.tooltip(|cx| Tooltip::for_action("Select all matches", &SelectAll, cx)),
)
.child(Label::new(format!("{index}/{match_quantity}")))
this.child(Label::new(format!("{index}/{match_quantity}")))
})
.children([
IconButton::new("project-search-prev-match", Icon::ChevronLeft)
.disabled(search.active_match_index.is_none())
.on_click(|_, cx| cx.dispatch_action(SelectPrevMatch.boxed_clone()))
.on_click(cx.listener(|this, _, cx| {
if let Some(search) = this.active_project_search.as_ref() {
search.update(cx, |this, cx| {
this.select_match(Direction::Prev, cx);
})
}
}))
.tooltip(|cx| {
Tooltip::for_action("Go to previous match", &SelectPrevMatch, cx)
}),
IconButton::new("project-search-next-match", Icon::ChevronRight)
.disabled(search.active_match_index.is_none())
.on_click(|_, cx| cx.dispatch_action(SelectNextMatch.boxed_clone()))
.on_click(cx.listener(|this, _, cx| {
if let Some(search) = this.active_project_search.as_ref() {
search.update(cx, |this, cx| {
this.select_match(Direction::Next, cx);
})
}
}))
.tooltip(|cx| Tooltip::for_action("Go to next match", &SelectNextMatch, cx)),
]);
h_stack()