Skip to content

Add Widget::Action associated type #664

@PoignardAzur

Description

@PoignardAzur

During various passes, widgets that want to signal a semantically meaningful event from the UI (eg a button that was clicked) can emit actions.

Actions are a centralized queue of messages intended for the root application, mostly for the app driver (eg Xilem) to handle. They are inspired by Facebook's Flux architecture.

Actions are currently under-designed. Right now, they only store the emitter's id, plus a payload among a small set of types with Box<dyn Any> as a wildcard:

pub enum Action {
    /// A button was pressed.
    ///
    /// Some presses are triggered without a pointer button;
    /// for example, a touch screen does not exercise buttons.
    /// In these cases, `None` will be the value here.
    ButtonPressed(Option<PointerButton>),
    /// Text changed.
    TextChanged(String),
    /// Text entered.
    TextEntered(String),
    /// A checkbox was toggled.
    CheckboxToggled(bool),
    // FIXME - This is a huge hack
    /// Other.
    Other(Box<dyn Any + Send>),
}

Ideally, we'd want each widget to have its own action variants, so the Widget trait should have an Action associated type.

This associated type be bound of Self: Sized so that the trait remains dyn-safe.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions