Skip to main content

NodeMut

Struct NodeMut 

Source
pub struct NodeMut<'a, Msg> { /* private fields */ }
Expand description

Adjusts the node just added. Every method changes the node in place, so the result can be ignored or chained.

Implementations§

Source§

impl<'a, Msg> NodeMut<'a, Msg>

Source

pub fn id(self, name: impl Into<String>) -> Self

Names the node. Name widgets whose position among their siblings can change (list rows, optional widgets) so their state and focus follow them.

Source

pub fn width(self, width: Length) -> Self

Sets the width.

Source

pub fn height(self, height: Length) -> Self

Sets the height.

Source

pub fn fill(self) -> Self

Takes all space left in both directions.

Source

pub fn fill_width(self) -> Self

Takes all width left.

Source

pub fn fill_height(self) -> Self

Takes all height left.

Source

pub fn padding(self, padding: Padding) -> Self

Keeps padding free inside the node.

Source

pub fn gap(self, cells: u16) -> Self

Leaves cells between the children of a row or column.

Source

pub fn justify(self, align: Align) -> Self

Places children along the main axis of a row or column (both axes of a stack).

Source

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

Whether a mouse drag may select text in this node. Nothing is selectable unless asked: true makes the node a selection region, so a drag that starts inside it selects text within the node only (widgets such as CodeView and Markdown are regions by themselves). false keeps selection out of the node and everything inside it, also out of regions within it, e.g. for a secret shown inside a selectable log.

Source

pub fn align(self, align: Align) -> Self

Places children across the main axis of a row or column.

Source§

impl<Msg: Clone + 'static> NodeMut<'_, Msg>

Source

pub fn on_action( self, scope: Scope, action: impl Into<String>, message: Msg, ) -> Self

While keyboard focus is on this node or inside it, a key bound to the keymap action action of scope sends message instead of reaching App::action.

This is how an application tells where a shortcut was pressed. With focus elsewhere the same key reaches App::action as usual, so one key can mean two things: leave a terminal while inside it, go back into it from outside. The focus in force when the key arrives decides, however it got there (tab, a click, Command::focus), so nothing has to be tracked in application state.

The innermost node that answers the action wins. The key must first get past the focused widgets: a widget that uses it (a text field typing a character) keeps it, and a Terminal lets it out only for actions named with its pass_through. The actions the runtime owns (quit, focus-next, focus-prev, debug, copy, paste, toggle-panel) are not answered here. Call once per action.

use qframe::env::Env;
use qframe::prelude::*;
use qframe::widgets::TextInput;

#[derive(Clone, Debug, PartialEq)]
enum Msg {
    Leave,
    Enter,
}

struct Editor;

impl App for Editor {
    type Msg = Msg;

    fn update(&mut self, msg: Msg) -> Command<Msg> {
        match msg {
            Msg::Leave => Command::focus("files"),
            Msg::Enter => Command::focus("note"),
        }
    }

    fn view(&self, ui: &mut View<'_, Msg>) {
        ui.add(List::new(["notes.md", "todo.md"].map(ListItem::new))).id("files");
        ui.add(TextInput::new("")).id("note").on_action(Scope::App, "switch", Msg::Leave);
    }

    // Reached only while focus is outside the note.
    fn action(&self, name: &str) -> Option<Msg> {
        (name == "switch").then_some(Msg::Enter)
    }
}

let mut env = Env::builtin();
env.keymap_mut().bind(Scope::App, "switch", &["alt+s".parse().unwrap()]);
let mut app = Harness::with_env(Editor, env, 30, 3);
app.press("alt+s");
assert!(app.is_focused("note"));
app.press("alt+s");
assert!(app.is_focused("files"));

Auto Trait Implementations§

§

impl<'a, Msg> !RefUnwindSafe for NodeMut<'a, Msg>

§

impl<'a, Msg> !Send for NodeMut<'a, Msg>

§

impl<'a, Msg> !Sync for NodeMut<'a, Msg>

§

impl<'a, Msg> !UnwindSafe for NodeMut<'a, Msg>

§

impl<'a, Msg> Freeze for NodeMut<'a, Msg>
where &'a mut Node<Msg>: Freeze,

§

impl<'a, Msg> Unpin for NodeMut<'a, Msg>
where &'a mut Node<Msg>: Unpin,

§

impl<'a, Msg> UnsafeUnpin for NodeMut<'a, Msg>
where &'a mut Node<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.