adw_combo_row/
adw_combo_row.rs1use adw::prelude::*;
2use relm4::{
3 Component, ComponentController, ComponentParts, ComponentSender, Controller, RelmApp,
4 SimpleComponent, adw, gtk,
5};
6use relm4_components::simple_adw_combo_row::SimpleComboRow;
7
8#[derive(Debug)]
9enum AppMsg {
10 Selected(usize),
11}
12
13struct App {
14 combo_row: Controller<SimpleComboRow<&'static str>>,
15 selected_variant: usize,
16}
17
18#[relm4::component]
19impl SimpleComponent for App {
20 type Init = ();
21 type Input = AppMsg;
22 type Output = ();
23
24 view! {
25 #[name = "app"]
26 adw::Window {
27 set_default_size: (300, 100),
28 set_title: Some("Libadwaita SimpleComboRow"),
29
30 gtk::Box {
31 set_orientation: gtk::Orientation::Vertical,
32 set_vexpand: true,
33
34 #[name = "sidebar_header"]
35 adw::HeaderBar {
36 #[wrap(Some)]
37 set_title_widget = &adw::WindowTitle {
38 set_title: "Libadwaita SimpleComboRow",
39 },
40 set_show_end_title_buttons: false,
41 },
42
43 adw::PreferencesGroup {
44 #[local_ref]
45 combo_row -> adw::ComboRow,
46 },
47
48 gtk::Text {
49 #[watch]
50 set_text: &format!("Variant {}", model.selected_variant + 1),
51 }
52 },
53 }
54 }
55
56 fn update(&mut self, msg: Self::Input, _: ComponentSender<Self>) {
57 match msg {
58 AppMsg::Selected(selected) => self.selected_variant = selected,
59 }
60 }
61
62 fn init(
63 _: Self::Init,
64 root: Self::Root,
65 sender: ComponentSender<Self>,
66 ) -> ComponentParts<Self> {
67 let model = App {
68 combo_row: SimpleComboRow::builder()
69 .launch(SimpleComboRow {
70 variants: vec!["Variant 1", "Variant 2"],
71 active_index: None,
72 })
73 .forward(sender.input_sender(), AppMsg::Selected),
74 selected_variant: 0,
75 };
76
77 let combo_row = model.combo_row.widget();
78 let widgets = view_output!();
79
80 ComponentParts { model, widgets }
81 }
82}
83
84fn main() {
85 let app = RelmApp::new("relm4.example.adw_combo_box");
86 app.run::<App>(());
87}