zng::widget::node

Trait UiNodeList

source
pub trait UiNodeList: UiNodeListBoxed {
Show 21 methods // Required methods fn with_node<R, F>(&mut self, index: usize, f: F) -> R where F: FnOnce(&mut Box<dyn UiNodeBoxed>) -> R; fn for_each<F>(&mut self, f: F) where F: FnMut(usize, &mut Box<dyn UiNodeBoxed>); fn par_each<F>(&mut self, f: F) where F: Fn(usize, &mut Box<dyn UiNodeBoxed>) + Send + Sync; fn par_fold_reduce<T, I, F, R>( &mut self, identity: I, fold: F, reduce: R, ) -> T where T: Send + 'static, I: Fn() -> T + Send + Sync, F: Fn(T, usize, &mut Box<dyn UiNodeBoxed>) -> T + Send + Sync, R: Fn(T, T) -> T + Send + Sync; fn len(&self) -> usize; fn boxed(self) -> Box<dyn UiNodeListBoxed>; fn drain_into(&mut self, vec: &mut Vec<Box<dyn UiNodeBoxed>>); // Provided methods fn is_empty(&self) -> bool { ... } fn init_all(&mut self) { ... } fn deinit_all(&mut self) { ... } fn info_all(&mut self, info: &mut WidgetInfoBuilder) { ... } fn update_all( &mut self, updates: &WidgetUpdates, observer: &mut dyn UiNodeListObserver, ) { ... } fn event_all(&mut self, update: &EventUpdate) { ... } fn measure_each<F, S>( &mut self, wm: &mut WidgetMeasure, measure: F, fold_size: S, ) -> Size2D<Px, Px> where F: Fn(usize, &mut Box<dyn UiNodeBoxed>, &mut WidgetMeasure) -> Size2D<Px, Px> + Send + Sync, S: Fn(Size2D<Px, Px>, Size2D<Px, Px>) -> Size2D<Px, Px> + Send + Sync, Self: Sized { ... } fn layout_each<F, S>( &mut self, wl: &mut WidgetLayout, layout: F, fold_size: S, ) -> Size2D<Px, Px> where F: Fn(usize, &mut Box<dyn UiNodeBoxed>, &mut WidgetLayout) -> Size2D<Px, Px> + Send + Sync, S: Fn(Size2D<Px, Px>, Size2D<Px, Px>) -> Size2D<Px, Px> + Send + Sync, Self: Sized { ... } fn render_all(&mut self, frame: &mut FrameBuilder) { ... } fn render_update_all(&mut self, update: &mut FrameUpdate) { ... } fn downcast_unbox<L>(self) -> Result<L, Box<dyn UiNodeListBoxed>> where L: UiNodeList, Self: Sized { ... } fn actual_type_id(&self) -> TypeId { ... } fn as_any(&mut self) -> &mut (dyn Any + 'static) where Self: Sized { ... } fn op(&mut self, op: UiNodeOp<'_>) where Self: Sized { ... }
}
Expand description

Represents a list of UI nodes.

There are multiple node list types, panel implementers receive children as impl UiNodeList and usually wrap it in a PanelList.

UI node lists delegate the UiNode method for each node in the list, potentially in parallel. Panel implementers call the *_all methods to delegate, they can also use the match_node_list to implement delegation. The trait also offers for_each, par_each and other methods for direct access to the nodes, both sequentially and in parallel.

Note that trying to access the nodes before init will probably not work, the ArcNodeList type is used by properties that request impl UiNodeList input, so captured property lists will always be empty before init.

Required Methods§

source

fn with_node<R, F>(&mut self, index: usize, f: F) -> R
where F: FnOnce(&mut Box<dyn UiNodeBoxed>) -> R,

Visit the specific node.

§Panics

Panics if index is out of bounds.

source

fn for_each<F>(&mut self, f: F)
where F: FnMut(usize, &mut Box<dyn UiNodeBoxed>),

Calls f for each node in the list with the index, sequentially.

source

fn par_each<F>(&mut self, f: F)
where F: Fn(usize, &mut Box<dyn UiNodeBoxed>) + Send + Sync,

Calls f for each node in the list with the index, in parallel.

source

