grx 0.3.2

Abstraction layer for UI development
Documentation
use gtk::prelude::{Cast, IsA, WidgetExt};

pub fn get_nth_child<T: IsA<gtk::Widget>>(widget: &impl IsA<gtk::Widget>, n: u32) -> Option<T> {
    let mut c = widget.first_child();
    let mut i = 0;
    while let Some(child) = c {
        c = child.next_sibling();
        if i == n {
            child.set_hexpand(true);
            let w = child.downcast::<T>();
            match w {
                Ok(w) => return Some(w),
                Err(e) => {
                    log::warn!("Could not cast child {n} to T: {e}");
                }
            }
        }
        i += 1;
    }
    log::warn!("Could not find {} in {:?}.", n, widget);
    None
}