use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
#[cfg(feature = "objc2-core-foundation")]
use objc2_core_foundation::*;
use objc2_foundation::*;
use crate::*;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSMenuPresentationStyle(pub NSInteger);
impl NSMenuPresentationStyle {
#[doc(alias = "NSMenuPresentationStyleRegular")]
pub const Regular: Self = Self(0);
#[doc(alias = "NSMenuPresentationStylePalette")]
pub const Palette: Self = Self(1);
}
unsafe impl Encode for NSMenuPresentationStyle {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for NSMenuPresentationStyle {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSMenuSelectionMode(pub NSInteger);
impl NSMenuSelectionMode {
#[doc(alias = "NSMenuSelectionModeAutomatic")]
pub const Automatic: Self = Self(0);
#[doc(alias = "NSMenuSelectionModeSelectOne")]
pub const SelectOne: Self = Self(1);
#[doc(alias = "NSMenuSelectionModeSelectAny")]
pub const SelectAny: Self = Self(2);
}
unsafe impl Encode for NSMenuSelectionMode {
const ENCODING: Encoding = NSInteger::ENCODING;
}
unsafe impl RefEncode for NSMenuSelectionMode {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern_class!(
#[unsafe(super(NSObject))]
#[thread_kind = MainThreadOnly]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct NSMenu;
);
#[cfg(feature = "NSAccessibilityProtocols")]
extern_conformance!(
unsafe impl NSAccessibility for NSMenu {}
);
#[cfg(feature = "NSAccessibilityProtocols")]
extern_conformance!(
unsafe impl NSAccessibilityElementProtocol for NSMenu {}
);
#[cfg(feature = "NSAppearance")]
extern_conformance!(
unsafe impl NSAppearanceCustomization for NSMenu {}
);
extern_conformance!(
unsafe impl NSCoding for NSMenu {}
);
extern_conformance!(
unsafe impl NSCopying for NSMenu {}
);
unsafe impl CopyingHelper for NSMenu {
type Result = Self;
}
extern_conformance!(
unsafe impl NSObjectProtocol for NSMenu {}
);
#[cfg(feature = "NSUserInterfaceItemIdentification")]
extern_conformance!(
unsafe impl NSUserInterfaceItemIdentification for NSMenu {}
);
impl NSMenu {
extern_methods!(
#[unsafe(method(initWithTitle:))]
#[unsafe(method_family = init)]
pub fn initWithTitle(this: Allocated<Self>, title: &NSString) -> Retained<Self>;
#[unsafe(method(initWithCoder:))]
#[unsafe(method_family = init)]
pub unsafe fn initWithCoder(this: Allocated<Self>, coder: &NSCoder) -> Retained<Self>;
#[unsafe(method(title))]
#[unsafe(method_family = none)]
pub fn title(&self) -> Retained<NSString>;
#[unsafe(method(setTitle:))]
#[unsafe(method_family = none)]
pub fn setTitle(&self, title: &NSString);
#[cfg(all(feature = "NSEvent", feature = "NSResponder", feature = "NSView"))]
#[unsafe(method(popUpContextMenu:withEvent:forView:))]
#[unsafe(method_family = none)]
pub fn popUpContextMenu_withEvent_forView(menu: &NSMenu, event: &NSEvent, view: &NSView);
#[cfg(all(
feature = "NSEvent",
feature = "NSFont",
feature = "NSResponder",
feature = "NSView"
))]
#[unsafe(method(popUpContextMenu:withEvent:forView:withFont:))]
#[unsafe(method_family = none)]
pub fn popUpContextMenu_withEvent_forView_withFont(
menu: &NSMenu,
event: &NSEvent,
view: &NSView,
font: Option<&NSFont>,
);
#[cfg(all(feature = "NSMenuItem", feature = "NSResponder", feature = "NSView"))]
#[unsafe(method(popUpMenuPositioningItem:atLocation:inView:))]
#[unsafe(method_family = none)]
pub fn popUpMenuPositioningItem_atLocation_inView(
&self,
item: Option<&NSMenuItem>,
location: NSPoint,
view: Option<&NSView>,
) -> bool;
#[unsafe(method(setMenuBarVisible:))]
#[unsafe(method_family = none)]
pub fn setMenuBarVisible(visible: bool, mtm: MainThreadMarker);
#[unsafe(method(menuBarVisible))]
#[unsafe(method_family = none)]
pub fn menuBarVisible(mtm: MainThreadMarker) -> bool;
#[unsafe(method(supermenu))]
#[unsafe(method_family = none)]
pub unsafe fn supermenu(&self) -> Option<Retained<NSMenu>>;
#[unsafe(method(setSupermenu:))]
#[unsafe(method_family = none)]
pub unsafe fn setSupermenu(&self, supermenu: Option<&NSMenu>);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(insertItem:atIndex:))]
#[unsafe(method_family = none)]
pub fn insertItem_atIndex(&self, new_item: &NSMenuItem, index: NSInteger);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(addItem:))]
#[unsafe(method_family = none)]
pub fn addItem(&self, new_item: &NSMenuItem);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(insertItemWithTitle:action:keyEquivalent:atIndex:))]
#[unsafe(method_family = none)]
pub unsafe fn insertItemWithTitle_action_keyEquivalent_atIndex(
&self,
string: &NSString,
selector: Option<Sel>,
char_code: &NSString,
index: NSInteger,
) -> Retained<NSMenuItem>;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(addItemWithTitle:action:keyEquivalent:))]
#[unsafe(method_family = none)]
pub unsafe fn addItemWithTitle_action_keyEquivalent(
&self,
string: &NSString,
selector: Option<Sel>,
char_code: &NSString,
) -> Retained<NSMenuItem>;
#[unsafe(method(removeItemAtIndex:))]
#[unsafe(method_family = none)]
pub fn removeItemAtIndex(&self, index: NSInteger);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(removeItem:))]
#[unsafe(method_family = none)]
pub fn removeItem(&self, item: &NSMenuItem);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(setSubmenu:forItem:))]
#[unsafe(method_family = none)]
pub fn setSubmenu_forItem(&self, menu: Option<&NSMenu>, item: &NSMenuItem);
#[unsafe(method(removeAllItems))]
#[unsafe(method_family = none)]
pub fn removeAllItems(&self);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(itemArray))]
#[unsafe(method_family = none)]
pub fn itemArray(&self) -> Retained<NSArray<NSMenuItem>>;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(setItemArray:))]
#[unsafe(method_family = none)]
pub fn setItemArray(&self, item_array: &NSArray<NSMenuItem>);
#[unsafe(method(numberOfItems))]
#[unsafe(method_family = none)]
pub fn numberOfItems(&self) -> NSInteger;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(itemAtIndex:))]
#[unsafe(method_family = none)]
pub fn itemAtIndex(&self, index: NSInteger) -> Option<Retained<NSMenuItem>>;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(indexOfItem:))]
#[unsafe(method_family = none)]
pub fn indexOfItem(&self, item: &NSMenuItem) -> NSInteger;
#[unsafe(method(indexOfItemWithTitle:))]
#[unsafe(method_family = none)]
pub fn indexOfItemWithTitle(&self, title: &NSString) -> NSInteger;
#[unsafe(method(indexOfItemWithTag:))]
#[unsafe(method_family = none)]
pub fn indexOfItemWithTag(&self, tag: NSInteger) -> NSInteger;
#[unsafe(method(indexOfItemWithRepresentedObject:))]
#[unsafe(method_family = none)]
pub unsafe fn indexOfItemWithRepresentedObject(
&self,
object: Option<&AnyObject>,
) -> NSInteger;
#[unsafe(method(indexOfItemWithSubmenu:))]
#[unsafe(method_family = none)]
pub fn indexOfItemWithSubmenu(&self, submenu: Option<&NSMenu>) -> NSInteger;
#[unsafe(method(indexOfItemWithTarget:andAction:))]
#[unsafe(method_family = none)]
pub unsafe fn indexOfItemWithTarget_andAction(
&self,
target: Option<&AnyObject>,
action_selector: Option<Sel>,
) -> NSInteger;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(itemWithTitle:))]
#[unsafe(method_family = none)]
pub fn itemWithTitle(&self, title: &NSString) -> Option<Retained<NSMenuItem>>;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(itemWithTag:))]
#[unsafe(method_family = none)]
pub fn itemWithTag(&self, tag: NSInteger) -> Option<Retained<NSMenuItem>>;
#[unsafe(method(autoenablesItems))]
#[unsafe(method_family = none)]
pub fn autoenablesItems(&self) -> bool;
#[unsafe(method(setAutoenablesItems:))]
#[unsafe(method_family = none)]
pub fn setAutoenablesItems(&self, autoenables_items: bool);
#[unsafe(method(update))]
#[unsafe(method_family = none)]
pub fn update(&self);
#[cfg(feature = "NSEvent")]
#[unsafe(method(performKeyEquivalent:))]
#[unsafe(method_family = none)]
pub fn performKeyEquivalent(&self, event: &NSEvent) -> bool;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(itemChanged:))]
#[unsafe(method_family = none)]
pub fn itemChanged(&self, item: &NSMenuItem);
#[unsafe(method(performActionForItemAtIndex:))]
#[unsafe(method_family = none)]
pub fn performActionForItemAtIndex(&self, index: NSInteger);
#[unsafe(method(delegate))]
#[unsafe(method_family = none)]
pub fn delegate(&self) -> Option<Retained<ProtocolObject<dyn NSMenuDelegate>>>;
#[unsafe(method(setDelegate:))]
#[unsafe(method_family = none)]
pub fn setDelegate(&self, delegate: Option<&ProtocolObject<dyn NSMenuDelegate>>);
#[cfg(feature = "objc2-core-foundation")]
#[unsafe(method(menuBarHeight))]
#[unsafe(method_family = none)]
pub fn menuBarHeight(&self) -> CGFloat;
#[unsafe(method(cancelTracking))]
#[unsafe(method_family = none)]
pub fn cancelTracking(&self);
#[unsafe(method(cancelTrackingWithoutAnimation))]
#[unsafe(method_family = none)]
pub fn cancelTrackingWithoutAnimation(&self);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(highlightedItem))]
#[unsafe(method_family = none)]
pub fn highlightedItem(&self) -> Option<Retained<NSMenuItem>>;
#[cfg(feature = "objc2-core-foundation")]
#[unsafe(method(minimumWidth))]
#[unsafe(method_family = none)]
pub fn minimumWidth(&self) -> CGFloat;
#[cfg(feature = "objc2-core-foundation")]
#[unsafe(method(setMinimumWidth:))]
#[unsafe(method_family = none)]
pub fn setMinimumWidth(&self, minimum_width: CGFloat);
#[unsafe(method(size))]
#[unsafe(method_family = none)]
pub fn size(&self) -> NSSize;
#[cfg(feature = "NSFont")]
#[unsafe(method(font))]
#[unsafe(method_family = none)]
pub fn font(&self) -> Option<Retained<NSFont>>;
#[cfg(feature = "NSFont")]
#[unsafe(method(setFont:))]
#[unsafe(method_family = none)]
pub unsafe fn setFont(&self, font: Option<&NSFont>);
#[unsafe(method(allowsContextMenuPlugIns))]
#[unsafe(method_family = none)]
pub fn allowsContextMenuPlugIns(&self) -> bool;
#[unsafe(method(setAllowsContextMenuPlugIns:))]
#[unsafe(method_family = none)]
pub fn setAllowsContextMenuPlugIns(&self, allows_context_menu_plug_ins: bool);
#[unsafe(method(automaticallyInsertsWritingToolsItems))]
#[unsafe(method_family = none)]
pub fn automaticallyInsertsWritingToolsItems(&self) -> bool;
#[unsafe(method(setAutomaticallyInsertsWritingToolsItems:))]
#[unsafe(method_family = none)]
pub fn setAutomaticallyInsertsWritingToolsItems(
&self,
automatically_inserts_writing_tools_items: bool,
);
#[unsafe(method(showsStateColumn))]
#[unsafe(method_family = none)]
pub fn showsStateColumn(&self) -> bool;
#[unsafe(method(setShowsStateColumn:))]
#[unsafe(method_family = none)]
pub fn setShowsStateColumn(&self, shows_state_column: bool);
#[cfg(feature = "NSUserInterfaceLayout")]
#[unsafe(method(userInterfaceLayoutDirection))]
#[unsafe(method_family = none)]
pub fn userInterfaceLayoutDirection(&self) -> NSUserInterfaceLayoutDirection;
#[cfg(feature = "NSUserInterfaceLayout")]
#[unsafe(method(setUserInterfaceLayoutDirection:))]
#[unsafe(method_family = none)]
pub fn setUserInterfaceLayoutDirection(
&self,
user_interface_layout_direction: NSUserInterfaceLayoutDirection,
);
);
}
impl NSMenu {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub fn new(mtm: MainThreadMarker) -> Retained<Self>;
);
}
impl NSMenu {
extern_methods!(
#[cfg(all(feature = "NSColor", feature = "block2"))]
#[unsafe(method(paletteMenuWithColors:titles:selectionHandler:))]
#[unsafe(method_family = none)]
pub fn paletteMenuWithColors_titles_selectionHandler(
colors: &NSArray<NSColor>,
item_titles: &NSArray<NSString>,
on_selection_change: Option<&block2::DynBlock<dyn Fn(NonNull<NSMenu>)>>,
mtm: MainThreadMarker,
) -> Retained<Self>;
#[cfg(all(feature = "NSColor", feature = "NSImage", feature = "block2"))]
#[unsafe(method(paletteMenuWithColors:titles:templateImage:selectionHandler:))]
#[unsafe(method_family = none)]
pub fn paletteMenuWithColors_titles_templateImage_selectionHandler(
colors: &NSArray<NSColor>,
item_titles: &NSArray<NSString>,
image: &NSImage,
on_selection_change: Option<&block2::DynBlock<dyn Fn(NonNull<NSMenu>)>>,
mtm: MainThreadMarker,
) -> Retained<Self>;
#[unsafe(method(presentationStyle))]
#[unsafe(method_family = none)]
pub fn presentationStyle(&self) -> NSMenuPresentationStyle;
#[unsafe(method(setPresentationStyle:))]
#[unsafe(method_family = none)]
pub fn setPresentationStyle(&self, presentation_style: NSMenuPresentationStyle);
#[unsafe(method(selectionMode))]
#[unsafe(method_family = none)]
pub fn selectionMode(&self) -> NSMenuSelectionMode;
#[unsafe(method(setSelectionMode:))]
#[unsafe(method_family = none)]
pub fn setSelectionMode(&self, selection_mode: NSMenuSelectionMode);
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(selectedItems))]
#[unsafe(method_family = none)]
pub fn selectedItems(&self) -> Retained<NSArray<NSMenuItem>>;
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(setSelectedItems:))]
#[unsafe(method_family = none)]
pub fn setSelectedItems(&self, selected_items: &NSArray<NSMenuItem>);
);
}
impl NSMenu {
extern_methods!(
#[unsafe(method(submenuAction:))]
#[unsafe(method_family = none)]
pub unsafe fn submenuAction(&self, sender: Option<&AnyObject>);
);
}
extern_protocol!(
pub unsafe trait NSMenuItemValidation: NSObjectProtocol + MainThreadOnly {
#[cfg(feature = "NSMenuItem")]
#[unsafe(method(validateMenuItem:))]
#[unsafe(method_family = none)]
fn validateMenuItem(&self, menu_item: &NSMenuItem) -> bool;
}
);
extern_protocol!(
pub unsafe trait NSMenuDelegate: NSObjectProtocol + MainThreadOnly {
#[optional]
#[unsafe(method(menuNeedsUpdate:))]
#[unsafe(method_family = none)]
fn menuNeedsUpdate(&self, menu: &NSMenu);
#[optional]
#[unsafe(method(numberOfItemsInMenu:))]
#[unsafe(method_family = none)]
fn numberOfItemsInMenu(&self, menu: &NSMenu) -> NSInteger;
#[cfg(feature = "NSMenuItem")]
#[optional]
#[unsafe(method(menu:updateItem:atIndex:shouldCancel:))]
#[unsafe(method_family = none)]
fn menu_updateItem_atIndex_shouldCancel(
&self,
menu: &NSMenu,
item: &NSMenuItem,
index: NSInteger,
should_cancel: bool,
) -> bool;
#[optional]
#[unsafe(method(menuWillOpen:))]
#[unsafe(method_family = none)]
fn menuWillOpen(&self, menu: &NSMenu);
#[optional]
#[unsafe(method(menuDidClose:))]
#[unsafe(method_family = none)]
fn menuDidClose(&self, menu: &NSMenu);
#[cfg(feature = "NSMenuItem")]
#[optional]
#[unsafe(method(menu:willHighlightItem:))]
#[unsafe(method_family = none)]
fn menu_willHighlightItem(&self, menu: &NSMenu, item: Option<&NSMenuItem>);
#[cfg(feature = "NSScreen")]
#[optional]
#[unsafe(method(confinementRectForMenu:onScreen:))]
#[unsafe(method_family = none)]
fn confinementRectForMenu_onScreen(
&self,
menu: &NSMenu,
screen: Option<&NSScreen>,
) -> NSRect;
}
);
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSMenuProperties(pub NSUInteger);
bitflags::bitflags! {
impl NSMenuProperties: NSUInteger {
#[doc(alias = "NSMenuPropertyItemTitle")]
const ItemTitle = 1<<0;
#[doc(alias = "NSMenuPropertyItemAttributedTitle")]
const ItemAttributedTitle = 1<<1;
#[doc(alias = "NSMenuPropertyItemKeyEquivalent")]
const ItemKeyEquivalent = 1<<2;
#[doc(alias = "NSMenuPropertyItemImage")]
const ItemImage = 1<<3;
#[doc(alias = "NSMenuPropertyItemEnabled")]
const ItemEnabled = 1<<4;
#[doc(alias = "NSMenuPropertyItemAccessibilityDescription")]
const ItemAccessibilityDescription = 1<<5;
}
}
unsafe impl Encode for NSMenuProperties {
const ENCODING: Encoding = NSUInteger::ENCODING;
}
unsafe impl RefEncode for NSMenuProperties {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
impl NSMenu {
extern_methods!(
#[unsafe(method(propertiesToUpdate))]
#[unsafe(method_family = none)]
pub fn propertiesToUpdate(&self) -> NSMenuProperties;
);
}
extern "C" {
pub static NSMenuWillSendActionNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidSendActionNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidAddItemNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidRemoveItemNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidChangeItemNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidBeginTrackingNotification: &'static NSNotificationName;
}
extern "C" {
pub static NSMenuDidEndTrackingNotification: &'static NSNotificationName;
}
impl NSMenu {
extern_methods!(
#[deprecated]
#[unsafe(method(setMenuRepresentation:))]
#[unsafe(method_family = none)]
pub unsafe fn setMenuRepresentation(&self, menu_rep: Option<&AnyObject>);
#[deprecated]
#[unsafe(method(menuRepresentation))]
#[unsafe(method_family = none)]
pub fn menuRepresentation(&self) -> Option<Retained<AnyObject>>;
#[deprecated]
#[unsafe(method(setContextMenuRepresentation:))]
#[unsafe(method_family = none)]
pub unsafe fn setContextMenuRepresentation(&self, menu_rep: Option<&AnyObject>);
#[deprecated]
#[unsafe(method(contextMenuRepresentation))]
#[unsafe(method_family = none)]
pub fn contextMenuRepresentation(&self) -> Option<Retained<AnyObject>>;
#[deprecated]
#[unsafe(method(setTearOffMenuRepresentation:))]
#[unsafe(method_family = none)]
pub unsafe fn setTearOffMenuRepresentation(&self, menu_rep: Option<&AnyObject>);
#[deprecated]
#[unsafe(method(tearOffMenuRepresentation))]
#[unsafe(method_family = none)]
pub fn tearOffMenuRepresentation(&self) -> Option<Retained<AnyObject>>;
#[deprecated]
#[unsafe(method(menuZone))]
#[unsafe(method_family = none)]
pub fn menuZone(mtm: MainThreadMarker) -> *mut NSZone;
#[deprecated]
#[unsafe(method(setMenuZone:))]
#[unsafe(method_family = none)]
pub unsafe fn setMenuZone(zone: *mut NSZone, mtm: MainThreadMarker);
#[deprecated]
#[unsafe(method(attachedMenu))]
#[unsafe(method_family = none)]
pub fn attachedMenu(&self) -> Option<Retained<NSMenu>>;
#[deprecated]
#[unsafe(method(isAttached))]
#[unsafe(method_family = none)]
pub fn isAttached(&self) -> bool;
#[deprecated]
#[unsafe(method(sizeToFit))]
#[unsafe(method_family = none)]
pub fn sizeToFit(&self);
#[deprecated]
#[unsafe(method(locationForSubmenu:))]
#[unsafe(method_family = none)]
pub unsafe fn locationForSubmenu(&self, submenu: Option<&NSMenu>) -> NSPoint;
#[deprecated]
#[unsafe(method(menuChangedMessagesEnabled))]
#[unsafe(method_family = none)]
pub fn menuChangedMessagesEnabled(&self) -> bool;
#[deprecated]
#[unsafe(method(setMenuChangedMessagesEnabled:))]
#[unsafe(method_family = none)]
pub fn setMenuChangedMessagesEnabled(&self, menu_changed_messages_enabled: bool);
#[cfg(feature = "NSEvent")]
#[deprecated]
#[unsafe(method(helpRequested:))]
#[unsafe(method_family = none)]
pub fn helpRequested(&self, event_ptr: &NSEvent);
#[deprecated]
#[unsafe(method(isTornOff))]
#[unsafe(method_family = none)]
pub fn isTornOff(&self) -> bool;
);
}