use crate::prelude::*;
macro_rules! impl_text_entry {
($self_fn:ident $libui_fn:ident) => {
impl Ui {
pub fn $self_fn<'ui>(&'ui self) -> Result<&'ui mut MultilineTextEntry, crate::Error> {
unsafe { call_libui_new_fn!(ui: self, fn: $libui_fn() -> MultilineTextEntry) }
}
}
};
}
impl_text_entry!(create_wrapping_multiline_text_entry uiNewMultilineEntry);
impl_text_entry!(create_non_wrapping_multiline_text_entry uiNewNonWrappingMultilineEntry);
#[subcontrol(handle = "uiMultilineEntry")]
pub struct MultilineTextEntry;
impl<'ui> MultilineTextEntry<'ui> {
#[bind_text(fn = "uiMultilineEntryText")]
pub fn text(&self) -> _;
pub fn set_text(&self, text: impl Into<Vec<u8>>) -> Result<(), crate::Error> {
let text = self.ui.make_cstring(text)?;
unsafe { uiMultilineEntrySetText(self.as_ptr(), text.as_ptr()) };
Ok(())
}
pub fn push_text(&self, text: impl Into<Vec<u8>>) -> Result<(), crate::Error> {
let text = self.ui.make_cstring(text)?;
unsafe { uiMultilineEntryAppend(self.as_ptr(), text.as_ptr()) };
Ok(())
}
#[bind_callback(fn = "uiMultilineEntryOnChanged")]
pub fn on_changed(&self, f: fn()) {
f();
}
#[inline]
pub fn is_read_only(&self) -> bool {
bool_from_libui(unsafe { uiMultilineEntryReadOnly(self.as_ptr()) })
}
#[inline]
pub fn set_read_only(&self, value: bool) {
unsafe { uiMultilineEntrySetReadOnly(self.as_ptr(), value.into()) };
}
}