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}