pub struct ComboBox { /* private fields */ }Available on crate feature
winio only.Expand description
A simple combo box.
Implementations§
Source§impl ComboBox
impl ComboBox
Sourcepub fn selection(&self) -> Result<Option<usize>, Error>
pub fn selection(&self) -> Result<Option<usize>, Error>
The selection index.
Examples found in repository?
examples/options/options.rs (line 127)
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 195)
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 }Sourcepub fn set_selection(&mut self, i: usize) -> Result<(), Error>
pub fn set_selection(&mut self, i: usize) -> Result<(), Error>
Set the selection.
Examples found in repository?
examples/options/options.rs (lines 64-67)
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 is_editable(&self) -> Result<bool, Error>
pub fn is_editable(&self) -> Result<bool, Error>
If the combo box is editable.
Sourcepub fn set(&mut self, i: usize, s: impl AsRef<str>) -> Result<(), Error>
pub fn set(&mut self, i: usize, s: impl AsRef<str>) -> Result<(), Error>
Set the item by index.
Sourcepub fn insert(&mut self, i: usize, s: impl AsRef<str>) -> Result<(), Error>
pub fn insert(&mut self, i: usize, s: impl AsRef<str>) -> Result<(), Error>
Insert an item by index.
Examples found in repository?
examples/options/options.rs (line 51)
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 }Trait Implementations§
Source§impl AsWidget for ComboBox
impl AsWidget for ComboBox
Source§fn as_widget(&self) -> BorrowedWidget<'_>
fn as_widget(&self) -> BorrowedWidget<'_>
Get the widget handle.
Source§impl Component for ComboBox
impl Component for ComboBox
Source§type Event = ComboBoxEvent
type Event = ComboBoxEvent
The output event type to the parent.
Source§type Init<'a> = BorrowedContainer<'a>
type Init<'a> = BorrowedContainer<'a>
Initial parameter type.
Source§type Message = ComboBoxMessage
type Message = ComboBoxMessage
The input message type to update.
Source§async fn init(
init: <ComboBox as Component>::Init<'_>,
_sender: &ComponentSender<ComboBox>,
) -> Result<ComboBox, Error>
async fn init( init: <ComboBox as Component>::Init<'_>, _sender: &ComponentSender<ComboBox>, ) -> Result<ComboBox, Error>
Create the initial component.
Source§async fn update(
&mut self,
message: <ComboBox as Component>::Message,
_sender: &ComponentSender<ComboBox>,
) -> Result<bool, Error>
async fn update( &mut self, message: <ComboBox as Component>::Message, _sender: &ComponentSender<ComboBox>, ) -> Result<bool, Error>
Respond to the message. Return true if need render.
Source§fn render(&mut self, sender: &ComponentSender<Self>) -> Result<(), Self::Error>
fn render(&mut self, sender: &ComponentSender<Self>) -> Result<(), Self::Error>
Render the widgets.
Source§impl Layoutable for ComboBox
impl Layoutable for ComboBox
Source§impl TextWidget for ComboBox
impl TextWidget for ComboBox
Auto Trait Implementations§
impl Freeze for ComboBox
impl RefUnwindSafe for ComboBox
impl !Send for ComboBox
impl !Sync for ComboBox
impl Unpin for ComboBox
impl UnsafeUnpin for ComboBox
impl UnwindSafe for ComboBox
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> 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