#[macro_export]
macro_rules! report_error {
($status_view:expr, $res_val:expr) => {
match $res_val {
Ok(v) => v,
Err(error) => {
$status_view.report_error(error);
return;
}
}
}
}
#[macro_export]
macro_rules! select_view {
($($label:expr => $item:expr), *) => {
{
let mut temp_sv = $crate::siv::views::SelectView::new();
$( temp_sv.add_item($label, $item); )*
temp_sv
}
};
($($label:expr), *) => {
select_view!($($label => $label), *)
}
}
#[cfg(feature = "advanced")]
#[macro_export]
macro_rules! adv_select_view {
($($label:expr => $item:expr), *) => {
{
let mut temp_sv = $crate::AdvancedSelectView::new();
$( temp_sv.add_item($label, $item); )*
temp_sv
}
};
($($label:expr), *) => {
adv_select_view!($($label => $label), *)
}
}
#[cfg(feature = "tabs")]
#[macro_export]
macro_rules! tabs {
($($title:expr => $view:expr), *) => {
$crate::TabDialog::new()
$( .tab($title, $view) ) *
}
}
#[cfg(feature = "tabs")]
#[macro_export]
macro_rules! tab_layer {
($($title:expr => $view:expr), *) => {
$crate::TabLayer::new()
$( .tab($title, $view) ) *
}
}
#[macro_export]
macro_rules! hlayout {
($($view:expr), *) => {
$crate::siv::views::LinearLayout::horizontal()
$( .child($view) )*
};
}
#[macro_export]
macro_rules! vlayout {
($($view:expr), *) => {
$crate::siv::views::LinearLayout::vertical()
$( .child($view) )*
};
}
#[macro_export]
macro_rules! c_focus {
($view:expr) => {
$crate::siv::views::CircularFocus::new($view).wrap_arrows()
}
}
#[macro_export]
macro_rules! settings {
($title:expr, $save_cb:expr, $($view:expr), *) => {
$crate::__settings_internal!($title, "Save", $save_cb $(, $view)*)
};
}
#[macro_export]
macro_rules! settings_cb {
($title:expr, $c_bt:expr, $save_cb:expr, $($view:expr), *) => {
$crate::__settings_internal!($title, $c_bt, $save_cb $(, $view)*)
};
}
#[macro_export(local_inner_macros)]
#[doc(hidden)]
macro_rules! __settings_internal {
($title:expr, $c_bt:expr, $save_cb:expr, $($view:expr), *) => {
{
use $crate::siv::{
traits::{With as _, Scrollable as _},
views::{Dialog, OnEventView},
event::{Key, Event}
};
$crate::c_focus!(
Dialog::around(
$crate::vlayout!($($view), *)
.scrollable()
.scroll_x(true)
)
.dismiss_button("Back")
.button($c_bt, $save_cb)
.title($title)
.wrap_with(OnEventView::new)
.on_event(Event::Key(Key::Esc), |r| {
if r.screen().len() <= 1 {
r.quit();
}
else {
r.pop_layer();
}
})
)
}
};
}