From 589c3dbc7fb31a7a606cd9bd18a90baebf1c0f88 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Wed, 29 Nov 2023 11:42:51 -0800 Subject: [PATCH] MakeWidget for Dynamic + option --- src/value.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/value.rs b/src/value.rs index 7e898d2..8500fed 100644 --- a/src/value.rs +++ b/src/value.rs @@ -18,7 +18,7 @@ use crate::context::sealed::WindowHandle; use crate::context::{self, WidgetContext}; use crate::utils::{run_in_bg, IgnorePoison, UnwindsafeCondvar, WithClone}; use crate::widget::{MakeWidget, WidgetId, WidgetInstance}; -use crate::widgets::{Radio, Switcher}; +use crate::widgets::{Radio, Space, Switcher}; /// An instance of a value that provides APIs to observe and react to its /// contents. @@ -589,6 +589,23 @@ impl Dynamic { } } +impl MakeWidget for Dynamic { + fn make_widget(self) -> WidgetInstance { + self.switcher().make_widget() + } +} + +impl MakeWidget for Dynamic> { + fn make_widget(self) -> WidgetInstance { + self.map_each(|widget| { + widget + .as_ref() + .map_or_else(|| Space::clear().make_widget(), Clone::clone) + }) + .make_widget() + } +} + impl context::sealed::Trackable for Dynamic { fn redraw_when_changed(&self, handle: WindowHandle) { self.redraw_when_changed(handle);