Skip to main content

EditBox

Struct EditBox 

Source
pub struct EditBox<G: EditGuard = DefaultGuard<()>> { /* private fields */ }
Expand description

A text-edit box

A single- or multi-line editor for unformatted text. See also notes on EditField.

By default, the editor supports a single-line only; Self::with_multi_line and Self::with_class can be used to change this.

§Messages

SetValueText may be used to replace the entire text and ReplaceSelectedText may be used to replace selected text when this widget is editable. This triggers the action handlers EditGuard::edit followed by EditGuard::activate.

kas::messages::SetScrollOffset may be used to set the scroll offset.

Implementations§

Source§

impl<G: EditGuard> EditBox<G>

Source

pub fn new(guard: G) -> Self

Construct an EditBox with an EditGuard

Source

pub fn clear(&mut self, cx: &mut EventState)

Clear text contents and undo history

Source

pub fn pre_commit(&mut self)

Commit outstanding changes to the undo history

Call this before changing the text with set_str or set_string to commit changes to the undo history.

Source

pub fn set_str(&mut self, cx: &mut EventState, text: &str)

This does not interact with undo history; see also Self::clear, Self::pre_commit.

Source

pub fn set_string(&mut self, cx: &mut EventState, text: String)

Set text contents from a String

This does not interact with undo history; see also Self::clear, Self::pre_commit.

This method does not call action handlers on the EditGuard.

Source

pub fn replace_selected_text(&mut self, cx: &mut EventState, text: &str)

Replace selected text

This does not interact with undo history or call action handlers on the guard.

Source

pub fn guard(&self) -> &G

Access the edit guard

Source

pub fn guard_mut(&mut self) -> &mut G

Access the edit guard mutably

Source§

impl<A: 'static> EditBox<DefaultGuard<A>>

Source

pub fn text<S: ToString>(text: S) -> Self

Construct an EditBox with the given inital text (no event handling)

Source

