Add sequence for listbox columns

This commit is contained in:
Jan 2021-11-20 18:40:18 +01:00
parent ebdfb5b9aa
commit aae2b9f3d9

View File

@ -378,6 +378,54 @@ namespace menu::item_scope_sequences
} }
} }
}; };
class SequenceColumns final : public MenuFileParser::sequence_t
{
static constexpr auto CAPTURE_FIRST_TOKEN = 1;
static constexpr auto CAPTURE_POS = 2;
static constexpr auto CAPTURE_WIDTH = 3;
static constexpr auto CAPTURE_MAX_CHARS = 4;
static constexpr auto CAPTURE_ALIGNMENT = 5;
public:
SequenceColumns()
{
const MenuMatcherFactory create(this);
AddMatchers({
create.KeywordIgnoreCase("columns").Capture(CAPTURE_FIRST_TOKEN),
create.Loop(create.And({
create.Integer().Capture(CAPTURE_POS),
create.Integer().Capture(CAPTURE_WIDTH),
create.Integer().Capture(CAPTURE_MAX_CHARS),
create.Integer().Capture(CAPTURE_ALIGNMENT),
})),
});
}
protected:
void ProcessMatch(MenuFileParserState* state, SequenceResult<SimpleParserValue>& result) const override
{
assert(state->m_current_item);
ItemScopeOperations::EnsureHasListboxFeatures(*state->m_current_item, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos());
const auto& listBoxFeatures = state->m_current_item->m_list_box_features;
while (result.HasNextCapture(CAPTURE_POS))
{
CommonItemFeaturesListBox::Column column
{
result.NextCapture(CAPTURE_POS).IntegerValue(),
0,
result.NextCapture(CAPTURE_WIDTH).IntegerValue(),
0,
result.NextCapture(CAPTURE_MAX_CHARS).IntegerValue(),
result.NextCapture(CAPTURE_ALIGNMENT).IntegerValue()
};
listBoxFeatures->m_columns.emplace_back(column);
}
}
};
} }
using namespace item_scope_sequences; using namespace item_scope_sequences;
@ -678,6 +726,7 @@ void ItemScopeSequences::AddSequences(FeatureLevel featureLevel)
})); }));
// ============== ListBox ============== // ============== ListBox ==============
AddSequence(std::make_unique<SequenceColumns>());
AddSequence(std::make_unique<GenericKeywordPropertySequence>("notselectable", [](const MenuFileParserState* state, const TokenPos& pos) AddSequence(std::make_unique<GenericKeywordPropertySequence>("notselectable", [](const MenuFileParserState* state, const TokenPos& pos)
{ {
ItemScopeOperations::EnsureHasListboxFeatures(*state->m_current_item, pos); ItemScopeOperations::EnsureHasListboxFeatures(*state->m_current_item, pos);