use objc::{msg_send, runtime::Sel, sel, sel_impl};
use crate::{
foundation::NSString,
object,
objective_c_runtime::{
id, nil,
traits::{FromId, PNSObject},
},
utils::to_bool,
};
use super::{interface_impl, NSMenu};
object! {
unsafe pub struct NSMenuItem;
}
#[interface_impl(NSObject)]
impl NSMenuItem {
#[property]
pub fn is_enabled(&self) -> bool {
unsafe { to_bool(msg_send![self.m_self(), isEnabled]) }
}
#[property]
pub fn set_enabled(&mut self, enabled: bool) {
unsafe { msg_send![self.m_self(), setEnabled: enabled] }
}
#[property]
pub fn is_hidden(&self) -> bool {
unsafe { to_bool(msg_send![self.m_self(), isHidden]) }
}
#[property]
pub fn set_hidden(&mut self, hidden: bool) {
unsafe { msg_send![self.m_self(), setHidden: hidden] }
}
#[property]
pub fn is_hidden_or_has_hidden_ancestor(&self) -> bool {
unsafe { to_bool(msg_send![self.m_self(), isHiddenOrHasHiddenAncestor]) }
}
#[property]
pub fn target(&self) -> id {
unsafe { msg_send![self.m_self(), target] }
}
#[property]
pub fn set_target(&mut self, target: id) {
unsafe { msg_send![self.m_self(), setTarget: target] }
}
#[property]
pub fn action(&self) -> Sel {
unsafe { msg_send![self.m_self(), action] }
}
#[property]
pub fn set_action(&mut self, action: Sel) {
unsafe { msg_send![self.m_self(), setAction: action] }
}
#[property]
pub fn title(&self) -> NSString {
unsafe { NSString::from_id(msg_send![self.m_self(), title]) }
}
#[property]
pub fn set_title(&mut self, title: NSString) {
unsafe { msg_send![self.m_self(), setTitle: title] }
}
#[property]
pub fn submenu(&self) -> NSMenu {
unsafe { NSMenu::from_id(msg_send![self.m_self(), submenu]) }
}
#[property]
pub fn set_submenu(&mut self, submenu: NSMenu) {
unsafe { msg_send![self.m_self(), setSubmenu: submenu] }
}
#[property]
pub fn has_submenu(&self) -> bool {
unsafe { to_bool(msg_send![self.m_self(), hasSubmenu]) }
}
#[property]
pub fn parent_item(&self) -> Option<NSMenuItem> {
unsafe {
let id = msg_send![self.m_self(), parentItem];
if id == nil {
None
} else {
Some(NSMenuItem::from_id(id))
}
}
}
}
impl Default for NSMenuItem {
fn default() -> Self {
Self::m_new()
}
}