boing 0.7.0

A safe wrapper over libui-ng-sys
Documentation
// SPDX-License-Identifier: MPL-2.0

//! An application-wide drop-down menu within a menubar that may contain additional
/// [menu items](`Item`).

mod item;

pub use item::Item;

use crate::prelude::*;

impl Ui {
    /// Creates a new [`Menu`] with the given name.
    pub fn create_menu<'ui>(
        &'ui self,
        name: impl Into<Vec<u8>>,
    ) -> Result<&'ui mut Menu, crate::Error> {
        let name = self.make_cstring(name)?;

        unsafe { call_libui_new_fn!(ui: self, fn: uiNewMenu(name.as_ptr()) -> Menu) }
    }
}

impl<'ui> Menu<'ui> {
    unsafe fn from_ptr(ui: &'ui Ui, ptr: *mut uiMenu) -> Self {
        Self { ptr, ui }
    }
}

/// An application-wide drop-down menu within a menubar that may contain additional
/// [menu items](`Item`).
#[derive(Widget)]
#[widget(handle = "uiMenu")]
pub struct Menu<'ui> {
    ptr: *mut uiMenu,
    ui: &'ui Ui,
}

impl Menu<'_> {
    /// Appends a horizontal separator.
    #[inline]
    pub fn push_separator(&self) {
        unsafe { uiMenuAppendSeparator(self.as_ptr()) };
    }
}