pub fn string( value_fn: impl Fn(&A) -> String + 'static, ) -> EditBox<StringGuard<A>>

Construct a read-only EditBox displaying some String value

Source

pub fn parser<T: Debug + Display + FromStr, M: Debug + 'static>( value_fn: impl Fn(&A) -> T + 'static, msg_fn: impl Fn(T) -> M + 'static, ) -> EditBox<ParseGuard<A, T>>

Construct an EditBox for a parsable value (e.g. a number)

On update, value_fn is used to extract a value from input data which is then formatted as a string via Display. If, however, the input field has focus, the update is ignored.

On every edit, the guard attempts to parse the field’s input as type T via FromStr, caching the result and setting the error state.

On field activation and focus loss when a T value is cached (see previous paragraph), on_afl is used to construct a message to be emitted via EventCx::push. The cached value is then cleared to avoid sending duplicate messages.

Source

pub fn instant_parser<T: Debug + Display + FromStr, M: Debug + 'static>( value_fn: impl Fn(&A) -> T + 'static, msg_fn: impl Fn(T) -> M + 'static, ) -> EditBox<InstantParseGuard<A, T>>

Construct an EditBox for a parsable value (e.g. a number)

On update, value_fn is used to extract a value from input data which is then formatted as a string via Display. If, however, the input field has focus, the update is ignored.

On every edit, the guard attempts to parse the field’s input as type T via FromStr. On success, the result is converted to a message via on_afl then emitted via EventCx::push.

Source§

impl<A: 'static> EditBox<StringGuard<A>>

Source

pub fn with_msg<M>(self, msg_fn: impl Fn(&str) -> M + 'static) -> Self
where M: Debug + 'static,

Assign a message function for a String value

The msg_fn is called when the field is activated (Enter) and when it loses focus after content is changed.

This method sets self as editable (see Self::with_editable).

Source§

impl<G: EditGuard> EditBox<G>

Source

pub fn with_text(self, text: impl ToString) -> Self

Set the initial text (inline)

This method should only be used on a new EditBox.

Source

pub fn with_editable(self, editable: bool) -> Self

Set whether this widget is editable (inline)

Source

pub fn with_multi_line(self, multi_line: bool) -> Self

Set whether this EditBox uses multi-line mode

This setting has two effects: the vertical size allocation is increased and wrapping is enabled if true. Default: false.

This method is ineffective if the text class is set by Self::with_class to anything other than TextClass::Editor.

Source

pub fn with_class(self, class: TextClass) -> Self

Set the text class used

Source

pub fn set_lines(&mut self, min_lines: f32, ideal_lines: f32)

Adjust the height allocation

Source

pub fn with_lines(self, min_lines: f32, ideal_lines: f32) -> Self

Adjust the height allocation (inline)

Source

pub fn set_width_em(&mut self, min_em: f32, ideal_em: f32)

Adjust the width allocation

Source

pub fn with_width_em(self, min_em: f32, ideal_em: f32) -> Self

Adjust the width allocation (inline)

Methods from Deref<Target = Editor>§

Source

pub fn id_ref(&self) -> &Id

Get a reference to the widget’s identifier

Source

pub fn id(&self) -> Id

Get the widget’s identifier

Source

pub fn as_str(&self) -> &str

Get text contents

Source

pub fn clone_string(&self) -> String

Get the text contents as a String

Source

pub fn pre_commit(&mut self)

Commit outstanding changes to the undo history

Call this before changing the text with set_str or set_string to commit changes to the undo history.

Source

pub fn clear(&mut self, cx: &mut EventState)

Clear text contents and undo history

This method does not call any EditGuard actions; consider also calling EditField::call_guard_edit.

Source

pub fn set_str(&mut self, cx: &mut EventState, text: &str) -> bool

Set text contents from a str

This does not interact with undo history; see also Self::clear, Self::pre_commit.

This method does not call any EditGuard actions; consider also calling EditField::call_guard_edit.

Returns true if the text may have changed.

Source

pub fn set_string(&mut self, cx: &mut EventState, string: String) -> bool

Set text contents from a String

This does not interact with undo history or call action handlers on the guard.

This method clears the error state but does not call any EditGuard actions; consider also calling EditField::call_guard_edit.

Returns true if the text is ready and may have changed.

Source

pub fn replace_selected_text(&mut self, cx: &mut EventState, text: &str) -> bool

Replace selected text

This does not interact with undo history or call action handlers on the guard.

This method clears the error state but does not call any EditGuard actions; consider also calling EditField::call_guard_edit.

Returns true if the text is ready and may have changed.

Source

pub fn cursor_range(&self) -> CursorRange

Access the cursor index / selection range

Source

pub fn set_cursor_range(&mut self, range: impl Into<CursorRange>)

Set the cursor index / range

This does not interact with undo history or call action handlers on the guard.

Source

pub fn is_editable(&self) -> bool

Get whether this EditField is editable

Source

pub fn set_editable(&mut self, editable: bool)

Set whether this EditField is editable

Source

pub fn multi_line(&self) -> bool

True if the editor uses multi-line mode

Source

pub fn class(&self) -> TextClass

Get the text class used

Source

pub fn has_input_focus(&self) -> bool

Get whether the widget has input focus

This is true when the widget is has keyboard or IME focus.

Source

pub fn has_error(&self) -> bool

Get whether the input state is erroneous

Source

pub fn set_error( &mut self, cx: &mut EventState, message: Option<Cow<'static, str>>, )

Mark the input as erroneous with an optional message

This state should be set from EditGuard::edit when appropriate. The state is cleared immediately before calling EditGuard::edit and also in case a text is directly assigned (e.g. using Self::set_string).

When set, the input field’s background is drawn red. If a message is supplied, then a tooltip will be available on mouse-hover.

Trait Implementations§

Source§

impl<G> Debug for EditBox<G>
where G: Debug + EditGuard,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<G> Default for EditBox<G>
where G: Default + EditGuard,

Source§

fn default() -> Self

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

impl<G: EditGuard> Deref for EditBox<G>

Source§

type Target = Editor

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Editor

Dereferences the value.
Source§

impl<G: EditGuard> DerefMut for EditBox<G>

Source§

fn deref_mut(&mut self) -> &mut Editor

Mutably dereferences the value.
Source§

impl<G: EditGuard> Events for EditBox<G>

Source§

fn probe(&self, coord: Coord) -> Id

Probe a coordinate for a widget’s Id Read more
Source§

fn handle_event( &mut self, cx: &mut EventCx<'_>, _: &Self::Data, event: Event<'_>, ) -> IsUsed

Handle an Event Read more
Source§

fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &G::Data)

Handler for messages from children/descendants Read more
Source§

fn handle_resize( &mut self, cx: &mut ConfigCx<'_>, _: &Self::Data, ) -> Option<ActionResize>

Handler for resize requests Read more
Source§

fn handle_scroll(&mut self, cx: &mut EventCx<'_>, _: &G::Data, scroll: Scroll)

Handler for scrolling Read more
Source§

const REDRAW_ON_MOUSE_OVER: bool = false

Does this widget have a different appearance on mouse over? Read more
Source§

fn mouse_over_icon(&self) -> Option<CursorIcon>

The mouse pointer icon to use on mouse over Read more
Source§

fn make_child_id(&mut self, index: usize) -> Id

Make an identifier for a child Read more
Source§

fn configure(&mut self, cx: &mut ConfigCx<'_>)

Configure self Read more
Source§

fn post_configure(&mut self, cx: &mut ConfigCx<'_>)

Configure self (post-child-configuration actions) Read more
Source§

fn update(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)

Update self using input data Read more
Source§

fn recurse_indices(&self) -> ChildIndices

Recursion control Read more
Source§

fn handle_mouse_over(&mut self, cx: &mut EventCx<'_>, state: bool)

Mouse focus handler Read more
Source§

fn child_nav_focus(&mut self, cx: &mut EventCx<'_>, id: Id)

Notification that a child received navigation focus Read more
Source§

impl<G: EditGuard> Layout for EditBox<G>

Source§

fn size_rules(&mut self, cx: &mut SizeCx<'_>, axis: AxisInfo) -> SizeRules

Calculate size requirements for an axis Read more
Source§

fn set_rect(&mut self, cx: &mut SizeCx<'_>, outer_rect: Rect, hints: AlignHints)

Set size and position Read more
Source§

fn draw(&self, draw: DrawCx<'_>)

Draw a widget and its children Read more
Source§

fn rect(&self) -> Rect

Get the widget’s region Read more
Source§

impl<G: EditGuard> Tile for EditBox<G>

Source§

fn tooltip(&self) -> Option<&str>

Tooltip Read more
Source§

fn role(&self, _: &mut dyn RoleCx) -> Role<'_>

Describe the widget’s role Read more
Source§

fn translation(&self, index: usize) -> Offset

Get translation of child index relative to this widget Read more
Source§

fn as_tile(&self) -> &dyn Tile

Get as a dyn Tile Read more
Source§

fn id_ref(&self) -> &Id

Get a reference to the widget’s identifier Read more
Source§

fn identify(&self) -> IdentifyWidget<'_>

Return a Display-able widget identifier Read more
Source§

fn get_child(&self, index: usize) -> Option<&dyn Tile>

Access a child as a dyn Tile, if available Read more
Source§

fn child_indices(&self) -> ChildIndices

Get child indices available to recursion Read more
Source§

fn try_probe(&self, coord: Coord) -> Option<Id>

Probe a coordinate for a widget’s Id Read more
Source§

fn nav_next(&self, reverse: bool, from: Option<usize>) -> Option<usize>

Navigation in spatial order Read more
Source§

fn id(&self) -> Id

Get the widget’s identifier Read more
Source§

fn navigable(&self) -> bool

Whether this widget supports navigation focus Read more
Source§

fn role_child_properties(&self, cx: &mut dyn RoleCx, index: usize)

Specify additional role properties for child index Read more
Source§

fn find_child_index(&self, id: &Id) -> Option<usize>

Find the child which is an ancestor of this id, if any Read more
Source§

impl<G: EditGuard> Widget for EditBox<G>

Source§

type Data = <G as EditGuard>::Data

Input data type Read more
Source§

fn as_node<'__a>(&'__a mut self, data: &'__a Self::Data) -> Node<'__a>

Erase type Read more
Source§

fn child_node<'__n>( &'__n mut self, data: &'__n Self::Data, index: usize, ) -> Option<Node<'__n>>

Access a child as a Node, if available Read more

Auto Trait Implementations§

§

impl<G> Freeze for EditBox<G>
where G: Freeze,

§

impl<G> RefUnwindSafe for EditBox<G>
where G: RefUnwindSafe,

§

impl<G = DefaultGuard<()>> !Send for EditBox<G>

§

impl<G = DefaultGuard<()>> !Sync for EditBox<G>

§

impl<G> Unpin for EditBox<G>
where G: Unpin,

§

impl<G> UnwindSafe for EditBox<G>
where G: UnwindSafe,

Blanket Implementations§

Source§

impl<W> AdaptWidget for W
where W: Widget,

Source§

fn align(self, hints: AlignHints) -> Align<Self>

Apply an alignment hint Read more
Source§

fn pack(self, hints: AlignHints) -> Pack<Self>

Apply an alignment hint, squash and align the result Read more
Source§

fn with_stretch( self, horiz: impl Into<Option<Stretch>>, vert: impl Into<Option<Stretch>>, ) -> WithStretch<Self>

Adjust stretch policy Read more
Source§

fn with_margin_style(self, style: MarginStyle) -> WithMarginStyle<Self>

Set the margin style Read more
Source§

fn map<A, F>(self, f: F) -> Map<A, Self, F>
where F: for<'a> Fn(&'a A) -> &'a Self::Data,

Map data type via a function Read more
Source§

fn on_configure<F>(self, f: F) -> AdaptEvents<Self>
where F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,

Call the given closure on Events::configure Read more
Source§

fn on_update<F>(self, f: F) -> AdaptEvents<Self>
where F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self, &Self::Data) + 'static,

Call the given closure on Events::update Read more
Source§

fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
where M: Debug + 'static, H: Fn(&mut AdaptEventCx<'_, '_>, &mut Self, M) + 'static,

Add a handler on message of type M Read more
Source§

fn map_message<M, N, H>(self, handler: H) -> AdaptEvents<Self>
where M: Debug + 'static, N: Debug + 'static, H: Fn(usize, M) -> N + 'static,

Add a child handler to map messages of type M to N Read more
Source§

fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
where H: Fn(&mut AdaptEventCx<'_, '_>, &mut Self, &Self::Data) + 'static,

Add a generic message handler Read more
Source§

fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>

Construct a wrapper, setting minimum size in pixels Read more
Source§

fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>

Construct a wrapper, setting minimum size in Em Read more
Source§

fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>

Construct a wrapper widget adding a label Read more
Source§

fn with_hidden_label<T: ToString>(self, label: T) -> WithHiddenLabel<Self>

Construct a wrapper widget adding a hidden label Read more
Source§

fn with_state<A>(self, state: Self::Data) -> Adapt<A, Self>

Construct an Adapt widget over input
Source§

impl<W> AdaptWidgetAny for W
where W: Widget<Data = ()>,

Source§

fn map_any<A>(self) -> MapAny<A, Self>

Map any input data to () Read more
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<S, T> Cast<T> for S
where T: Conv<S>,

Source§

fn cast(self) -> T

Cast from Self to T Read more
Source§

fn try_cast(self) -> Result<T, Error>

Try converting from Self to T Read more
Source§

impl<S, T> CastApprox<T> for S
where T: ConvApprox<S>,

Source§

fn try_cast_approx(self) -> Result<T, Error>

Try approximate conversion from Self to T Read more
Source§

fn cast_approx(self) -> T

Cast approximately from Self to T Read more
Source§

impl<S, T> CastFloat<T> for S
where T: ConvFloat<S>,

Source§

fn cast_trunc(self) -> T

Cast to integer, truncating Read more
Source§

fn cast_nearest(self) -> T

Cast to the nearest integer Read more
Source§

fn cast_floor(self) -> T

Cast the floor to an integer Read more
Source§

fn cast_ceil(self) -> T

Cast the ceiling to an integer Read more
Source§

fn try_cast_trunc(self) -> Result<T, Error>

Try converting to integer with truncation Read more
Source§

fn try_cast_nearest(self) -> Result<T, Error>

Try converting to the nearest integer Read more
Source§

fn try_cast_floor(self) -> Result<T, Error>

Try converting the floor to an integer Read more
Source§

fn try_cast_ceil(self) -> Result<T, Error>

Try convert the ceiling to an integer 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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<W> TileExt for W
where W: Tile + ?Sized,

Source§

fn is_configured(&self) -> bool

Check whether this widget has been configured Read more
Source§

fn is_sized(&self) -> bool

Check whether this widget has been sized Read more
Source§

fn eq_id<T>(&self, rhs: T) -> bool
where Id: PartialEq<T>,

Test widget identifier for equality Read more
Source§

fn is_ancestor_of(&self, id: &Id) -> bool

Check whether id is self or a descendant Read more
Source§

fn is_strict_ancestor_of(&self, id: &Id) -> bool

Check whether id is not self and is a descendant Read more
Source§

fn children(&self) -> impl Iterator<Item = &dyn Tile>

Return an iterator over visible children Read more
Source§

fn find_tile(&self, id: &Id) -> Option<&dyn Tile>

Find the descendant with this id, if any Read more
Source§

fn find_tile_rect(&self, id: &Id) -> Option<(Rect, Offset)>

Find the Rect of the descendant with this id, if any 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,