use super::Menu;
use crate::prelude::*;
impl<'ui> Menu<'ui> {
pub fn push_item(&self, text: impl Into<Vec<u8>>) -> Result<&'ui mut Item, crate::Error> {
let text = self.ui.make_cstring(text)?;
unsafe {
call_libui_new_fn!(
ui: self.ui,
fn: uiMenuAppendItem(self.as_ptr(), text.as_ptr()) -> Item,
)
}
}
pub fn push_check_item(&self, text: impl Into<Vec<u8>>) -> Result<&'ui mut Item, crate::Error> {
let text = self.ui.make_cstring(text)?;
unsafe {
call_libui_new_fn!(
ui: self.ui,
fn: uiMenuAppendCheckItem(self.as_ptr(), text.as_ptr()) -> Item,
)
}
}
pub fn push_quit_item(&self) -> Result<&'ui mut Item, crate::Error> {
unsafe { call_libui_new_fn!(ui: self.ui, fn: uiMenuAppendQuitItem(self.as_ptr()) -> Item) }
}
pub fn push_preferences_item(&self) -> Result<&'ui mut Item, crate::Error> {
unsafe {
call_libui_new_fn!(ui: self.ui, fn: uiMenuAppendPreferencesItem(self.as_ptr()) -> Item)
}
}
pub fn push_about_item(&self) -> Result<&'ui mut Item, crate::Error> {
unsafe { call_libui_new_fn!(ui: self.ui, fn: uiMenuAppendAboutItem(self.as_ptr()) -> Item) }
}
}
impl<'ui> Item<'ui> {
unsafe fn from_ptr(ui: &'ui Ui, ptr: *mut uiMenuItem) -> Self {
Self { ui, ptr }
}
}
#[derive(Widget)]
#[widget(handle = "uiMenuItem")]
pub struct Item<'ui> {
ui: &'ui Ui,
ptr: *mut uiMenuItem,
}
impl<'ui> Item<'ui> {
pub fn enable(&self) {
unsafe { uiMenuItemEnable(self.as_ptr()) };
}
pub fn disable(&self) {
unsafe { uiMenuItemDisable(self.as_ptr()) };
}
#[bind_callback(fn = "uiMenuItemOnClicked")]
pub fn on_clicked(&self, f: fn(*mut uiWindow)) {
f();
}
pub fn is_checked(&self) -> bool {
bool_from_libui(unsafe { uiMenuItemChecked(self.as_ptr()) })
}
pub fn set_checked(&self, value: bool) {
unsafe { uiMenuItemSetChecked(self.as_ptr(), value.into()) };
}
}