use std::convert::{TryFrom, TryInto};
use ncursesw::{ChtypeChar, ComplexChar, WideString, WINDOW};
use crate::{Origin, NCurseswWinError, gen::{HasHandle, HasYXAxis}};
pub trait HasMvInsFunctions: HasHandle<WINDOW> + HasYXAxis {
fn mvinsch(&self, origin: Origin, ch: ChtypeChar) -> result!(()) {
assert_origin!("mvinsch", self.size()?, origin);
Ok(ncursesw::mvwinsch(self._handle(), origin.try_into()?, ch)?)
}
fn mvinsnstr<S: Into<String>>(&self, origin: Origin, str: S, length: Option<u16>) -> result!(()) {
assert_origin!("mvinsnstr", self.size()?, origin);
Ok(ncursesw::mvwinsnstr(self._handle(), origin.try_into()?, str, option_length!(length)?)?)
}
fn mvins_nwstr(&self, origin: Origin, wstr: &WideString, length: Option<u16>) -> result!(()) {
assert_origin!("mvins_nwstr", self.size()?, origin);
Ok(ncursesw::mvwins_nwstr(self._handle(), origin.try_into()?, wstr, option_length!(length)?)?)
}
fn mvinsstr<S: Into<String>>(&self, origin: Origin, str: S) -> result!(()) {
assert_origin!("mvinsstr", self.size()?, origin);
Ok(ncursesw::mvwinsstr(self._handle(), origin.try_into()?, str)?)
}
fn mvins_wch(&self, origin: Origin, wch: ComplexChar) -> result!(()) {
assert_origin!("mvins_wch", self.size()?, origin);
Ok(ncursesw::mvwins_wch(self._handle(), origin.try_into()?, wch)?)
}
fn mvins_wstr(&self, origin: Origin, wstr: &WideString) -> result!(()) {
assert_origin!("mvins_wstr", self.size()?, origin);
Ok(ncursesw::mvwins_wstr(self._handle(), origin.try_into()?, wstr)?)
}
}