Skip to main content

DurationInput

Struct DurationInput 

Source
pub struct DurationInput<Msg> { /* private fields */ }
Expand description

A length of time edited segment by segment: hours and minutes, optionally seconds, each followed by its unit in the active language: 1 h 30 min, 1 sa 30 dk.

It is built like TimeInput and handled the same way. The field takes focus as one control and one segment at a time is active: Left and Right move between segments, Up and Down change the active segment by one of its unit, and typing digits fills it, two digits a segment, moving on once the segment is complete. : and Space move on as well and Backspace sets the segment to zero. A click activates the segment under the pointer. The wheel changes the segment under the pointer, one unit per notch, without moving focus or the active segment; over a unit word it changes the segment the pointer was last over inside the field, or the active segment when there was none. The application owns the length.

Unlike a time of day a length does not wrap: stepping carries between the units (0 h 59 min up is 1 h 00 min), stops at zero going down and at 99 h 59 min 59 s going up. Minutes and seconds typed past 59 carry too, so 90 typed into the minutes reads 1 h 30 min.

Ctrl+A selects the whole length; then Ctrl+C copies it as written in the active language (1 h 30 min) and Ctrl+X copies it and sets the length to zero. Pasting sets the length from anything parse_duration reads (90 dk, 1 h 30 min, 2:15); other text is ignored, or sent to on_reject with the reason. A right click (or Shift+F10 and the menu key) opens the edit menu of TextInput with the same actions; Cut and Copy need the whole length selected.

A zero length is the field’s empty state: its digits are drawn as faint as the unit words until the pointer or focus is on the field. Where the words do not fit, the field shows the compact clock form, 1 : 30, with the same segments and keys.

Style keys, shared with TimeInput so both fields look alike: time-input (bg, fg) with states hover, focus, invalid, disabled; time-segment (bg, fg, bold) with selected for the active segment and active while a first digit waits for the second; time-separator (fg) for the unit words, the colons and the digits of a zero length at rest; text-input-selection (bg, fg) for the whole length selected. Language keys: quvyta.duration.* for the units and the reasons a paste was not read, quvyta.edit.* for the menu.

Implementations§

Source§

impl<Msg> DurationInput<Msg>

Source

pub fn new(value: Duration) -> Self

A field showing value as hours and minutes. Parts of a second are not shown and are dropped by the first change.

Source

pub fn seconds(self, seconds: bool) -> Self

Shows and edits seconds too.

Source

pub fn invalid(self, invalid: bool) -> Self

Marks the length as failing validation, such as a break longer than the session.

Source

pub fn disabled(self, disabled: bool) -> Self

Greys the field out; it cannot be focused or changed.

Source

pub fn on_change(self, message: impl Fn(Duration) -> Msg + 'static) -> Self

Message carrying the new length after every change.

Source

pub fn on_reject(self, message: impl Fn(DurationError) -> Msg + 'static) -> Self

Message carrying why a pasted text could not be read, so the application can say so next to the field with DurationError::message. Without it such a paste is ignored and passed on, as in TimeInput.

Trait Implementations§

Source§

impl<Msg: 'static> Widget<Msg> for DurationInput<Msg>

Source§

fn measure(&self, cx: &mut MeasureCx<'_>, available: Size) -> Size

The size the widget wants when it may use up to available.
Source§

fn paint(&self, cx: &mut PaintCx<'_>, area: Rect)

Draws the widget into area.
Source§

fn paint_overlay(&self, cx: &mut PaintCx<'_>, anchor: Rect)

Draws the widget’s overlay after the whole view was painted, when it asked for one with PaintCx::request_overlay. anchor is the area the widget was painted in.
Source§

fn event(&self, cx: &mut EventCx<'_, Msg>, event: &Event) -> bool

Handles input. Returns true when the event was used; unused key and scroll events bubble to the parent widget.
Source§

fn focusable(&self) -> bool

Whether the widget can take keyboard focus.
Source§

fn children(&self) -> &[Node<Msg>]

Child nodes, for widgets that contain other widgets.
Source§

fn children_mut(&mut self) -> &mut [Node<Msg>]

Mutable child nodes, used to assign ids.

Auto Trait Implementations§

§

impl<Msg> !RefUnwindSafe for DurationInput<Msg>

§

impl<Msg> !Send for DurationInput<Msg>

§

impl<Msg> !Sync for DurationInput<Msg>

§

impl<Msg> !UnwindSafe for DurationInput<Msg>

§

impl<Msg> Freeze for DurationInput<Msg>
where Option<Box<dyn Fn(Duration) -> Msg>>: Freeze, Option<Box<dyn Fn(DurationError) -> Msg>>: Freeze,

§

impl<Msg> Unpin for DurationInput<Msg>
where Option<Box<dyn Fn(Duration) -> Msg>>: Unpin, Option<Box<dyn Fn(DurationError) -> Msg>>: Unpin,

§

impl<Msg> UnsafeUnpin for DurationInput<Msg>
where Option<Box<dyn Fn(Duration) -> Msg>>: UnsafeUnpin, Option<Box<dyn Fn(DurationError) -> Msg>>: UnsafeUnpin,

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> 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.