use std::{fmt, convert::{TryFrom, TryInto}};
use ncursesw;
use crate::NCurseswWinError;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct MenuSize {
pub rows: u16,
pub columns: u16
}
impl Default for MenuSize {
fn default() -> Self {
let default = ncursesw::menu::MenuSize::default();
let rows = if let Ok(rows) = u16::try_from(default.rows) {
rows
} else {
16
};
let columns = if let Ok(columns) = u16::try_from(default.columns) {
columns
} else {
1
};
Self { rows, columns }
}
}
impl TryInto<ncursesw::menu::MenuSize> for MenuSize {
type Error = NCurseswWinError;
fn try_into(self) -> Result<ncursesw::menu::MenuSize, Self::Error> {
Ok(ncursesw::menu::MenuSize { rows: u16::try_into(self.rows)?, columns: u16::try_into(self.columns)? })
}
}
impl TryFrom<ncursesw::menu::MenuSize> for MenuSize {
type Error = NCurseswWinError;
fn try_from(menu_size: ncursesw::menu::MenuSize) -> Result<Self, Self::Error> {
Ok(Self { rows: u16::try_from(menu_size.rows)?, columns: u16::try_from(menu_size.columns)? })
}
}
impl fmt::Display for MenuSize {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "(rows: {}, columns: {})", self.rows, self.columns)
}
}