Skip to main content

EditorPane

Struct EditorPane 

Source
pub struct EditorPane { /* private fields */ }
Expand description

Editor shell with replaceable editable content, status chrome, and an attachment preview band.

Implementations§

Source§

impl EditorPane

Source

pub fn new() -> Self

Creates an editor shell with a default EditInput.

Examples found in repository?
examples/chat/demo.rs (line 765)
752	pub fn new(ctx: &UiContext) -> Self {
753		let editor = Rc::new(RefCell::new({
754			let mut editor = Editor::new(EditorOptions::default());
755			editor.set_completion(Box::new(SlashCommands::new(demo_commands())));
756			editor
757		}));
758		let edit_outcome = Rc::new(RefCell::new(None));
759		let work = Rc::new(RefCell::new(WorkState {
760			working: true,
761			since:   Duration::ZERO,
762			fade:    Tween::settled(GREEN),
763		}));
764		let model = Rc::new(RefCell::new(Str::new_static("Fable 5++")));
765		let pane = EditorPane::new()
766			.input(DemoInput::new(Rc::clone(&editor), Rc::clone(&edit_outcome)))
767			.status(DemoStatus::new(Rc::clone(&work), Rc::clone(&model), ctx.charset));
768		let attachments = pane.attachments();
769		let editor_ui = Ui::from_root(pane, 0, ctx.clone());
770		Self {
771			started_at: Instant::now(),
772			ctx: ctx.clone(),
773			cancel_hint: ctx.charset.icon(Icon::Cancellable),
774			editor_ui,
775			editor,
776			edit_outcome,
777			work,
778			last_working: true,
779			model,
780			attachments,
781			transcript: vec![Entry::Command],
782			drawn_entries: 0,
783			transcript_rows: 0,
784			appended_messages: 0,
785			emitted_shards: 0,
786			last_viewport: Size::new(0, 0),
787			height_floor: 0,
788			frame: Frame::new(Size::new(0, 0)),
789			live_panel: None,
790			live_rows: std::array::from_fn(|_| LiveRowCache::new()),
791			live_label_scratch: StrMut::with_capacity(40),
792			right_inset: 0,
793			switch_requested: false,
794		}
795	}
Source

pub fn input(self, input: impl IntoComponent) -> Self

Replaces the editable leaf.

Examples found in repository?
examples/chat/demo.rs (line 766)
752	pub fn new(ctx: &UiContext) -> Self {
753		let editor = Rc::new(RefCell::new({
754			let mut editor = Editor::new(EditorOptions::default());
755			editor.set_completion(Box::new(SlashCommands::new(demo_commands())));
756			editor
757		}));
758		let edit_outcome = Rc::new(RefCell::new(None));
759		let work = Rc::new(RefCell::new(WorkState {
760			working: true,
761			since:   Duration::ZERO,
762			fade:    Tween::settled(GREEN),
763		}));
764		let model = Rc::new(RefCell::new(Str::new_static("Fable 5++")));
765		let pane = EditorPane::new()
766			.input(DemoInput::new(Rc::clone(&editor), Rc::clone(&edit_outcome)))
767			.status(DemoStatus::new(Rc::clone(&work), Rc::clone(&model), ctx.charset));
768		let attachments = pane.attachments();
769		let editor_ui = Ui::from_root(pane, 0, ctx.clone());
770		Self {
771			started_at: Instant::now(),
772			ctx: ctx.clone(),
773			cancel_hint: ctx.charset.icon(Icon::Cancellable),
774			editor_ui,
775			editor,
776			edit_outcome,
777			work,
778			last_working: true,
779			model,
780			attachments,
781			transcript: vec![Entry::Command],
782			drawn_entries: 0,
783			transcript_rows: 0,
784			appended_messages: 0,
785			emitted_shards: 0,
786			last_viewport: Size::new(0, 0),
787			height_floor: 0,
788			frame: Frame::new(Size::new(0, 0)),
789			live_panel: None,
790			live_rows: std::array::from_fn(|_| LiveRowCache::new()),
791			live_label_scratch: StrMut::with_capacity(40),
792			right_inset: 0,
793			switch_requested: false,
794		}
795	}
Source

