use crate::{c_api::ffi, NcLogLevel};
use core::ptr::null;
mod builder;
pub(crate) mod flags;
pub use builder::NcOptionsBuilder;
pub use flags::NcFlag;
pub type NcOptions = ffi::notcurses_options;
impl NcOptions {
pub fn builder() -> NcOptionsBuilder {
NcOptionsBuilder::default()
}
pub fn to_builder(&self) -> NcOptionsBuilder {
NcOptionsBuilder::from_options(self)
}
pub fn new() -> Self {
Self::with_all_options(NcLogLevel::Silent, Some((0, 0, 0, 0)), NcFlag::None)
}
pub fn with_margins(top: u32, right: u32, bottom: u32, left: u32) -> Self {
Self::with_all_options(
NcLogLevel::Silent,
Some((top, right, bottom, left)),
NcFlag::None,
)
}
pub fn with_flags(flags: NcFlag) -> Self {
Self::with_all_options(NcLogLevel::Silent, Some((0, 0, 0, 0)), flags)
}
pub fn with_all_options(
loglevel: NcLogLevel,
trbl_margins: Option<(u32, u32, u32, u32)>,
flags: NcFlag,
) -> NcOptions {
let (margin_t, margin_r, margin_b, margin_l) = trbl_margins.unwrap_or((0, 0, 0, 0));
NcOptions {
termtype: null(),
loglevel: loglevel.into(),
margin_t,
margin_r,
margin_b,
margin_l,
flags: flags.into(),
}
}
}
impl NcOptions {
pub fn margins(&self) -> (u32, u32, u32, u32) {
(self.margin_t, self.margin_r, self.margin_b, self.margin_l)
}
pub fn log_level(&self) -> NcLogLevel {
self.loglevel.into()
}
pub fn is_drain_input(&self) -> bool {
self.flags & NcFlag::DrainInput != NcFlag::None
}
pub fn is_inhibit_set_locale(&self) -> bool {
self.flags & NcFlag::InhibitSetLocale != NcFlag::None
}
pub fn is_no_alternate_screen(&self) -> bool {
self.flags & NcFlag::NoAlternateScreen != NcFlag::None
}
pub fn is_no_clear_bitmaps(&self) -> bool {
self.flags & NcFlag::NoClearBitmaps != NcFlag::None
}
pub fn is_no_font_changes(&self) -> bool {
self.flags & NcFlag::NoFontChanges != NcFlag::None
}
pub fn is_no_quit_sig_handlers(&self) -> bool {
self.flags & NcFlag::NoQuitSigHandlers != NcFlag::None
}
pub fn is_no_winch_sig_handler(&self) -> bool {
self.flags & NcFlag::NoWinchSigHandler != NcFlag::None
}
pub fn is_preserve_cursor(&self) -> bool {
self.flags & NcFlag::PreserveCursor != NcFlag::None
}
pub fn is_scrolling(&self) -> bool {
self.flags & NcFlag::Scrolling != NcFlag::None
}
pub fn is_cli_mode(&self) -> bool {
self.flags & NcFlag::CliMode != NcFlag::None
}
pub fn is_suppress_banners(&self) -> bool {
self.flags & NcFlag::SuppressBanners != NcFlag::None
}
}