88 std::string value =
get ?
get(
slot) : std::string{};
89 row.Value = value.empty() ?
"…" : std::move(value);
134 std::optional<ChoiceIndex>
Bind;
144 return std::clamp(index, 0,
static_cast<int>(
Choices.size()) - 1);
179 std::function<
void(
int slot,
int index)>
commit, std::optional<ChoiceIndex>
bind,
182 auto state = std::make_shared<ChoiceState>(
189 if (
state->Choices.empty())
194 row.Steppable =
true;
MenuItem ChoiceItem(std::string label, std::vector< std::string > choices, std::function< void(int slot, int index)> commit, std::optional< ChoiceIndex > bind, int index, EnabledCondition enabled, ChoiceApply apply)
static std::function< MenuRow(int)> DescribeRow(std::string label, MenuRowKind kind, EnabledCondition enabled, std::function< void(int slot, MenuRow &row)> live={})
@ Input
Carries a value the player types in chat.
@ Submenu
Opens another menu.
@ Choice
Carries one of several values, stepped left and right.
@ Text
Not selectable; a caption or a summary line.
@ Toggle
Carries an on/off value.
static std::function< void(int, MenuSurface &)> WhenEnabled(EnabledCondition enabled, std::function< void(int, MenuSurface &)> action)
constexpr int WrapIndex(int value, int count)
static std::string ReadFile(const std::filesystem::path &path)
int Selected(int slot) const
std::optional< ChoiceIndex > Bind
bool Step(int slot, int direction)
void Apply(int slot) const
std::function< void(int slot, int index)> Commit
std::vector< std::string > Choices
void Select(int slot, int index)
std::function< bool(int slot)> Get
std::function< void(int slot)> Flip