pub fn status(self, status: impl IntoComponent) -> Self

Adds or replaces the status band above the editable content.

Examples found in repository?
examples/chat/demo.rs (line 767)
752	pub fn new(ctx: &UiContext) -> Self {
753		let editor = Rc::new(RefCell::new({
754			let mut editor = Editor::new(EditorOptions::default());
755			editor.set_completion(Box::new(SlashCommands::new(demo_commands())));
756			editor
757		}));
758		let edit_outcome = Rc::new(RefCell::new(None));
759		let work = Rc::new(RefCell::new(WorkState {
760			working: true,
761			since:   Duration::ZERO,
762			fade:    Tween::settled(GREEN),
763		}));
764		let model = Rc::new(RefCell::new(Str::new_static("Fable 5++")));
765		let pane = EditorPane::new()
766			.input(DemoInput::new(Rc::clone(&editor), Rc::clone(&edit_outcome)))
767			.status(DemoStatus::new(Rc::clone(&work), Rc::clone(&model), ctx.charset));
768		let attachments = pane.attachments();
769		let editor_ui = Ui::from_root(pane, 0, ctx.clone());
770		Self {
771			started_at: Instant::now(),
772			ctx: ctx.clone(),
773			cancel_hint: ctx.charset.icon(Icon::Cancellable),
774			editor_ui,
775			editor,
776			edit_outcome,
777			work,
778			last_working: true,
779			model,
780			attachments,
781			transcript: vec![Entry::Command],
782			drawn_entries: 0,
783			transcript_rows: 0,
784			appended_messages: 0,
785			emitted_shards: 0,
786			last_viewport: Size::new(0, 0),
787			height_floor: 0,
788			frame: Frame::new(Size::new(0, 0)),
789			live_panel: None,
790			live_rows: std::array::from_fn(|_| LiveRowCache::new()),
791			live_label_scratch: StrMut::with_capacity(40),
792			right_inset: 0,
793			switch_requested: false,
794		}
795	}
Source

pub fn attachments(&self) -> Attachments

Shared handle to this composer’s staged attachments.

Examples found in repository?
examples/chat/demo.rs (line 768)
752	pub fn new(ctx: &UiContext) -> Self {
753		let editor = Rc::new(RefCell::new({
754			let mut editor = Editor::new(EditorOptions::default());
755			editor.set_completion(Box::new(SlashCommands::new(demo_commands())));
756			editor
757		}));
758		let edit_outcome = Rc::new(RefCell::new(None));
759		let work = Rc::new(RefCell::new(WorkState {
760			working: true,
761			since:   Duration::ZERO,
762			fade:    Tween::settled(GREEN),
763		}));
764		let model = Rc::new(RefCell::new(Str::new_static("Fable 5++")));
765		let pane = EditorPane::new()
766			.input(DemoInput::new(Rc::clone(&editor), Rc::clone(&edit_outcome)))
767			.status(DemoStatus::new(Rc::clone(&work), Rc::clone(&model), ctx.charset));
768		let attachments = pane.attachments();
769		let editor_ui = Ui::from_root(pane, 0, ctx.clone());
770		Self {
771			started_at: Instant::now(),
772			ctx: ctx.clone(),
773			cancel_hint: ctx.charset.icon(Icon::Cancellable),
774			editor_ui,
775			editor,
776			edit_outcome,
777			work,
778			last_working: true,
779			model,
780			attachments,
781			transcript: vec![Entry::Command],
782			drawn_entries: 0,
783			transcript_rows: 0,
784			appended_messages: 0,
785			emitted_shards: 0,
786			last_viewport: Size::new(0, 0),
787			height_floor: 0,
788			frame: Frame::new(Size::new(0, 0)),
789			live_panel: None,
790			live_rows: std::array::from_fn(|_| LiveRowCache::new()),
791			live_label_scratch: StrMut::with_capacity(40),
792			right_inset: 0,
793			switch_requested: false,
794		}
795	}
Source

pub fn with(self, prop: Prop, value: impl Into<PropValue>) -> Self

Sets one editor-shell property.

Source

pub fn with_str(self, prop: Prop, value: &str) -> Self

Sets one editor-shell property from a string.

