use std::convert::{TryFrom, TryInto};
use ncursesw::WINDOW;
use crate::{
Origin, Size, NCurseswWinError, window::Window,
gen::{HasHandle, HasYXAxis, NCurseswWindow, IsWindow}
};
pub trait CanSubWindow: HasHandle<WINDOW> + HasYXAxis + NCurseswWindow + IsWindow {
fn subwin(&self, size: Size, origin: Origin) -> result!(Window) {
Ok(Window::_from(self._screen(), ncursesw::subwin(self._handle(), size.try_into()?, origin.try_into()?)?, true))
}
fn getparent(&self) -> Option<Window> {
ncursesw::wgetparent(self._handle()).map(|ptr| Window::_from(self._screen(), ptr, false))
}
fn getparx(&self) -> result!(u16) {
Ok(u16::try_from(ncursesw::getparx(self._handle())?)?)
}
fn getpary(&self) -> result!(u16) {
Ok(u16::try_from(ncursesw::getpary(self._handle())?)?)
}
fn getparyx(&self) -> result!(Origin) {
Origin::try_from(ncursesw::getparyx(self._handle())?)
}
}