use cursive::{views::LinearLayout, Cursive};
pub fn remove_view_from_layout(siv: &mut Cursive, view_name: &str, layout_name: &str) {
let result = siv.call_on_name(layout_name, |view: &mut LinearLayout| {
if let Some(i) = view.find_child_from_name(view_name) {
log::debug!("removed '{}' from '{}'", view_name, layout_name);
view.remove_child(i);
}
});
if result.is_none() {
log::warn!("couldn't find a layout with the name '{}'", layout_name);
}
}
#[macro_export]
macro_rules! view_with_theme {
($theme: expr, $view: expr) => {
if let Some(theme) = $theme.as_ref() {
ui::ThemedView::new(theme.to_theme(), $view)
} else {
ui::ThemedView::new(config::CONFIG.theme.to_theme(), $view)
}
};
}
#[macro_export]
macro_rules! override_keybindings {
($view: expr) => {{
let mut event_view = cursive::views::OnEventView::new($view);
if let Some(event_key) = config::CONFIG.keybindings.down.clone() {
log::debug!("registered the '{:?}' key as Down", event_key);
event_view.set_on_pre_event(event_key, |siv: &mut cursive::Cursive| {
siv.on_event(cursive::event::Event::Key(cursive::event::Key::Down))
});
}
if let Some(event_key) = config::CONFIG.keybindings.up.clone() {
log::debug!("registered the '{:?}' key as Up", event_key);
event_view.set_on_pre_event(event_key, |siv: &mut cursive::Cursive| {
siv.on_event(cursive::event::Event::Key(cursive::event::Key::Up))
});
}
if let Some(event_key) = config::CONFIG.keybindings.left.clone() {
log::debug!("registered the '{:?}' key as Left", event_key);
event_view.set_on_pre_event(event_key, |siv: &mut cursive::Cursive| {
siv.on_event(cursive::event::Event::Key(cursive::event::Key::Left))
});
}
if let Some(event_key) = config::CONFIG.keybindings.right.clone() {
log::debug!("registered the '{:?}' key as Right", event_key);
event_view.set_on_pre_event(event_key, |siv: &mut cursive::Cursive| {
siv.on_event(cursive::event::Event::Key(cursive::event::Key::Right))
});
}
event_view
}};
}