Trait Implementations§

Source§

impl Component for EditorPane

Source§

fn props(&self) -> &Props

Component properties.
Source§

fn props_mut(&mut self) -> &mut Props

Mutable component properties.
Source§

fn slot(&self) -> Slot

Stable identity.
Source§

fn children(&self) -> &[Cached]

Every owned child, including embedded inactive subtrees.
Source§

fn children_mut(&mut self) -> &mut [Cached]

Every owned child, including embedded inactive subtrees.
Source§

fn ring(&self, out: &mut Vec<Slot>)

Appends focusable slots in document order.
Source§

fn measure(&mut self, ctx: &UiContext) -> (u16, u16)

Content width bounds, exclusive of this component’s chrome.
Source§

fn height(&mut self, ctx: &UiContext, width: u16) -> u16

Content height at the supplied content width.
Source§

fn place(&mut self, ctx: &UiContext, rect: Rect)

Places children inside the supplied content rectangle.
Source§

fn paint(&mut self, pc: &mut PaintCtx<'_>, rect: Rect)

Paints content inside the supplied content rectangle.
Source§

fn value(&self, out: &mut Map<String, Value>)

Adds this component’s named value to an output object.
Source§

fn set_text(&mut self, ctx: &UiContext, text: Str) -> bool

Replaces text content where supported.
Source§

fn kind(&self) -> &'static str

Concrete implementation name for debug tooling; defaults to the type’s full path via std::any::type_name. The OMP_TUI_DEBUG tree dump trims it to the trailing path segment.
Source§

fn paints_border(&self) -> bool

Whether Cached should paint this component’s border property as chrome.
Source§

fn paints_background(&self) -> bool

Whether Cached should paint this component’s background property across its rectangle. Components that own a partial background fill opt out and paint it themselves.
Source§

fn gradient_bounds(&self, content: Rect) -> Option<Rect>

A narrowed projection frame for two-stop fg=/bg= ramps, given the painted content rectangle. None projects across the full chrome; content-sized leaves (crate::components::Pre) return their authored extent so the ramp completes across the glyphs instead of the stretched layout width.
Source§

fn resize_tail(&mut self) -> Option<ResizeTail<'_>>

Opt-in viewport-tail provider for resize drags: children a drag frame may compose bottom-up, with the vertical gap between them. None — the default — renders this component whole. Read more
Source§

fn validation_error(&self) -> Option<String>

A validation error blocking submission — an unmet required or match= constraint owned by this component’s internal records; None when valid. Component-level props are checked by the caller.
Source§

fn stretch_in_row(&self) -> bool

Whether a row should stretch this component across its cross axis.
Source§

fn focusable(&self) -> bool

Whether this component contributes its own slot to the focus ring. The default honors the focus flag, so any container can opt into keyboard navigation from markup.
Source§

fn enter(&mut self, forward: bool)

Positions internal selection when focus enters from either direction.
Source§

fn key(&mut self, ec: &mut EventCtx<'_>, key: Key) -> Flow

Handles a keyboard event.
Source§

fn mouse( &mut self, ec: &mut EventCtx<'_>, tag: HitTag, at: (u16, u16), rect: Rect, mouse: Mouse, ) -> Flow

Handles a mouse gesture over one of this component’s hit regions.
Source§

fn paste(&mut self, ec: &mut EventCtx<'_>, text: &str) -> Flow

Pastes text into this component: Flow::Consumed repaints, Flow::Event additionally surfaces a crate::UiEvent, and Flow::Skip leaves the paste unhandled.
Source§

fn paste_raw(&mut self, ec: &mut EventCtx<'_>, text: &str) -> Flow

Pastes text verbatim, bypassing any smart-paste interpretation the component applies in Component::paste (drop classification, large-paste collapse). Defaults to Component::paste for components without such interpretation.
Source§

impl Default for EditorPane

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoChildren for T
where T: IntoComponent,

Source§

fn extend_children(self, out: &mut Vec<Cached>)

Appends all represented children to out.
Source§

impl<T> IntoComponent for T
where T: Component + 'static,

Source§

fn into_component(self) -> Box<dyn Component>

Performs the conversion.
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.