use crate::{callback as cbk, error::{FtuiError, FtuiResult}};
use unicode_segmentation::UnicodeSegmentation;
pub struct Option {
label: String,
len: usize,
line: u16,
id: u16,
selc_on: bool,
is_selc: bool,
callback: std::option::Option<cbk::Callback>,
}
impl Option {
pub fn new(
label: &str, callback: impl Into<std::option::Option<cbk::Callback>>
) -> FtuiResult<Self> {
if label.is_empty() {
return Err(FtuiError::OptionLabelEmpty);
}
Ok(Option {
label: label.to_string(),
len: label.graphemes(true).count(),
id: 0,
line: 0,
selc_on: false,
is_selc: false,
callback: callback.into(),
})
}
pub(crate) fn set_line(&mut self, line: u16) {
self.line = line;
}
pub(crate) fn line(&self) -> u16 {
return self.line;
}
pub(crate) fn label(&self) -> &String {
return &self.label;
}
pub(crate) fn len(&self) -> usize {
return self.len;
}
pub(crate) fn selc_on(&self) -> bool {
return self.selc_on;
}
pub(crate) fn callback(&self) -> &std::option::Option<cbk::Callback> {
return &self.callback;
}
pub(crate) fn set_selc_on(&mut self, value: bool) {
self.selc_on = value;
}
pub fn is_selc(&mut self) -> bool {
std::mem::take(&mut self.is_selc)
}
pub(crate) fn set_is_selc(&mut self, value: bool) {
self.is_selc = value;
}
pub(crate) fn id(&self) -> u16 {
self.id
}
pub(crate) fn set_id(&mut self, value: u16) {
self.id = value;
}
}