Struct vizia_core::views::Dropdown
source · pub struct Dropdown;
Expand description
A dropdown is used to display some state with the ability to open a popup with options to change that state.
Usually a dropdown is used in the context of a “combobox” or “picklist” to allow the user to select from one of several discrete options. The dropdown takes two closures, one which shows the current state regardless of whether the dropdown is open or closed, and one which shows the contents while it is open.
§Basic Dropdown
A basic dropdown displaying five options that the user can choose from.
Dropdown::new(
cx,
|cx| Label::new(cx, AppData::value),
|cx| {
for i in 0..5 {
Label::new(cx, i)
.on_press(move |cx| {
cx.emit(AppEvent::SetValue(i));
cx.emit(PopupEvent::Close); // close the popup
})
.width(Stretch(1.0));
}
},
)
.width(Pixels(100.0));
The line marked “close the popup” is not required for anything other than closing the popup - if you leave it out, the popup will simply not close until the user clicks out of the dropdown.
§Custom Dropdown
The dropdown doesn’t have to be the current state and then a set of options - it can contain any set of views in either location. Here’s an example where you can use a textbox to filter a list of checkboxes which pop up when you click the textbox:
#[derive(Lens, Clone, PartialEq, Eq)]
struct AppData {
values: [bool; 6],
filter: String,
}
Dropdown::new(cx, |cx| {
Textbox::new(cx, AppData::filter).on_edit(|cx, text| {
cx.emit(AppEvent::SetFilter(text));
})
.width(Pixels(100.0))
.height(Pixels(30.0))
}, |cx| {
Binding::new(cx, AppData::root, |cx, lens| {
let current = lens.get(cx);
for i in 0..6 {
if LABELS[i].to_lowercase().contains(¤t.filter.to_lowercase()) {
HStack::new(cx, move |cx| {
Checkbox::new(cx, AppData::values.map(move |x| x[i]))
.on_toggle(move |cx| {
cx.emit(AppEvent::SetValue(i, !current.values[i]));
});
Label::new(cx, LABELS[i]);
});
}
}
});
}).width(Pixels(100.0));
Implementations§
Trait Implementations§
source§impl View for Dropdown
impl View for Dropdown
source§fn element(&self) -> Option<&'static str>
fn element(&self) -> Option<&'static str>
source§fn build<F>(self, cx: &mut Context, content: F) -> Handle<'_, Self>
fn build<F>(self, cx: &mut Context, content: F) -> Handle<'_, Self>
source§fn event(&mut self, cx: &mut EventContext<'_>, event: &mut Event)
fn event(&mut self, cx: &mut EventContext<'_>, event: &mut Event)
source§fn draw(&self, cx: &mut DrawContext<'_>, canvas: &Canvas)
fn draw(&self, cx: &mut DrawContext<'_>, canvas: &Canvas)
fn accessibility(&self, cx: &mut AccessContext<'_>, node: &mut AccessNode)
Auto Trait Implementations§
impl Freeze for Dropdown
impl RefUnwindSafe for Dropdown
impl Send for Dropdown
impl Sync for Dropdown
impl Unpin for Dropdown
impl UnwindSafe for Dropdown
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.