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 TextEntry, crate::Error> {
unsafe { call_libui_new_fn!(ui: self, fn: $libui_fn() -> TextEntry) }
}
}
};
}
impl_text_entry!(create_text_entry uiNewEntry);
impl_text_entry!(create_password_text_entry uiNewPasswordEntry);
impl_text_entry!(create_search_text_entry uiNewSearchEntry);
#[subcontrol(handle = "uiEntry")]
pub struct TextEntry;
impl<'ui> TextEntry<'ui> {
#[bind_text(fn = "uiEntryText")]
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 { uiEntrySetText(self.as_ptr(), text.as_ptr()) };
Ok(())
}
#[bind_callback(fn = "uiEntryOnChanged")]
pub fn on_changed(&self, f: fn()) {
f();
}
#[inline]
pub fn is_read_only(&self) -> bool {
bool_from_libui(unsafe { uiEntryReadOnly(self.as_ptr()) })
}
#[inline]
pub fn set_read_only(&self, value: bool) {
unsafe { uiEntrySetReadOnly(self.as_ptr(), value.into()) };
}
}