Clean up language model selector (#26134)
This PR does some cleanup for the language model selector after https://github.com/zed-industries/zed/pull/26090. Release Notes: - N/A
This commit is contained in:
parent
3975d8ea93
commit
728c161e8d
5 changed files with 48 additions and 42 deletions
|
@ -1567,7 +1567,6 @@ impl Render for PromptEditor {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
let fs_clone = self.fs.clone();
|
|
||||||
|
|
||||||
h_flex()
|
h_flex()
|
||||||
.key_context("PromptEditor")
|
.key_context("PromptEditor")
|
||||||
|
@ -1590,12 +1589,15 @@ impl Render for PromptEditor {
|
||||||
.w(gutter_dimensions.full_width() + (gutter_dimensions.margin / 2.0))
|
.w(gutter_dimensions.full_width() + (gutter_dimensions.margin / 2.0))
|
||||||
.justify_center()
|
.justify_center()
|
||||||
.gap_2()
|
.gap_2()
|
||||||
.child(inline_language_model_selector(move |model, cx| {
|
.child(inline_language_model_selector({
|
||||||
update_settings_file::<AssistantSettings>(
|
let fs = self.fs.clone();
|
||||||
fs_clone.clone(),
|
move |model, cx| {
|
||||||
cx,
|
update_settings_file::<AssistantSettings>(
|
||||||
move |settings, _| settings.set_model(model.clone()),
|
fs.clone(),
|
||||||
);
|
cx,
|
||||||
|
move |settings, _| settings.set_model(model.clone()),
|
||||||
|
);
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
.map(|el| {
|
.map(|el| {
|
||||||
let CodegenStatus::Error(error) = self.codegen.read(cx).status(cx) else {
|
let CodegenStatus::Error(error) = self.codegen.read(cx).status(cx) else {
|
||||||
|
|
|
@ -624,8 +624,6 @@ impl Render for PromptEditor {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let fs_clone = self.fs.clone();
|
|
||||||
|
|
||||||
h_flex()
|
h_flex()
|
||||||
.bg(cx.theme().colors().editor_background)
|
.bg(cx.theme().colors().editor_background)
|
||||||
.border_y_1()
|
.border_y_1()
|
||||||
|
@ -643,12 +641,15 @@ impl Render for PromptEditor {
|
||||||
.w_12()
|
.w_12()
|
||||||
.justify_center()
|
.justify_center()
|
||||||
.gap_2()
|
.gap_2()
|
||||||
.child(inline_language_model_selector(move |model, cx| {
|
.child(inline_language_model_selector({
|
||||||
update_settings_file::<AssistantSettings>(
|
let fs = self.fs.clone();
|
||||||
fs_clone.clone(),
|
move |model, cx| {
|
||||||
cx,
|
update_settings_file::<AssistantSettings>(
|
||||||
move |settings, _| settings.set_model(model.clone()),
|
fs.clone(),
|
||||||
);
|
cx,
|
||||||
|
move |settings, _| settings.set_model(model.clone()),
|
||||||
|
);
|
||||||
|
}
|
||||||
}))
|
}))
|
||||||
.children(
|
.children(
|
||||||
if let CodegenStatus::Error(error) = &self.codegen.read(cx).status {
|
if let CodegenStatus::Error(error) = &self.codegen.read(cx).status {
|
||||||
|
|
|
@ -33,17 +33,19 @@ impl AssistantModelSelector {
|
||||||
|
|
||||||
impl Render for AssistantModelSelector {
|
impl Render for AssistantModelSelector {
|
||||||
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
|
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
|
||||||
let fs_clone = self.fs.clone();
|
|
||||||
assistant_language_model_selector(
|
assistant_language_model_selector(
|
||||||
self.focus_handle.clone(),
|
self.focus_handle.clone(),
|
||||||
Some(self.menu_handle.clone()),
|
Some(self.menu_handle.clone()),
|
||||||
cx,
|
cx,
|
||||||
move |model, cx| {
|
{
|
||||||
update_settings_file::<AssistantSettings>(
|
let fs = self.fs.clone();
|
||||||
fs_clone.clone(),
|
move |model, cx| {
|
||||||
cx,
|
update_settings_file::<AssistantSettings>(
|
||||||
move |settings, _| settings.set_model(model.clone()),
|
fs.clone(),
|
||||||
);
|
cx,
|
||||||
|
move |settings, _| settings.set_model(model.clone()),
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2818,7 +2818,6 @@ impl Render for ContextEditor {
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
let fs_clone = self.fs.clone();
|
|
||||||
|
|
||||||
let language_model_selector = self.language_model_selector.clone();
|
let language_model_selector = self.language_model_selector.clone();
|
||||||
v_flex()
|
v_flex()
|
||||||
|
@ -2877,12 +2876,17 @@ impl Render for ContextEditor {
|
||||||
self.editor().focus_handle(cx),
|
self.editor().focus_handle(cx),
|
||||||
Some(self.language_model_selector.clone()),
|
Some(self.language_model_selector.clone()),
|
||||||
cx,
|
cx,
|
||||||
move |model, cx| {
|
{
|
||||||
update_settings_file::<AssistantSettings>(
|
let fs = self.fs.clone();
|
||||||
fs_clone.clone(),
|
move |model, cx| {
|
||||||
cx,
|
update_settings_file::<AssistantSettings>(
|
||||||
move |settings, _| settings.set_model(model.clone()),
|
fs.clone(),
|
||||||
);
|
cx,
|
||||||
|
move |settings, _| {
|
||||||
|
settings.set_model(model.clone())
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
))),
|
))),
|
||||||
)
|
)
|
||||||
|
|
|
@ -484,17 +484,17 @@ impl PickerDelegate for LanguageModelPickerDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn inline_language_model_selector(
|
pub fn inline_language_model_selector(
|
||||||
f: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
|
on_model_changed: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
|
||||||
) -> AnyElement {
|
) -> PopoverMenu<LanguageModelSelector> {
|
||||||
let f = Rc::new(f);
|
let on_model_changed = Rc::new(on_model_changed);
|
||||||
PopoverMenu::new("popover-button")
|
PopoverMenu::new("popover-button")
|
||||||
.menu(move |window, cx| {
|
.menu(move |window, cx| {
|
||||||
Some(cx.new(|cx| {
|
Some(cx.new(|cx| {
|
||||||
LanguageModelSelector::new(
|
LanguageModelSelector::new(
|
||||||
{
|
{
|
||||||
let f = f.clone();
|
let on_model_changed = on_model_changed.clone();
|
||||||
move |model, cx| {
|
move |model, cx| {
|
||||||
f(model, cx);
|
on_model_changed(model, cx);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
window,
|
window,
|
||||||
|
@ -524,36 +524,34 @@ pub fn inline_language_model_selector(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.anchor(gpui::Corner::TopRight)
|
.anchor(gpui::Corner::TopRight)
|
||||||
// .when_some(menu_handle, |el, handle| el.with_handle(handle))
|
|
||||||
.offset(gpui::Point {
|
.offset(gpui::Point {
|
||||||
x: px(0.0),
|
x: px(0.0),
|
||||||
y: px(-2.0),
|
y: px(-2.0),
|
||||||
})
|
})
|
||||||
.into_any_element()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn assistant_language_model_selector(
|
pub fn assistant_language_model_selector(
|
||||||
keybinding_target: FocusHandle,
|
keybinding_target: FocusHandle,
|
||||||
menu_handle: Option<PopoverMenuHandle<LanguageModelSelector>>,
|
menu_handle: Option<PopoverMenuHandle<LanguageModelSelector>>,
|
||||||
cx: &App,
|
cx: &App,
|
||||||
f: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
|
on_model_changed: impl Fn(Arc<dyn LanguageModel>, &App) + 'static,
|
||||||
) -> AnyElement {
|
) -> PopoverMenu<LanguageModelSelector> {
|
||||||
let active_model = LanguageModelRegistry::read_global(cx).active_model();
|
let active_model = LanguageModelRegistry::read_global(cx).active_model();
|
||||||
let model_name = match active_model {
|
let model_name = match active_model {
|
||||||
Some(model) => model.name().0,
|
Some(model) => model.name().0,
|
||||||
_ => SharedString::from("No model selected"),
|
_ => SharedString::from("No model selected"),
|
||||||
};
|
};
|
||||||
|
|
||||||
let f = Rc::new(f);
|
let on_model_changed = Rc::new(on_model_changed);
|
||||||
|
|
||||||
PopoverMenu::new("popover-button")
|
PopoverMenu::new("popover-button")
|
||||||
.menu(move |window, cx| {
|
.menu(move |window, cx| {
|
||||||
Some(cx.new(|cx| {
|
Some(cx.new(|cx| {
|
||||||
LanguageModelSelector::new(
|
LanguageModelSelector::new(
|
||||||
{
|
{
|
||||||
let f = f.clone();
|
let on_model_changed = on_model_changed.clone();
|
||||||
move |model, cx| {
|
move |model, cx| {
|
||||||
f(model, cx);
|
on_model_changed(model, cx);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
window,
|
window,
|
||||||
|
@ -594,5 +592,4 @@ pub fn assistant_language_model_selector(
|
||||||
x: px(0.0),
|
x: px(0.0),
|
||||||
y: px(-2.0),
|
y: px(-2.0),
|
||||||
})
|
})
|
||||||
.into_any_element()
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue