use crate::ContainerChild;
use gtk::prelude::*;
pub trait RelmRemoveExt: ContainerChild {
fn container_remove(&self, child: &impl AsRef<Self::Child>);
}
macro_rules! remove_impl {
($($type:ty),+) => {
$(
impl RelmRemoveExt for $type {
fn container_remove(&self, widget: &impl AsRef<Self::Child>) {
let self_ref: >k::Container = self.upcast_ref();
if widget.as_ref().parent().as_ref() == Some(self_ref.upcast_ref()) {
self_ref.remove(widget.as_ref());
}
}
}
)+
}
}
remove_impl! {
gtk::Box,
gtk::Fixed,
gtk::Grid,
gtk::ActionBar,
gtk::Stack,
gtk::HeaderBar,
gtk::ListBox,
gtk::FlowBox,
gtk::InfoBar,
gtk::Window,
gtk::ApplicationWindow
}
pub trait RelmRemoveAllExt {
fn remove_all(&self);
}
macro_rules! remove_all_impl {
($($type:ty),+) => {
$(
impl RelmRemoveAllExt for $type {
fn remove_all(&self) {
let self_ref: >k::Container = self.upcast_ref();
let children: Vec<gtk::Widget> = self_ref.children();
for child in children {
self_ref.remove(&child);
}
}
}
)+
}
}
remove_all_impl! {
gtk::Box,
gtk::FlowBox,
gtk::Stack,
gtk::Grid
}
impl RelmRemoveAllExt for gtk::ListBox {
fn remove_all(&self) {
let self_ref: >k::Container = self.upcast_ref();
let children: Vec<gtk::Widget> = self_ref.children();
for child in children {
self_ref.remove(&child);
}
}
}