1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
//! `NcMenu*` methods and associated functions.
use super::{NcMenuItem, NcMenuSection};
use crate::{cstring, NcInput};
use core::ptr::null_mut;
#[allow(unused_imports)] // for doc comments
use crate::widgets::NcMenu;
mod menu;
mod options;
pub use menu::*;
pub use options::*;
/// # `NcMenuItem` Constructors
impl NcMenuItem {
/// New NcMenuItem for [`NcMenu`].
pub fn new(desc: &str, shortcut: NcInput) -> Self {
let cs = cstring![desc];
Self {
// utf-8 menu item, NULL for horizontal separator
desc: cs.into_raw(),
// ´NcInput´ shortcut, all should be distinct
shortcut,
}
}
/// New empty NcMenuItem for [`NcMenu`].
pub fn new_empty() -> Self {
Self { desc: null_mut(), shortcut: NcInput::new_empty() }
}
}
/// # `NcMenuSection` Constructors
///
// Must contain at least 1 NcMenuItem.
impl NcMenuSection {
/// New `NcMenuSection` for [`NcMenu`].
pub fn new(name: &str, items: &mut [NcMenuItem], shortcut: NcInput) -> Self {
let cs = cstring![name];
Self {
// utf-8 name string
name: cs.into_raw(),
// array of itemcount `NcMenuItem`s
items: items.as_mut_ptr(),
//
itemcount: items.len() as i32,
// shortcut, will be underlined if present in name
shortcut,
}
}
/// New NcMenuSection separator for [`NcMenu`].
///
pub fn new_separator() -> Self {
Self { name: null_mut(), items: null_mut(), itemcount: 0, shortcut: NcInput::new_empty() }
}
}