Skip to main content

samp_sdk/omp/generated/
menu.rs

1//! `IMenu` — generated by `cargo xtask gen-omp` from `Server/Components/Menus/menus.hpp`.
2//! Implemented by `Menu` in the server's `Menus`.
3//!
4//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
5//! regenerate. Slots are clang's layout of the header for each ABI, checked
6//! against the official binaries by `cargo xtask check-abi --generated`.
7
8#![allow(unused_imports)]
9
10use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
11use crate::omp::types::{
12    Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
13    UID, Vector2, Vector3, Vector4, WorldTimePoint,
14};
15use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
16use crate::omp::*;
17
18slots! {
19    /// `void IMenu::setColumnHeader(StringView, MenuColumn)`
20    SLOT_SET_COLUMN_HEADER: usize = 6, 5;
21    /// `int IMenu::addCell(StringView, MenuColumn)`
22    SLOT_ADD_CELL: usize = 7, 6;
23    /// `void IMenu::disableRow(MenuRow)`
24    SLOT_DISABLE_ROW: usize = 8, 7;
25    /// `bool IMenu::isRowEnabled(MenuRow)`
26    SLOT_IS_ROW_ENABLED: usize = 9, 8;
27    /// `void IMenu::disable()`
28    SLOT_DISABLE: usize = 10, 9;
29    /// `bool IMenu::isEnabled()`
30    SLOT_IS_ENABLED: usize = 11, 10;
31    /// `const Vector2 & IMenu::getPosition()`
32    SLOT_GET_POSITION: usize = 12, 11;
33    /// `int IMenu::getRowCount(MenuColumn)`
34    SLOT_GET_ROW_COUNT: usize = 13, 12;
35    /// `int IMenu::getColumnCount()`
36    SLOT_GET_COLUMN_COUNT: usize = 14, 13;
37    /// `Vector2 IMenu::getColumnWidths()`
38    SLOT_GET_COLUMN_WIDTHS: usize = 15, 14;
39    /// `const StringView IMenu::getColumnHeader(MenuColumn)`
40    SLOT_GET_COLUMN_HEADER: usize = 16, 15;
41    /// `const StringView IMenu::getCell(MenuColumn, MenuRow)`
42    SLOT_GET_CELL: usize = 17, 16;
43    /// `void IMenu::initForPlayer(IPlayer &)`
44    SLOT_INIT_FOR_PLAYER: usize = 18, 17;
45    /// `void IMenu::showForPlayer(IPlayer &)`
46    SLOT_SHOW_FOR_PLAYER: usize = 19, 18;
47    /// `void IMenu::hideForPlayer(IPlayer &)`
48    SLOT_HIDE_FOR_PLAYER: usize = 20, 19;
49}
50
51virtual_fns! {
52    /// `void IMenu::setColumnHeader(StringView, MenuColumn)`.
53    ///
54    /// # Safety
55    /// `menu` must be a live `IMenu`.
56    pub fn menu_set_column_header(
57        menu: IMenu,
58        header: StringView,
59        column: u8,
60    ) = [0, SLOT_SET_COLUMN_HEADER];
61
62    /// `int IMenu::addCell(StringView, MenuColumn)`.
63    ///
64    /// # Safety
65    /// `menu` must be a live `IMenu`.
66    #[must_use]
67    pub fn menu_add_cell(
68        menu: IMenu,
69        item_text: StringView,
70        column: u8,
71    ) -> i32 = [0, SLOT_ADD_CELL] or 0;
72
73    /// `void IMenu::disableRow(MenuRow)`.
74    ///
75    /// # Safety
76    /// `menu` must be a live `IMenu`.
77    pub fn menu_disable_row(menu: IMenu, row: u8) = [0, SLOT_DISABLE_ROW];
78
79    /// `bool IMenu::isRowEnabled(MenuRow)`.
80    ///
81    /// # Safety
82    /// `menu` must be a live `IMenu`.
83    #[must_use]
84    pub fn menu_is_row_enabled(menu: IMenu, row: u8) -> bool = [0, SLOT_IS_ROW_ENABLED] or false;
85
86    /// `void IMenu::disable()`.
87    ///
88    /// # Safety
89    /// `menu` must be a live `IMenu`.
90    pub fn menu_disable(menu: IMenu) = [0, SLOT_DISABLE];
91
92    /// `bool IMenu::isEnabled()`.
93    ///
94    /// # Safety
95    /// `menu` must be a live `IMenu`.
96    #[must_use]
97    pub fn menu_is_enabled(menu: IMenu) -> bool = [0, SLOT_IS_ENABLED] or false;
98
99    /// `const Vector2 & IMenu::getPosition()`.
100    ///
101    /// # Safety
102    /// `menu` must be a live `IMenu`.
103    #[must_use]
104    pub fn menu_position(
105        menu: IMenu,
106    ) -> *const Vector2 = [0, SLOT_GET_POSITION] or std::ptr::null();
107
108    /// `int IMenu::getRowCount(MenuColumn)`.
109    ///
110    /// # Safety
111    /// `menu` must be a live `IMenu`.
112    #[must_use]
113    pub fn menu_row_count(menu: IMenu, column: u8) -> i32 = [0, SLOT_GET_ROW_COUNT] or 0;
114
115    /// `int IMenu::getColumnCount()`.
116    ///
117    /// # Safety
118    /// `menu` must be a live `IMenu`.
119    #[must_use]
120    pub fn menu_column_count(menu: IMenu) -> i32 = [0, SLOT_GET_COLUMN_COUNT] or 0;
121
122    /// `void IMenu::initForPlayer(IPlayer &)`.
123    ///
124    /// # Safety
125    /// `menu` must be a live `IMenu`.
126    pub fn menu_init_for_player(menu: IMenu, player: *mut IPlayer) = [0, SLOT_INIT_FOR_PLAYER];
127
128    /// `void IMenu::showForPlayer(IPlayer &)`.
129    ///
130    /// # Safety
131    /// `menu` must be a live `IMenu`.
132    pub fn menu_show_for_player(menu: IMenu, player: *mut IPlayer) = [0, SLOT_SHOW_FOR_PLAYER];
133
134    /// `void IMenu::hideForPlayer(IPlayer &)`.
135    ///
136    /// # Safety
137    /// `menu` must be a live `IMenu`.
138    pub fn menu_hide_for_player(menu: IMenu, player: *mut IPlayer) = [0, SLOT_HIDE_FOR_PLAYER];
139}
140
141/// `Vector2 IMenu::getColumnWidths()`.
142///
143/// # Safety
144/// `menu` must be a live `IMenu`.
145#[must_use]
146pub unsafe fn menu_column_widths(menu: *mut IMenu) -> Option<Vector2> {
147    call_vtable_small_struct!(
148        menu.cast::<u8>(),
149        0,
150        SLOT_GET_COLUMN_WIDTHS,
151        Vector2,
152        Vector2::default()
153    )
154}
155
156/// `const StringView IMenu::getColumnHeader(MenuColumn)`.
157///
158/// # Safety
159/// `menu` must be a live `IMenu`.
160#[must_use]
161pub unsafe fn menu_column_header(menu: *mut IMenu, column: u8) -> Option<String> {
162    let view = call_vtable_small_struct!(
163        menu.cast::<u8>(),
164        0,
165        SLOT_GET_COLUMN_HEADER,
166        StringView,
167        StringView::EMPTY,
168        (u8)(column)
169    )?;
170    unsafe { view.to_owned_string() }
171}
172
173/// `const StringView IMenu::getCell(MenuColumn, MenuRow)`.
174///
175/// # Safety
176/// `menu` must be a live `IMenu`.
177#[must_use]
178pub unsafe fn menu_cell(menu: *mut IMenu, column: u8, row: u8) -> Option<String> {
179    let view = call_vtable_small_struct!(
180        menu.cast::<u8>(),
181        0,
182        SLOT_GET_CELL,
183        StringView,
184        StringView::EMPTY,
185        (u8, u8)(column, row)
186    )?;
187    unsafe { view.to_owned_string() }
188}