Struct kas_widgets::edit::EditField

source ·
pub struct EditField<G: EditGuard = ()> {
    pub guard: G,
    /* private fields */
}
Expand description

A text-edit field (single- or multi-line)

This widget implements the mechanics of text layout and event handling. It does not draw any background (even to indicate an error state) or borders (even to indicate focus), thus usually it is better to use a derived type like EditBox instead.

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

Event handling

This widget attempts to handle all standard text-editor input and scroll events.

Key events for moving the edit cursor (e.g. arrow keys) are consumed only if the edit cursor is moved while key events for adjusting or using the selection (e.g. Command::Copy and Command::Deselect) are consumed only when a selection exists. In contrast, key events for inserting or deleting text are always consumed.

Command::Enter inserts a line break in multi-line mode, but in single-line mode or if the Shift key is held it is treated the same as Command::Activate.

Performance and limitations

Text representation is via a single String. Edit operations are O(n) where n is the length of text (with text layout algorithms having greater cost than copying bytes in the backing String). This isn’t necessarily slow; when run with optimizations the type can handle type-setting around 20kB of UTF-8 in under 10ms (with significant scope for optimization, given that currently layout is re-run from scratch on each key stroke). Regardless, this approach is not designed to scale to handle large documents via a single EditField widget.

Fields§

§guard: G

The associated EditGuard implementation

Implementations§

source§

impl EditField<()>

source

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

Construct an EditField with the given inital text

source

pub fn empty() -> Self

Construct an empty EditField

source

pub fn with_guard<G: EditGuard>(self, guard: G) -> EditField<G>

Set an EditGuard

Technically, this consumes self and reconstructs another EditField with a different parameterisation.

This method calls EditGuard::update after applying guard to self and discards any message emitted.

source

