
This PR reorganizes the components in the `ui2` crate. The distinction between "elements" and "components" is now gone, with all of the reusable components living under `components/`. The components that we built while prototyping but will eventually live in other crates currently reside in the `to_extract/` module. Release Notes: - N/A
43 lines
1.1 KiB
Rust
43 lines
1.1 KiB
Rust
use gpui2::{Div, Render, View, VisualContext};
|
|
|
|
use crate::prelude::*;
|
|
use crate::{h_stack, Icon, IconButton, IconColor, Input};
|
|
|
|
#[derive(Clone)]
|
|
pub struct BufferSearch {
|
|
is_replace_open: bool,
|
|
}
|
|
|
|
impl BufferSearch {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
is_replace_open: false,
|
|
}
|
|
}
|
|
|
|
fn toggle_replace(&mut self, cx: &mut ViewContext<Self>) {
|
|
self.is_replace_open = !self.is_replace_open;
|
|
|
|
cx.notify();
|
|
}
|
|
|
|
pub fn view(cx: &mut WindowContext) -> View<Self> {
|
|
cx.build_view(|cx| Self::new())
|
|
}
|
|
}
|
|
|
|
impl Render for BufferSearch {
|
|
type Element = Div<Self>;
|
|
|
|
fn render(&mut self, cx: &mut ViewContext<Self>) -> Div<Self> {
|
|
h_stack().bg(cx.theme().colors().toolbar).p_2().child(
|
|
h_stack().child(Input::new("Search")).child(
|
|
IconButton::<Self>::new("replace", Icon::Replace)
|
|
.when(self.is_replace_open, |this| this.color(IconColor::Accent))
|
|
.on_click(|buffer_search, cx| {
|
|
buffer_search.toggle_replace(cx);
|
|
}),
|
|
),
|
|
)
|
|
}
|
|
}
|