Compare commits

...

1 Commits

Author SHA1 Message Date
Bennet Bo Fenner
1dd21ad8f7 agent: Re-introduce preview when hovering selection in context strip 2025-04-25 12:16:32 +02:00

View File

@@ -1,7 +1,9 @@
use std::{rc::Rc, time::Duration};
use file_icons::FileIcons;
use gpui::{Animation, AnimationExt as _, ClickEvent, Entity, MouseButton, pulsating_between};
use gpui::{
Animation, AnimationExt as _, AnyView, ClickEvent, Entity, MouseButton, pulsating_between,
};
use project::Project;
use prompt_store::PromptStore;
use text::OffsetRangeExt;
@@ -167,14 +169,9 @@ impl RenderOnce for ContextPill {
.when_some(
context.render_preview.as_ref(),
|element, render_preview| {
element.hoverable_tooltip({
let render_preview = render_preview.clone();
move |_, cx| {
cx.new(|_| ContextPillPreview {
render_preview: render_preview.clone(),
})
.into()
}
let render_preview = render_preview.clone();
element.hoverable_tooltip(move |window, cx| {
render_preview(window, cx)
})
},
)
@@ -273,7 +270,7 @@ pub struct AddedContext {
pub tooltip: Option<SharedString>,
pub icon_path: Option<SharedString>,
pub status: ContextStatus,
pub render_preview: Option<Rc<dyn Fn(&mut Window, &mut App) -> AnyElement + 'static>>,
pub render_preview: Option<Rc<dyn Fn(&mut Window, &mut App) -> AnyView + 'static>>,
}
impl AddedContext {
@@ -380,21 +377,27 @@ impl AddedContext {
tooltip: None,
icon_path: FileIcons::get_icon(&full_path, cx),
status: ContextStatus::Ready,
render_preview: None,
/*
render_preview: Some(Rc::new({
let content = selection_context.text.clone();
let buffer = selection_context.buffer.clone();
let range = selection_context.range.clone();
move |_, cx| {
div()
.id("context-pill-selection-preview")
.overflow_scroll()
.max_w_128()
.max_h_96()
.child(Label::new(content.clone()).buffer_font(cx))
.into_any_element()
let text: SharedString = buffer
.read(cx)
.text_for_range(range.clone())
.collect::<String>()
.into();
ContextPillPreview::new(cx, move |_, cx| {
div()
.id("context-pill-selection-preview")
.overflow_scroll()
.max_w_128()
.max_h_96()
.child(Label::new(text.clone()).buffer_font(cx))
.into_any_element()
})
.into()
}
})),
*/
context,
})
}
@@ -466,11 +469,15 @@ impl AddedContext {
},
render_preview: Some(Rc::new({
let image = image_context.original_image.clone();
move |_, _| {
gpui::img(image.clone())
.max_w_96()
.max_h_96()
.into_any_element()
move |_, cx| {
let image = image.clone();
ContextPillPreview::new(cx, move |_, _| {
gpui::img(image.clone())
.max_w_96()
.max_h_96()
.into_any_element()
})
.into()
}
})),
context,
@@ -480,7 +487,18 @@ impl AddedContext {
}
struct ContextPillPreview {
render_preview: Rc<dyn Fn(&mut Window, &mut App) -> AnyElement>,
render_preview: Box<dyn Fn(&mut Window, &mut App) -> AnyElement>,
}
impl ContextPillPreview {
fn new(
cx: &mut App,
render_preview: impl Fn(&mut Window, &mut App) -> AnyElement + 'static,
) -> Entity<Self> {
cx.new(|_| Self {
render_preview: Box::new(render_preview),
})
}
}
impl Render for ContextPillPreview {