65 _sessions[
slot].Page = 0;
130int PanoramaMenu::ItemAt(
int slot,
int row)
const
135void PanoramaMenu::ReadTabs(
int slot)
138 std::vector<Tab>&
tabs = _sessions[
slot].Tabs;
139 const int items =
static_cast<int>(_stack.
Root(
slot)->
Items.size());
145 {.RootIndex = index, .Label = std::move(
described.Label), .Icon = std::move(
described.Icon)});
150void PanoramaMenu::Draw(
int slot)
168 .BrandSubtitle =
root.Subtitle,
170 .Title =
menu->Title,
181void PanoramaMenu::DrawTabs(
int slot)
184 const int shown =
static_cast<int>(
session.Tabs.size());
189 for (
int index = 0; index < _layout.
TabCount(); ++index)
197 const Tab&
tab =
session.Tabs[
static_cast<std::size_t
>(index)];
198 const MenuTab
drawn{.Label =
tab.Label, .Icon =
tab.Icon, .Selected = index ==
session.SelectedTab};
203void PanoramaMenu::DrawRows(
int slot,
const Menu&
menu)
206 const int count =
static_cast<int>(
menu.Items.size());
232void PanoramaMenu::DrawPrompt(
int slot)
239void PanoramaMenu::OnPress(
const ButtonPress&
press)
269 return TurnPage(
slot, -1);
271 return TurnPage(
slot, +1);
283void PanoramaMenu::Activate(
int slot,
int index)
289 const auto found = std::ranges::find(
session.Tabs, index, &Tab::RootIndex);
306void PanoramaMenu::OpenTab(
int slot,
int tab)
317 Activate(
slot,
session.Tabs[
static_cast<std::size_t
>(
tab)].RootIndex);
320void PanoramaMenu::TurnPage(
int slot,
int delta)
334void PanoramaMenu::Hide(
int slot)
336 _sessions[
slot] = {};
bool IsReady(int slot) const
std::function< void(int slot, std::string_view message)> Reply
One-shot delays and repeating timers, run on the game thread.
Event< const ButtonPress & > Pressed
void Add(Subscription subscription)
Localization system. Loads one JSON file per language; nested objects flatten into dotted keys (categ...
std::string Get(std::string_view key) const
std::string GetOr(std::string_view key, int slot, std::string_view fallback) const
@ Submenu
Opens another menu.
constexpr int WrapIndex(int value, int count)
static std::string ReadFile(const std::filesystem::path &path)
constexpr int PageCount(int items, int perPage)
constexpr bool IsValidSlot(int slot)