pub struct ComponentSender<T>(/* private fields */)
where
T: Component;Available on crate feature
winio only.Expand description
Sender of input messages and output events.
Implementations§
Source§impl<T> ComponentSender<T>where
T: Component,
impl<T> ComponentSender<T>where
T: Component,
Sourcepub fn post(&self, message: <T as Component>::Message)
pub fn post(&self, message: <T as Component>::Message)
Post the message to the queue.
Examples found in repository?
examples/options/options.rs (line 72)
35 async fn init(
36 mut init: Self::Init<'_>,
37 sender: &ComponentSender<Self>,
38 ) -> Result<Self, Self::Error> {
39 let mut window = init.window(sender).await?;
40 // window.set_size(Size::new(800.0, 600.0));
41
42 let mut enabled = Child::<CheckBox>::init(&window).await?;
43 enabled.set_text("Enable");
44
45 let mut b = Child::<CheckBox>::init(&window).await?;
46 b.set_text("Switch");
47
48 let mut e_label = Child::<Label>::init(&window).await?;
49 e_label.set_text("Mode:");
50 let mut e = Child::<ComboBox>::init(&window).await?;
51 e.insert(0, "A");
52 e.insert(1, "B");
53
54 let mut s_label = Child::<Label>::init(&window).await?;
55 s_label.set_text("Message:");
56 let mut s = Child::<Edit>::init(&window).await?;
57
58 HANDLER.with_app(|a| {
59 let config = a.config();
60
61 enabled.set_checked(config.enabled);
62 b.set_checked(config.b);
63
64 e.set_selection(match config.e {
65 Mode::A => 0,
66 Mode::B => 1,
67 });
68
69 s.set_text(&config.s);
70 });
71
72 sender.post(MainMessage::EnabledClick);
73
74 window.show();
75
76 Ok(Self {
77 window,
78 enabled,
79 b,
80 s_label,
81 s,
82 e_label,
83 e,
84 })
85 }Sourcepub fn output(&self, event: <T as Component>::Event)
pub fn output(&self, event: <T as Component>::Event)
Post the event to the queue.
Examples found in repository?
examples/options/options.rs (line 121)
101 async fn update(
102 &mut self,
103 message: Self::Message,
104 sender: &ComponentSender<Self>,
105 ) -> Result<bool, Self::Error> {
106 // futures_util::join!(self.window.update());
107 Ok(match message {
108 MainMessage::Noop => false,
109 MainMessage::EnabledClick => {
110 let enabled = self.enabled.is_checked()?;
111 self.b.set_enabled(enabled);
112 self.e.set_enabled(enabled);
113 self.s.set_enabled(enabled);
114 false
115 }
116 MainMessage::OptionsPage(m) => {
117 tracing::debug!(?m, "Options page message");
118 match m {
119 OptionsPageMessage::Redraw => true,
120 OptionsPageMessage::Close => {
121 sender.output(());
122 false
123 }
124 OptionsPageMessage::Save(config, tx) => {
125 config.enabled = self.enabled.is_checked()?;
126 config.b = self.b.is_checked()?;
127 config.e = match self.e.selection()? {
128 Some(0) => Mode::A,
129 Some(1) => Mode::B,
130 _ => Default::default(),
131 };
132 config.s = self.s.text()?;
133 tx.send(config).unwrap();
134 false
135 }
136 }
137 }
138 })
139 }More examples
examples/test/widgets.rs (line 230)
176 async fn update(
177 &mut self,
178 message: Self::Message,
179 sender: &ComponentSender<Self>,
180 ) -> Result<bool, Self::Error> {
181 // futures_util::future::join(self.window.update(), self.canvas.update()).await;
182 Ok(match message {
183 MainMessage::Noop => false,
184 MainMessage::PasswordCheck => {
185 self.pentry.set_password(!self.pcheck.is_checked()?);
186 true
187 }
188 MainMessage::List(e) => {
189 self.pop_button.set_enabled(!self.list.is_empty());
190 self.combo
191 .emit(ComboBoxMessage::from_observable_vec_event(e))
192 .await?
193 }
194 MainMessage::Select => {
195 self.index = self.combo.selection()?;
196 false
197 }
198 MainMessage::Push => {
199 self.list.push(self.radio_group[self.rindex].text()?);
200 false
201 }
202 MainMessage::Pop => {
203 self.list.pop();
204 false
205 }
206 MainMessage::RSelect(i) => {
207 self.rindex = i;
208 false
209 }
210 MainMessage::Show => {
211 MessageBox::new()
212 .title("Show selected item")
213 .message(
214 self.index
215 .and_then(|index| self.list.get(index))
216 .map(|s| s.as_str())
217 .unwrap_or("No selection."),
218 )
219 .buttons(MessageBoxButton::Ok)
220 // https://github.com/compio-rs/winio/issues/105
221 .show(unsafe { BorrowedWindow::win32(self.window.as_container().as_win32()) })
222 .await;
223 false
224 }
225 MainMessage::OptionsPage(m) => {
226 tracing::debug!(?m, "Options page message");
227 match m {
228 OptionsPageMessage::Redraw => true,
229 OptionsPageMessage::Close => {
230 sender.output(());
231 false
232 }
233 OptionsPageMessage::Save(config, tx) => {
234 config.s = self.mltext.text()?;
235 tx.send(config).unwrap();
236 false
237 }
238 }
239 }
240 })
241 }Trait Implementations§
Source§impl<T> Clone for ComponentSender<T>where
T: Component,
impl<T> Clone for ComponentSender<T>where
T: Component,
Source§fn clone(&self) -> ComponentSender<T>
fn clone(&self) -> ComponentSender<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<T> Freeze for ComponentSender<T>
impl<T> RefUnwindSafe for ComponentSender<T>
impl<T> Send for ComponentSender<T>
impl<T> Sync for ComponentSender<T>
impl<T> Unpin for ComponentSender<T>
impl<T> UnsafeUnpin for ComponentSender<T>
impl<T> UnwindSafe for ComponentSender<T>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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