pub fn on_activate<F: FnMut(&mut EventMgr<'_>, &str) -> Response + 'static>( self, f: F ) -> EditField<GuardActivate<F>>

Set a guard function, called on activation

The closure f is called when the EditField is activated (when the “enter” key is pressed).

This method is a parametisation of EditField::with_guard. Any guard previously assigned to the EditField will be replaced.

source

pub fn on_afl<F: FnMut(&mut EventMgr<'_>, &str) + 'static>( self, f: F ) -> EditField<GuardAFL<F>>

Set a guard function, called on activation and input-focus lost

The closure f is called when the EditField is activated (when the “enter” key is pressed) and when keyboard focus is lost.

This method is a parametisation of EditField::with_guard. Any guard previously assigned to the EditField will be replaced.

source

pub fn on_edit<F: FnMut(&mut EventMgr<'_>, &str) + 'static>( self, f: F ) -> EditField<GuardEdit<F>>

Set a guard function, called on edit

The closure f is called when the EditField is edited by the user.

This method is a parametisation of EditField::with_guard. Any guard previously assigned to the EditField will be replaced.

source

pub fn on_update<F: FnMut(&str) + 'static>( self, f: F ) -> EditField<GuardUpdate<F>>

Set a guard function, called on update

The closure f is called when the EditField is updated (by the user or programmatically). It is also called immediately by this method.

This method is a parametisation of EditField::with_guard. Any guard previously assigned to the EditField will be replaced.

source§

impl<G: EditGuard> EditField<G>

source

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

Set whether this EditField is editable (inline)

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 with_multi_line(self, multi_line: bool) -> Self

Set whether this EditField uses multi-line mode

This method does two things:

source

pub fn multi_line(&self) -> bool

True if the editor uses multi-line mode

See also: Self::with_multi_line

source

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

Set the text class used

source

pub fn class(&self) -> TextClass

Get the text class used

source

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

Adjust the height allocation

source

pub fn with_lines(self, min_lines: i32, ideal_lines: i32) -> 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)

source

pub fn has_key_focus(&self) -> bool

Get whether the widget currently has keyboard input focus

source

pub fn has_error(&self) -> bool

Get whether the input state is erroneous

source

pub fn set_error_state(&mut self, error_state: bool)

Set the error state

When true, the input field’s background is drawn red.

Trait Implementations§

source§

impl<G: Clone + EditGuard> Clone for EditField<G>

source§

fn clone(&self) -> EditField<G>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<G: Debug + EditGuard> Debug for EditField<G>

source§

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

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

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

source§

fn default() -> Self

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

impl<G: EditGuard> HasStr for EditField<G>

source§

fn get_str(&self) -> &str

Get text by reference
source§

fn get_string(&self) -> String

Get text as a String
source§

impl<G: EditGuard> HasString for EditField<G>

source§

fn set_string(&mut self, string: String) -> Action

Set text from a string
source§

fn set_str(&mut self, text: &str) -> Action

Set text from a &str Read more
source§

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

source§

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

Get size rules for the given axis Read more
source§

fn set_rect(&mut self, mgr: &mut ConfigMgr<'_>, rect: Rect)

Set size and position Read more
source§

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

Draw a widget and its children Read more
source§

fn find_id(&mut self, coord: Coord) -> Option<WidgetId>

Translate a coordinate to a WidgetId Read more
source§

impl<G: EditGuard> Scrollable for EditField<G>

source§

fn scroll_axes(&self, size: Size) -> (bool, bool)

Given size size, returns whether (horiz, vert) scrolling is required
source§

fn max_scroll_offset(&self) -> Offset

Get the maximum scroll offset Read more
source§

fn scroll_offset(&self) -> Offset

Get the current scroll offset Read more
source§

fn set_scroll_offset(&mut self, mgr: &mut EventMgr<'_>, offset: Offset) -> Offset

Set the scroll offset Read more
source§

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

source§

fn handle_event(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response

Handle an Event sent to this widget Read more
source§

fn pre_configure(&mut self, _: &mut ConfigMgr<'_>, id: WidgetId)

Pre-configuration Read more
source§

fn navigable(&self) -> bool

Is this widget navigable via Tab key? Read more
source§

fn configure(&mut self, mgr: &mut ConfigMgr<'_>)

Configure widget Read more
source§

fn translation(&self) -> Offset

Get translation of children relative to this widget Read more
source§

fn nav_next( &mut self, mgr: &mut ConfigMgr<'_>, reverse: bool, from: Option<usize> ) -> Option<usize>

Navigation in spatial order Read more
source§

fn steal_event( &mut self, mgr: &mut EventMgr<'_>, id: &WidgetId, event: &Event ) -> Response

Potentially steal an event before it reaches a child Read more
source§

fn handle_unused(&mut self, mgr: &mut EventMgr<'_>, event: Event) -> Response

Handle an event sent to child index but left unhandled Read more
source§

fn handle_message(&mut self, mgr: &mut EventMgr<'_>)

Handler for messages from children/descendants Read more
source§

fn handle_scroll(&mut self, mgr: &mut EventMgr<'_>, scroll: Scroll)

Handler for scrolling Read more
source§

impl<G: EditGuard> WidgetChildren for EditField<G>

source§

fn num_children(&self) -> usize

Get the number of child widgets Read more
source§

fn get_child(&self, _index: usize) -> Option<&dyn Widget>

Get a reference to a child widget by index, or None if the index is out of bounds. Read more
source§

fn get_child_mut(&mut self, _index: usize) -> Option<&mut dyn Widget>

Mutable variant of get Read more
source§

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

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

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

Make an identifier for a child Read more
source§

impl<G: EditGuard> WidgetCore for EditField<G>

source§

fn id_ref(&self) -> &WidgetId

Get the widget’s identifier Read more
source§

fn rect(&self) -> Rect

Get the widget’s region, relative to its parent.
source§

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

Get the name of the widget struct
source§

fn as_widget(&self) -> &dyn Widget

Erase type
source§

fn as_widget_mut(&mut self) -> &mut dyn Widget

Erase type

Auto Trait Implementations§

§

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

§

impl<G = ()> !Send for EditField<G>

§

impl<G = ()> !Sync for EditField<G>

§

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

§

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

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
§

impl<S, T> Cast<T> for Swhere T: Conv<S>,

§

fn cast(self) -> T

Cast from Self to T Read more
§

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

Try converting from Self to T Read more
§

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

§

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

Try approximate conversion from Self to T Read more
§

fn cast_approx(self) -> T

Cast approximately from Self to T Read more
§

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

§

fn cast_trunc(self) -> T

Cast to integer, truncating Read more
§

fn cast_nearest(self) -> T

Cast to the nearest integer Read more
§

fn cast_floor(self) -> T

Cast the floor to an integer Read more
§

fn cast_ceil(self) -> T

Cast the ceiling to an integer Read more
§

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

Try converting to integer with truncation Read more
§

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

Try converting to the nearest integer Read more
§

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

Try converting the floor to an integer Read more
§

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

Try convert the ceiling to an integer Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

impl<W> WidgetExt for Wwhere W: Widget + ?Sized,

source§

fn id(&self) -> WidgetId

Get the widget’s identifier Read more
source§

fn eq_id<T>(&self, rhs: T) -> boolwhere WidgetId: PartialEq<T>,

Test widget identifier for equality Read more
source§

fn identify(&self) -> IdentifyWidget

Display as “StructName#WidgetId”
source§

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

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

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

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

fn find_widget(&self, id: &WidgetId) -> Option<&dyn Widget>

Find the descendant with this id, if any
source§

fn find_widget_mut(&mut self, id: &WidgetId) -> Option<&mut dyn Widget>

Find the descendant with this id, if any