1use glasskit::Ui;
9use glasskit::dialog::{Bounds, Dialog, EditStyle, Event, Flow};
10use glasskit::layout::{Column, Size};
11
12fn main() -> glasskit::Result<()> {
13 let ui = Ui::new()?;
14 let (width, height) = (420, 186);
15 let mut d = Dialog::new(&ui, "Profile", width, height)?;
16 let mut rows = Column::new(Bounds::new(0, 0, width, height).inset(16), 10);
17
18 let field = |row: Bounds| row.columns([Size::Fixed(110), Size::Fill(1)], 8);
19 let [label, control] = field(rows.next(26));
20 d.add_label("Name", label)?;
21 let name = d.add_edit(EditStyle::default(), control)?;
22 let [label, control] = field(rows.next(26));
23 d.add_label("Language", label)?;
24 let language = d.add_drop_down(control)?;
25 d.set_items(language, &["English", "Cantonese", "Japanese"]);
26 d.set_selected(language, Some(0));
27 let news = d.add_check("Send me news", rows.next(26))?;
28
29 let [_, save, cancel] = rows
30 .next(30)
31 .columns([Size::Fill(1), Size::Fixed(96), Size::Fixed(96)], 8);
32 let save = d.add_button("Save", save)?;
33 let cancel = d.add_button("Cancel", cancel)?;
34
35 d.run(|d, event| match event {
36 Event::Clicked(id) if id == save => {
37 println!(
38 "{} / {:?} / news: {}",
39 d.text(name),
40 d.selected(language),
41 d.checked(news)
42 );
43 Flow::Close
44 }
45 Event::Submit => Flow::Continue,
46 Event::Clicked(id) if id == cancel => Flow::Close,
47 Event::Close => Flow::Close,
48 _ => Flow::Continue,
49 })?;
50 Ok(())
51}