fn par_fold_reduce<T, I, F, R>(&mut self, identity: I, fold: F, reduce: R) -> T
where T: Send + 'static, I: Fn() -> T + Send + Sync, F: Fn(T, usize, &mut Box<dyn UiNodeBoxed>) -> T + Send + Sync, R: Fn(T, T) -> T + Send + Sync,

Calls fold for each node in the list in parallel, with fold accumulators produced by identity, then merges the folded results using reduce to produce the final value also in parallel.

If reduce is associative the order is preserved in the result.

§Example

This example will collect the node indexes in order:

list.par_fold_reduce(
    Vec::new,
    |mut v, i, _| {
        v.push(i);
        v
    },
    |mut a, b| {
        a.extend(b);
        a
    },
)
source

fn len(&self) -> usize

Gets the current number of nodes in the list.

source

fn boxed(self) -> Box<dyn UiNodeListBoxed>

Gets self boxed, or itself if it is already boxed.

source

fn drain_into(&mut self, vec: &mut Vec<Box<dyn UiNodeBoxed>>)

Move all nodes into vec.

Provided Methods§

source

fn is_empty(&self) -> bool

Returns true if the list does not contain any nodes.

source

fn init_all(&mut self)

Init the list in a context, all nodes are also inited.

The behavior of some list implementations depend on this call, manually initializing nodes is an error.

source

fn deinit_all(&mut self)

Deinit the list in a context, all nodes are also deinited.

The behavior of some list implementations depend on this call, manually deiniting nodes is an error.

source

fn info_all(&mut self, info: &mut WidgetInfoBuilder)

Rebuilds the list in a context, all node info is rebuilt.

source

fn update_all( &mut self, updates: &WidgetUpdates, observer: &mut dyn UiNodeListObserver, )

Receive updates for the list in a context, all nodes are also updated.

The behavior of some list implementations depend on this call, manually updating nodes is an error.

source

fn event_all(&mut self, update: &EventUpdate)

Receive an event for the list in a context, all nodes are also notified.

The behavior of some list implementations depend on this call, manually notifying nodes is an error.

source

fn measure_each<F, S>( &mut self, wm: &mut WidgetMeasure, measure: F, fold_size: S, ) -> Size2D<Px, Px>
where F: Fn(usize, &mut Box<dyn UiNodeBoxed>, &mut WidgetMeasure) -> Size2D<Px, Px> + Send + Sync, S: Fn(Size2D<Px, Px>, Size2D<Px, Px>) -> Size2D<Px, Px> + Send + Sync, Self: Sized,

Call measure for each node and combines the final size using fold_size.

The call to measure can be parallel if Parallel::LAYOUT is enabled.

source

fn layout_each<F, S>( &mut self, wl: &mut WidgetLayout, layout: F, fold_size: S, ) -> Size2D<Px, Px>
where F: Fn(usize, &mut Box<dyn UiNodeBoxed>, &mut WidgetLayout) -> Size2D<Px, Px> + Send + Sync, S: Fn(Size2D<Px, Px>, Size2D<Px, Px>) -> Size2D<Px, Px> + Send + Sync, Self: Sized,

Call layout for each node and combines the final size using fold_size.

The call to layout can be parallel if Parallel::LAYOUT is enabled.

source

fn render_all(&mut self, frame: &mut FrameBuilder)

Render all nodes.

The correct behavior of some list implementations depend on this call, using for_each to render nodes can break it.

source

fn render_update_all(&mut self, update: &mut FrameUpdate)

Render all nodes.

The correct behavior of some list implementations depend on this call, using for_each to render nodes can break it.

source

fn downcast_unbox<L>(self) -> Result<L, Box<dyn UiNodeListBoxed>>
where L: UiNodeList, Self: Sized,

Downcast to L, if self is L or is a BoxedUiNodeList that is L.

source

fn actual_type_id(&self) -> TypeId

Returns the type_id of the unboxed list.

source

fn as_any(&mut self) -> &mut (dyn Any + 'static)
where Self: Sized,

Access to mut dyn Any methods.

source

fn op(&mut self, op: UiNodeOp<'_>)
where Self: Sized,

Runs the UiNodeOp.

Object Safety§

This trait is not object safe.

Implementors§