Trait kas::view::Driver

source ·
pub trait Driver<Item, Data>
where Data: SharedData<Item = Item>,
{ type Widget: Widget<Data = Item>; // Required method fn make(&mut self, key: &<Data as SharedData>::Key) -> Self::Widget; // Provided methods fn set_key( &mut self, widget: &mut Self::Widget, key: &<Data as SharedData>::Key ) { ... } fn on_messages( &mut self, cx: &mut EventCx<'_>, data: &Data, key: &<Data as SharedData>::Key, widget: &mut Self::Widget ) { ... } }
Available on crate feature view only.
Expand description

View widget driver

This trait is implemented to “drive” a ListView or MatrixView, constructing, updating, and optionally intercepting messages from so called “view widgets”. A few simple implementations are provided: View, NavView.

Each view widget has an Id corresponding to its data item, and handles events like any other widget. In order to associate a returned message with a SharedData::Key, either embed that key while constructing the widget with Driver::make or intercept the message in Driver::on_messages.

NOTE: Item is a direct type parameter (in addition to an assoc. type param. of SharedData) only to avoid “conflicting implementations” errors. Similar to: rust#20400, rust#92894. Given fixes, we may remove the param.

Required Associated Types§

source

type Widget: Widget<Data = Item>

Type of the widget used to view data

Required Methods§

source

fn make(&mut self, key: &<Data as SharedData>::Key) -> Self::Widget

Construct a new view widget

Provided Methods§

source

fn set_key( &mut self, widget: &mut Self::Widget, key: &<Data as SharedData>::Key )

Called to bind an existing view widget to a new key

This should reset widget metadata, for example so that when a view widget with a text selection is assigned to a new key it does not attempt to apply the old selection to the new text.

This does not need to set data; Events::update does that.

The default implementation simply replaces widget with self.make(key), which is sufficient, if not always optimal.

source

fn on_messages( &mut self, cx: &mut EventCx<'_>, data: &Data, key: &<Data as SharedData>::Key, widget: &mut Self::Widget )

Handle a message from a widget

This method is called when a view widget returns a message. Often it won’t be used, but it may, for example, pop a message then push a new one with the associated key.

Default implementation: do nothing.

Implementations on Foreign Types§

source§

impl<T, Item, Data> Driver<Item, Data> for &mut T
where T: Driver<Item, Data> + ?Sized, Data: SharedData<Item = Item>,

§

type Widget = <T as Driver<Item, Data>>::Widget

source§

fn make( &mut self, key: &<Data as SharedData>::Key ) -> <&mut T as Driver<Item, Data>>::Widget

source§

fn set_key( &mut self, widget: &mut <&mut T as Driver<Item, Data>>::Widget, key: &<Data as SharedData>::Key )

source§

fn on_messages( &mut self, cx: &mut EventCx<'_>, data: &Data, key: &<Data as SharedData>::Key, widget: &mut <&mut T as Driver<Item, Data>>::Widget )

source§

impl<T, Item, Data> Driver<Item, Data> for Box<T>
where T: Driver<Item, Data> + ?Sized, Data: SharedData<Item = Item>,

§

type Widget = <T as Driver<Item, Data>>::Widget

source§

fn make( &mut self, key: &<Data as SharedData>::Key ) -> <Box<T> as Driver<Item, Data>>::Widget

source§

fn set_key( &mut self, widget: &mut <Box<T> as Driver<Item, Data>>::Widget, key: &<Data as SharedData>::Key )

source§

fn on_messages( &mut self, cx: &mut EventCx<'_>, data: &Data, key: &<Data as SharedData>::Key, widget: &mut <Box<T> as Driver<Item, Data>>::Widget )

Implementors§

source§

impl<Data> Driver<&'static str, Data> for NavView
where Data: SharedData<Item = &'static str>,

§

type Widget = NavFrame<Text<&'static str, String>>

source§

impl<Data> Driver<&'static str, Data> for View
where Data: SharedData<Item = &'static str>,

§

type Widget = Text<&'static str, String>

source§

impl<Data> Driver<bool, Data> for NavView
where Data: SharedData<Item = bool>,

source§

impl<Data> Driver<bool, Data> for View
where Data: SharedData<Item = bool>,

source§

impl<Data> Driver<f32, Data> for NavView
where Data: SharedData<Item = f32>,

source§

impl<Data> Driver<f32, Data> for View
where Data: SharedData<Item = f32>,

source§

impl<Data> Driver<f64, Data> for NavView
where Data: SharedData<Item = f64>,

source§

impl<Data> Driver<f64, Data> for View
where Data: SharedData<Item = f64>,

source§

impl<Data> Driver<i8, Data> for NavView
where Data: SharedData<Item = i8>,

source§

impl<Data> Driver<i8, Data> for View
where Data: SharedData<Item = i8>,

source§

impl<Data> Driver<i16, Data> for NavView
where Data: SharedData<Item = i16>,

source§

impl<Data> Driver<i16, Data> for View
where Data: SharedData<Item = i16>,

source§

impl<Data> Driver<i32, Data> for NavView
where Data: SharedData<Item = i32>,

source§

impl<Data> Driver<i32, Data> for View
where Data: SharedData<Item = i32>,

source§

impl<Data> Driver<i64, Data> for NavView
where Data: SharedData<Item = i64>,

source§

impl<Data> Driver<i64, Data> for View
where Data: SharedData<Item = i64>,

source§

impl<Data> Driver<i128, Data> for NavView
where Data: SharedData<Item = i128>,

source§

impl<Data> Driver<i128, Data> for View
where Data: SharedData<Item = i128>,

source§

impl<Data> Driver<isize, Data> for NavView
where Data: SharedData<Item = isize>,

source§

impl<Data> Driver<isize, Data> for View
where Data: SharedData<Item = isize>,

source§

impl<Data> Driver<u8, Data> for NavView
where Data: SharedData<Item = u8>,

source§

impl<Data> Driver<u8, Data> for View
where Data: SharedData<Item = u8>,

source§

impl<Data> Driver<u16, Data> for NavView
where Data: SharedData<Item = u16>,

source§

impl<Data> Driver<u16, Data> for View
where Data: SharedData<Item = u16>,

source§

impl<Data> Driver<u32, Data> for NavView
where Data: SharedData<Item = u32>,

source§

impl<Data> Driver<u32, Data> for View
where Data: SharedData<Item = u32>,

source§

impl<Data> Driver<u64, Data> for NavView
where Data: SharedData<Item = u64>,

source§

impl<Data> Driver<u64, Data> for View
where Data: SharedData<Item = u64>,

source§

impl<Data> Driver<u128, Data> for NavView
where Data: SharedData<Item = u128>,

source§

impl<Data> Driver<u128, Data> for View
where Data: SharedData<Item = u128>,

source§

impl<Data> Driver<usize, Data> for NavView
where Data: SharedData<Item = usize>,

source§

impl<Data> Driver<usize, Data> for View
where Data: SharedData<Item = usize>,

source§

impl<Data> Driver<String, Data> for NavView
where Data: SharedData<Item = String>,

source§

impl<Data> Driver<String, Data> for View
where Data: SharedData<Item = String>,