mirror of
https://github.com/zed-industries/zed.git
synced 2026-06-01 22:43:18 +00:00
- **git_ui: Decouple git_ui from the recent_projects crate** - **Move git_ui closer to editor** Release Notes: - N/A
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
//! This crate provides UI components that can be used for form-like scenarios, such as a input and number field.
|
|
//!
|
|
//! It can't be located in the `ui` crate because it depends on `editor`.
|
|
//!
|
|
mod input_field;
|
|
|
|
use std::{
|
|
any::Any,
|
|
sync::{Arc, OnceLock},
|
|
};
|
|
|
|
use gpui::{FocusHandle, Subscription};
|
|
pub use input_field::*;
|
|
use ui::{AnyElement, App, Window};
|
|
|
|
pub trait ErasedEditor: 'static {
|
|
fn text(&self, cx: &App) -> String;
|
|
fn set_text(&self, text: &str, window: &mut Window, cx: &mut App);
|
|
fn clear(&self, window: &mut Window, cx: &mut App);
|
|
fn set_placeholder_text(&self, text: &str, window: &mut Window, _: &mut App);
|
|
fn move_selection_to_end(&self, window: &mut Window, _: &mut App);
|
|
fn set_masked(&self, masked: bool, window: &mut Window, cx: &mut App);
|
|
|
|
fn focus_handle(&self, cx: &App) -> FocusHandle;
|
|
|
|
fn subscribe(
|
|
&self,
|
|
callback: Box<dyn FnMut(ErasedEditorEvent, &mut Window, &mut App) + 'static>,
|
|
window: &mut Window,
|
|
cx: &mut App,
|
|
) -> Subscription;
|
|
fn render(&self, window: &mut Window, cx: &App) -> AnyElement;
|
|
fn as_any(&self) -> &dyn Any;
|
|
}
|
|
|
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
|
pub enum ErasedEditorEvent {
|
|
BufferEdited,
|
|
Blurred,
|
|
}
|
|
pub static ERASED_EDITOR_FACTORY: OnceLock<fn(&mut Window, &mut App) -> Arc<dyn ErasedEditor>> =
|
|
OnceLock::new();
|