use gtk::prelude::*;
use nrelm::prelude::*;
struct Probe;
#[nrelm::component]
impl SimpleComponent for Probe {
type Init = ();
type Input = ();
type Output = ();
view! {
gtk::Window {
set_default_size: (360, 260),
gtk::MenuButton {
set_margin_top: 120,
set_margin_start: 20,
#[name(popover)]
#[wrap(Some)]
set_popover = >k::Popover {
#[name(pop_list_box)]
gtk::ListBox {
set_selection_mode: gtk::SelectionMode::None,
#[name(home_row)]
gtk::ListBoxRow {
gtk::Label { set_label: "#home", set_margin: 6 },
},
#[name(work_row)]
gtk::ListBoxRow {
gtk::Label { set_label: "#work", set_margin: 6 },
},
}
}
}
}
}
fn init(
init: Self::Init,
root: Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let _ = (init, sender);
let widgets = view_output!();
eprintln!("PROBE: init ok");
let home = widgets.home_row.clone();
widgets
.pop_list_box
.connect_row_activated(move |_, activated| {
if activated == &home {
eprintln!("PROBE: POPOVER home-row activated");
} else {
eprintln!("PROBE: POPOVER other row activated");
}
});
widgets.popover.popup();
let l = widgets.pop_list_box.clone();
let h = widgets.home_row.clone();
let w = widgets.work_row.clone();
let pv = widgets.popover.clone();
gtk::glib::timeout_add_local_once(std::time::Duration::from_millis(1200), move || {
eprintln!("PROBE: pop_list_box = {:?}", l.allocation());
eprintln!("PROBE: home_row = {:?}", h.allocation());
eprintln!("PROBE: work_row = {:?}", w.allocation());
if let Some(win) = pv.window() {
let (ox, oy, _) = win.origin();
eprintln!("PROBE: popover window origin = ({},{})", ox, oy);
} else {
eprintln!("PROBE: popover window none");
}
});
ComponentParts {
model: Probe,
widgets,
}
}
}
fn main() {
let app = RelmApp::new("nrelm.probe.popprobe");
app.run::<Probe>(());
}