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>
impl<G: EditGuard> EditBox<G>
Sourcepub fn clear(&mut self, cx: &mut EventState)
pub fn clear(&mut self, cx: &mut EventState)
Clear text contents and undo history
Sourcepub fn pre_commit(&mut self)
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.
Sourcepub fn set_str(&mut self, cx: &mut EventState, text: &str)
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.
Sourcepub fn set_string(&mut self, cx: &mut EventState, text: String)
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.
Sourcepub fn replace_selected_text(&mut self, cx: &mut EventState, text: &str)
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§impl<A: 'static> EditBox<DefaultGuard<A>>
impl<A: 'static> EditBox<DefaultGuard<A>>
Sourcepub fn text<S: ToString>(text: S) -> Self
pub fn text<S: ToString>(text: S) -> Self
Construct an EditBox with the given inital text (no event handling)
Sourcepub fn string(
value_fn: impl Fn(&A) -> String + 'static,
) -> EditBox<StringGuard<A>>
pub fn string( value_fn: impl Fn(&A) -> String + 'static, ) -> EditBox<StringGuard<A>>
Construct a read-only EditBox displaying some String value
Sourcepub 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>>
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.
Sourcepub 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>>
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>>
impl<A: 'static> EditBox<StringGuard<A>>
Sourcepub fn with_msg<M>(self, msg_fn: impl Fn(&str) -> M + 'static) -> Selfwhere
M: Debug + 'static,
pub fn with_msg<M>(self, msg_fn: impl Fn(&str) -> M + 'static) -> Selfwhere
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>
impl<G: EditGuard> EditBox<G>
Sourcepub fn with_text(self, text: impl ToString) -> Self
pub fn with_text(self, text: impl ToString) -> Self
Set the initial text (inline)
This method should only be used on a new EditBox.
Sourcepub fn with_editable(self, editable: bool) -> Self
pub fn with_editable(self, editable: bool) -> Self
Set whether this widget is editable (inline)
Sourcepub fn with_multi_line(self, multi_line: bool) -> Self
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.
Sourcepub fn with_class(self, class: TextClass) -> Self
pub fn with_class(self, class: TextClass) -> Self
Set the text class used
Sourcepub fn with_lines(self, min_lines: f32, ideal_lines: f32) -> Self
pub fn with_lines(self, min_lines: f32, ideal_lines: f32) -> Self
Adjust the height allocation (inline)
Sourcepub fn set_width_em(&mut self, min_em: f32, ideal_em: f32)
pub fn set_width_em(&mut self, min_em: f32, ideal_em: f32)
Adjust the width allocation
Sourcepub fn with_width_em(self, min_em: f32, ideal_em: f32) -> Self
pub fn with_width_em(self, min_em: f32, ideal_em: f32) -> Self
Adjust the width allocation (inline)
Methods from Deref<Target = Editor>§
Sourcepub fn clone_string(&self) -> String
pub fn clone_string(&self) -> String
Get the text contents as a String
Sourcepub fn pre_commit(&mut self)
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.
Sourcepub fn clear(&mut self, cx: &mut EventState)
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.
Sourcepub fn set_str(&mut self, cx: &mut EventState, text: &str) -> bool
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.
Sourcepub fn set_string(&mut self, cx: &mut EventState, string: String) -> bool
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.
Sourcepub fn replace_selected_text(&mut self, cx: &mut EventState, text: &str) -> bool
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.
Sourcepub fn cursor_range(&self) -> CursorRange
pub fn cursor_range(&self) -> CursorRange
Access the cursor index / selection range
Sourcepub fn set_cursor_range(&mut self, range: impl Into<CursorRange>)
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.
Sourcepub fn is_editable(&self) -> bool
pub fn is_editable(&self) -> bool
Get whether this EditField is editable
Sourcepub fn set_editable(&mut self, editable: bool)
pub fn set_editable(&mut self, editable: bool)
Set whether this EditField is editable
Sourcepub fn multi_line(&self) -> bool
pub fn multi_line(&self) -> bool
True if the editor uses multi-line mode
Sourcepub fn has_input_focus(&self) -> bool
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.
Sourcepub fn set_error(
&mut self,
cx: &mut EventState,
message: Option<Cow<'static, str>>,
)
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: EditGuard> Events for EditBox<G>
impl<G: EditGuard> Events for EditBox<G>
Source§fn handle_event(
&mut self,
cx: &mut EventCx<'_>,
_: &Self::Data,
event: Event<'_>,
) -> IsUsed
fn handle_event( &mut self, cx: &mut EventCx<'_>, _: &Self::Data, event: Event<'_>, ) -> IsUsed
Source§fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &G::Data)
fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &G::Data)
Source§fn handle_resize(
&mut self,
cx: &mut ConfigCx<'_>,
_: &Self::Data,
) -> Option<ActionResize>
fn handle_resize( &mut self, cx: &mut ConfigCx<'_>, _: &Self::Data, ) -> Option<ActionResize>
Source§fn handle_scroll(&mut self, cx: &mut EventCx<'_>, _: &G::Data, scroll: Scroll)
fn handle_scroll(&mut self, cx: &mut EventCx<'_>, _: &G::Data, scroll: Scroll)
Source§const REDRAW_ON_MOUSE_OVER: bool = false
const REDRAW_ON_MOUSE_OVER: bool = false
Source§fn mouse_over_icon(&self) -> Option<CursorIcon>
fn mouse_over_icon(&self) -> Option<CursorIcon>
Source§fn post_configure(&mut self, cx: &mut ConfigCx<'_>)
fn post_configure(&mut self, cx: &mut ConfigCx<'_>)
Source§fn update(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
fn update(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
Source§fn recurse_indices(&self) -> ChildIndices
fn recurse_indices(&self) -> ChildIndices
Source§fn handle_mouse_over(&mut self, cx: &mut EventCx<'_>, state: bool)
fn handle_mouse_over(&mut self, cx: &mut EventCx<'_>, state: bool)
Source§impl<G: EditGuard> Layout for EditBox<G>
impl<G: EditGuard> Layout for EditBox<G>
Source§impl<G: EditGuard> Tile for EditBox<G>
impl<G: EditGuard> Tile for EditBox<G>
Source§fn translation(&self, index: usize) -> Offset
fn translation(&self, index: usize) -> Offset
index relative to this widget Read moreSource§fn get_child(&self, index: usize) -> Option<&dyn Tile>
fn get_child(&self, index: usize) -> Option<&dyn Tile>
dyn Tile, if available Read moreSource§fn child_indices(&self) -> ChildIndices
fn child_indices(&self) -> ChildIndices
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 Wwhere
W: Widget,
impl<W> AdaptWidget for Wwhere
W: Widget,
Source§fn pack(self, hints: AlignHints) -> Pack<Self>
fn pack(self, hints: AlignHints) -> Pack<Self>
Source§fn with_stretch(
self,
horiz: impl Into<Option<Stretch>>,
vert: impl Into<Option<Stretch>>,
) -> WithStretch<Self>
fn with_stretch( self, horiz: impl Into<Option<Stretch>>, vert: impl Into<Option<Stretch>>, ) -> WithStretch<Self>
Source§fn with_margin_style(self, style: MarginStyle) -> WithMarginStyle<Self>
fn with_margin_style(self, style: MarginStyle) -> WithMarginStyle<Self>
Source§fn on_configure<F>(self, f: F) -> AdaptEvents<Self>where
F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,
fn on_configure<F>(self, f: F) -> AdaptEvents<Self>where
F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,
Events::configure Read moreSource§fn on_update<F>(self, f: F) -> AdaptEvents<Self>
fn on_update<F>(self, f: F) -> AdaptEvents<Self>
Events::update Read moreSource§fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
M Read moreSource§fn map_message<M, N, H>(self, handler: H) -> AdaptEvents<Self>
fn map_message<M, N, H>(self, handler: H) -> AdaptEvents<Self>
Source§fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
Source§fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>
fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>
Source§fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>
fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>
Source§fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>
fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>
Source§impl<W> AdaptWidgetAny for W
impl<W> AdaptWidgetAny for W
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
impl<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
Source§fn try_cast_approx(self) -> Result<T, Error>
fn try_cast_approx(self) -> Result<T, Error>
Source§fn cast_approx(self) -> T
fn cast_approx(self) -> T
Source§impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
Source§fn cast_trunc(self) -> T
fn cast_trunc(self) -> T
Source§fn cast_nearest(self) -> T
fn cast_nearest(self) -> T
Source§fn cast_floor(self) -> T
fn cast_floor(self) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<W> TileExt for W
impl<W> TileExt for W
Source§fn is_configured(&self) -> bool
fn is_configured(&self) -> bool
Source§fn is_strict_ancestor_of(&self, id: &Id) -> bool
fn is_strict_ancestor_of(&self, id: &Id) -> bool
id is not self and is a descendant Read more