libnotcurses_sys/widgets/menu/methods/
mod.rs

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