From dd8a9bf37460646f020e35e1011c20df64d525f7 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 20 Nov 2021 14:29:24 +0100 Subject: [PATCH] Set item type features when setting type --- .../Parsing/Menu/Domain/CommonItemDef.h | 11 + .../Menu/Sequence/FunctionScopeSequences.cpp | 2 +- .../Generic/GenericBoolPropertySequence.cpp | 4 +- .../Generic/GenericBoolPropertySequence.h | 5 +- .../Generic/GenericColorPropertySequence.cpp | 4 +- .../Generic/GenericColorPropertySequence.h | 11 +- .../GenericExpressionPropertySequence.cpp | 10 +- .../GenericExpressionPropertySequence.h | 4 +- .../GenericFloatingPointPropertySequence.cpp | 4 +- .../GenericFloatingPointPropertySequence.h | 5 +- .../Generic/GenericIntPropertySequence.cpp | 4 +- .../Generic/GenericIntPropertySequence.h | 5 +- .../GenericKeywordPropertySequence.cpp | 6 +- .../Generic/GenericKeywordPropertySequence.h | 4 +- ...ricMenuEventHandlerSetPropertySequence.cpp | 4 +- ...nericMenuEventHandlerSetPropertySequence.h | 4 +- .../Generic/GenericStringPropertySequence.cpp | 4 +- .../Generic/GenericStringPropertySequence.h | 5 +- .../Menu/Sequence/ItemScopeSequences.cpp | 205 +++++++++++------- .../Menu/Sequence/MenuScopeSequences.cpp | 74 +++---- 20 files changed, 224 insertions(+), 151 deletions(-) diff --git a/src/ObjLoading/Parsing/Menu/Domain/CommonItemDef.h b/src/ObjLoading/Parsing/Menu/Domain/CommonItemDef.h index d62e7b36..d2e39ec0 100644 --- a/src/ObjLoading/Parsing/Menu/Domain/CommonItemDef.h +++ b/src/ObjLoading/Parsing/Menu/Domain/CommonItemDef.h @@ -9,6 +9,16 @@ namespace menu { + enum class CommonItemFeatureType + { + NONE, + LISTBOX, + EDIT_FIELD, + MULTI_VALUE, + ENUM_DVAR, + NEWS_TICKER + }; + class CommonItemDef { public: @@ -33,6 +43,7 @@ namespace menu bool m_auto_wrapped; bool m_horizontal_scroll; int m_type; + CommonItemFeatureType m_feature_type; int m_border; double m_border_size; int m_owner_draw; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/FunctionScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/FunctionScopeSequences.cpp index c1180a2b..f00158d7 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/FunctionScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/FunctionScopeSequences.cpp @@ -52,7 +52,7 @@ FunctionScopeSequences::FunctionScopeSequences(std::vector()); - AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_function->m_name = value; })); diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.cpp index 1827a32a..298f71bc 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.cpp @@ -12,7 +12,7 @@ GenericBoolPropertySequence::GenericBoolPropertySequence(std::string keywordName const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Integer().Capture(CAPTURE_VALUE) }); } @@ -22,6 +22,6 @@ void GenericBoolPropertySequence::ProcessMatch(MenuFileParserState* state, Seque if (m_set_callback) { const auto value = result.NextCapture(CAPTURE_VALUE).IntegerValue(); - m_set_callback(state, value > 0); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), value > 0); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.h index 15607091..06029867 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericBoolPropertySequence.h @@ -10,10 +10,11 @@ namespace menu class GenericBoolPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_VALUE = 2; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.cpp index 8bf45e9f..fdfa7b61 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.cpp @@ -12,7 +12,7 @@ GenericColorPropertySequence::GenericColorPropertySequence(std::string keywordNa const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Numeric().Capture(CAPTURE_R), create.Numeric().Capture(CAPTURE_G), create.Numeric().Capture(CAPTURE_B), @@ -30,6 +30,6 @@ void GenericColorPropertySequence::ProcessMatch(MenuFileParserState* state, Sequ color.b = MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_B)); color.a = MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_A)); - m_set_callback(state, color); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), color); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.h index 202dde23..20562e2e 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericColorPropertySequence.h @@ -11,13 +11,14 @@ namespace menu class GenericColorPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: - static constexpr auto CAPTURE_R = 1; - static constexpr auto CAPTURE_G = 2; - static constexpr auto CAPTURE_B = 3; - static constexpr auto CAPTURE_A = 4; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_R = 2; + static constexpr auto CAPTURE_G = 3; + static constexpr auto CAPTURE_B = 4; + static constexpr auto CAPTURE_A = 5; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.cpp index f8858c8c..3082f03f 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.cpp @@ -19,7 +19,7 @@ std::unique_ptr GenericExpressionPropertySequ const MenuMatcherFactory create(result.get()); result->AddMatchers({ - create.KeywordIgnoreCase(std::move(keyword)), + create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN), create.Label(MenuCommonMatchers::LABEL_EXPRESSION), create.Optional(create.Char(';')) }); @@ -37,7 +37,7 @@ std::unique_ptr GenericExpressionPropertySequ keywordMatchers.emplace_back(create.KeywordIgnoreCase(std::move(keyword))); result->AddMatchers({ - create.And(std::move(keywordMatchers)), + create.And(std::move(keywordMatchers)).Capture(CAPTURE_FIRST_TOKEN), create.Label(MenuCommonMatchers::LABEL_EXPRESSION), create.Optional(create.Char(';')) }); @@ -51,12 +51,12 @@ std::unique_ptr GenericExpressionPropertySequ const MenuMatcherFactory create(result.get()); result->AddMatchers({ - create.KeywordIgnoreCase(std::move(keyword)), + create.KeywordIgnoreCase(std::move(keyword)).Capture(CAPTURE_FIRST_TOKEN), create.Or({ create.And({ create.KeywordIgnoreCase("when"), create.Char('('), - create.Label(MenuCommonMatchers::LABEL_EXPRESSION).Capture(CAPTURE_VALUE), + create.Label(MenuCommonMatchers::LABEL_EXPRESSION), create.Char(')') }), create.Label(MenuCommonMatchers::LABEL_EXPRESSION) @@ -72,6 +72,6 @@ void GenericExpressionPropertySequence::ProcessMatch(MenuFileParserState* state, if (m_set_callback) { auto expression = MenuCommonMatchers::ProcessExpression(state, result); - m_set_callback(state, std::move(expression)); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), std::move(expression)); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.h index 3cf3d221..7d85f04c 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericExpressionPropertySequence.h @@ -11,10 +11,10 @@ namespace menu class GenericExpressionPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function value)>; + using callback_t = std::function value)>; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.cpp index 9476784c..7c1c79c8 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.cpp @@ -12,7 +12,7 @@ GenericFloatingPointPropertySequence::GenericFloatingPointPropertySequence(std:: const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Numeric().Capture(CAPTURE_VALUE) }); } @@ -22,6 +22,6 @@ void GenericFloatingPointPropertySequence::ProcessMatch(MenuFileParserState* sta if (m_set_callback) { const auto value = MenuMatcherFactory::TokenNumericFloatingPointValue(result.NextCapture(CAPTURE_VALUE)); - m_set_callback(state, value); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), value); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.h index 4df83d56..6510d645 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericFloatingPointPropertySequence.h @@ -10,10 +10,11 @@ namespace menu class GenericFloatingPointPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_VALUE = 2; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.cpp index 18050f1e..6eb95bb7 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.cpp @@ -12,7 +12,7 @@ GenericIntPropertySequence::GenericIntPropertySequence(std::string keywordName, const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Integer().Capture(CAPTURE_VALUE) }); } @@ -22,6 +22,6 @@ void GenericIntPropertySequence::ProcessMatch(MenuFileParserState* state, Sequen if (m_set_callback) { const auto value = result.NextCapture(CAPTURE_VALUE).IntegerValue(); - m_set_callback(state, value); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), value); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.h index 02f5b393..1c2204b3 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericIntPropertySequence.h @@ -10,10 +10,11 @@ namespace menu class GenericIntPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_VALUE = 2; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.cpp index 6e03fc05..2a8033b2 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.cpp @@ -12,14 +12,14 @@ GenericKeywordPropertySequence::GenericKeywordPropertySequence(std::string keywo const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), }); } void GenericKeywordPropertySequence::ProcessMatch(MenuFileParserState* state, SequenceResult& result) const { - if(m_set_callback) + if (m_set_callback) { - m_set_callback(state); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos()); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.h index daa3d0b7..4d67ad83 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericKeywordPropertySequence.h @@ -10,9 +10,11 @@ namespace menu class GenericKeywordPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + const callback_t m_set_callback; protected: diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.cpp index 35a4905f..2a7eac99 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.cpp @@ -12,7 +12,7 @@ GenericMenuEventHandlerSetPropertySequence::GenericMenuEventHandlerSetPropertySe const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Char('{') }); } @@ -24,6 +24,6 @@ void GenericMenuEventHandlerSetPropertySequence::ProcessMatch(MenuFileParserStat auto newEventHandlerSet = std::make_unique(); state->m_current_event_handler_set = newEventHandlerSet.get(); state->m_current_nested_event_handler_set = newEventHandlerSet.get(); - m_set_callback(state, std::move(newEventHandlerSet)); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), std::move(newEventHandlerSet)); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.h index 4a4d51e7..81479be8 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericMenuEventHandlerSetPropertySequence.h @@ -11,10 +11,10 @@ namespace menu class GenericMenuEventHandlerSetPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function value)>; + using callback_t = std::function value)>; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.cpp b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.cpp index 35b3cbc6..8e554fd6 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.cpp @@ -12,7 +12,7 @@ GenericStringPropertySequence::GenericStringPropertySequence(std::string keyword const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keywordName)), + create.KeywordIgnoreCase(std::move(keywordName)).Capture(CAPTURE_FIRST_TOKEN), create.Text().Capture(CAPTURE_VALUE) }); } @@ -22,6 +22,6 @@ void GenericStringPropertySequence::ProcessMatch(MenuFileParserState* state, Seq if (m_set_callback) { const auto& value = MenuMatcherFactory::TokenTextValue(result.NextCapture(CAPTURE_VALUE)); - m_set_callback(state, value); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), value); } } diff --git a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.h b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.h index 2c72f453..1f35d9fe 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.h +++ b/src/ObjLoading/Parsing/Menu/Sequence/Generic/GenericStringPropertySequence.h @@ -10,10 +10,11 @@ namespace menu class GenericStringPropertySequence final : public MenuFileParser::sequence_t { public: - using callback_t = std::function; + using callback_t = std::function; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_VALUE = 2; const callback_t m_set_callback; diff --git a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp index 8cfca861..63b843a3 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/ItemScopeSequences.cpp @@ -119,10 +119,11 @@ namespace menu::item_scope_sequences class SequenceMultiTokenBlock final : public MenuFileParser::sequence_t { public: - using callback_t = std::function value)>; + using callback_t = std::function value)>; private: - static constexpr auto CAPTURE_VALUE = 1; + static constexpr auto CAPTURE_FIRST_TOKEN = 1; + static constexpr auto CAPTURE_VALUE = 2; callback_t m_set_callback; @@ -133,7 +134,7 @@ namespace menu::item_scope_sequences const MenuMatcherFactory create(this); AddMatchers({ - create.KeywordIgnoreCase(std::move(keyName)), + create.KeywordIgnoreCase(std::move(keyName)).Capture(CAPTURE_FIRST_TOKEN), create.Char('{'), create.Optional(create.And({ create.Text().Capture(CAPTURE_VALUE), @@ -158,13 +159,67 @@ namespace menu::item_scope_sequences values.emplace_back(MenuMatcherFactory::TokenTextValue(result.NextCapture(CAPTURE_VALUE))); } - m_set_callback(state, std::move(values)); + m_set_callback(state, result.NextCapture(CAPTURE_FIRST_TOKEN).GetPos(), std::move(values)); } }; } using namespace item_scope_sequences; +class ItemScopeOperations +{ + inline static const CommonItemFeatureType IW4_FEATURE_TYPE_BY_TYPE[0x18] + { + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_TEXT + CommonItemFeatureType::NONE, // ITEM_TYPE_BUTTON + CommonItemFeatureType::NONE, // ITEM_TYPE_RADIOBUTTON + CommonItemFeatureType::NONE, // ITEM_TYPE_CHECKBOX + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EDITFIELD + CommonItemFeatureType::NONE, // ITEM_TYPE_COMBO + CommonItemFeatureType::LISTBOX, // ITEM_TYPE_LISTBOX + CommonItemFeatureType::NONE, // ITEM_TYPE_MODEL + CommonItemFeatureType::NONE, // ITEM_TYPE_OWNERDRAW + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_NUMERICFIELD + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_SLIDER + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_YESNO + CommonItemFeatureType::MULTI_VALUE, // ITEM_TYPE_MULTI + CommonItemFeatureType::ENUM_DVAR, // ITEM_TYPE_DVARENUM + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_BIND + CommonItemFeatureType::NONE, // ITEM_TYPE_MENUMODEL + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_VALIDFILEFIELD + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_DECIMALFIELD + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_UPREDITFIELD + CommonItemFeatureType::NONE, // ITEM_TYPE_GAME_MESSAGE_WINDOW + CommonItemFeatureType::NEWS_TICKER, // ITEM_TYPE_NEWS_TICKER + CommonItemFeatureType::NONE, // ITEM_TYPE_TEXT_SCROLL + CommonItemFeatureType::EDIT_FIELD, // ITEM_TYPE_EMAILFIELD + CommonItemFeatureType::EDIT_FIELD // ITEM_TYPE_PASSWORDFIELD + }; + +public: + static void SetItemType(CommonItemDef& item, const FeatureLevel featureLevel, const TokenPos& pos, const int type) + { + if (type < 0) + throw ParsingException(pos, "Invalid item type"); + + item.m_type = type; + + switch (featureLevel) + { + case FeatureLevel::IW4: + if (static_cast(type) >= std::extent_v) + throw ParsingException(pos, "Invalid item type"); + item.m_feature_type = IW4_FEATURE_TYPE_BY_TYPE[static_cast(type)]; + break; + + case FeatureLevel::IW5: + default: + assert(false); + throw ParsingException(pos, "Unimplemented item types for feature level"); + } + } +}; + ItemScopeSequences::ItemScopeSequences(std::vector>& allSequences, std::vector& scopeSequences) : AbstractScopeSequenceHolder(allSequences, scopeSequences) { @@ -173,285 +228,285 @@ ItemScopeSequences::ItemScopeSequences(std::vector()); - AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_name = value; })); - AddSequence(std::make_unique("text", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("text", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_text = value; })); - AddSequence(std::make_unique("textsavegame", [](const MenuFileParserState* state) + AddSequence(std::make_unique("textsavegame", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_text_save_game = true; })); - AddSequence(std::make_unique("textcinematicsubtitle", [](const MenuFileParserState* state) + AddSequence(std::make_unique("textcinematicsubtitle", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_text_cinematic_subtitle = true; })); - AddSequence(std::make_unique("group", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("group", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_group = value; })); AddSequence(std::make_unique()); - AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_style = value; })); - AddSequence(std::make_unique("decoration", [](const MenuFileParserState* state) + AddSequence(std::make_unique("decoration", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_decoration = true; })); - AddSequence(std::make_unique("autowrapped", [](const MenuFileParserState* state) + AddSequence(std::make_unique("autowrapped", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_auto_wrapped = true; })); - AddSequence(std::make_unique("horizontalscroll", [](const MenuFileParserState* state) + AddSequence(std::make_unique("horizontalscroll", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_item->m_horizontal_scroll = true; })); - AddSequence(std::make_unique("type", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("type", [](const MenuFileParserState* state, const TokenPos& pos, const int value) { - state->m_current_item->m_type = value; + ItemScopeOperations::SetItemType(*state->m_current_item, state->m_feature_level, pos, value); })); - AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_border = value; })); - AddSequence(std::make_unique("borderSize", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("borderSize", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_item->m_border_size = value; })); - AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_owner_draw = value; })); - AddSequence(std::make_unique("align", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("align", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_align = value; })); - AddSequence(std::make_unique("textalign", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("textalign", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_text_align = value; })); - AddSequence(std::make_unique("textalignx", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("textalignx", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_item->m_text_align_x = value; })); - AddSequence(std::make_unique("textaligny", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("textaligny", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_item->m_text_align_y = value; })); - AddSequence(std::make_unique("textscale", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("textscale", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_item->m_text_scale = value; })); - AddSequence(std::make_unique("textstyle", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("textstyle", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_text_style = value; })); - AddSequence(std::make_unique("textfont", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("textfont", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_text_font = value; })); - AddSequence(std::make_unique("backcolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("backcolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_back_color = value; })); - AddSequence(std::make_unique("forecolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("forecolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_fore_color = value; })); - AddSequence(std::make_unique("bordercolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("bordercolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_border_color = value; })); - AddSequence(std::make_unique("outlinecolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("outlinecolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_outline_color = value; })); - AddSequence(std::make_unique("disablecolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("disablecolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_disable_color = value; })); - AddSequence(std::make_unique("glowcolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("glowcolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_item->m_glow_color = value; })); - AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_background = value; })); - AddSequence(std::make_unique("focusSound", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("focusSound", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_focus_sound = value; })); - AddSequence(std::make_unique("ownerdrawFlag", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("ownerdrawFlag", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_owner_draw_flags |= value; })); - AddSequence(std::make_unique("dvarTest", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("dvarTest", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_item->m_dvar_test = value; })); - AddSequence(std::make_unique("enableDvar", [](const MenuFileParserState* state, std::vector value) + AddSequence(std::make_unique("enableDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_enable_dvar = std::move(value); })); - AddSequence(std::make_unique("disableDvar", [](const MenuFileParserState* state, std::vector value) + AddSequence(std::make_unique("disableDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_disable_dvar = std::move(value); })); - AddSequence(std::make_unique("showDvar", [](const MenuFileParserState* state, std::vector value) + AddSequence(std::make_unique("showDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_show_dvar = std::move(value); })); - AddSequence(std::make_unique("hideDvar", [](const MenuFileParserState* state, std::vector value) + AddSequence(std::make_unique("hideDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_hide_dvar = std::move(value); })); - AddSequence(std::make_unique("focusDvar", [](const MenuFileParserState* state, std::vector value) + AddSequence(std::make_unique("focusDvar", [](const MenuFileParserState* state, const TokenPos&, std::vector value) { state->m_current_item->m_focus_dvar = std::move(value); })); - AddSequence(std::make_unique("gamemsgwindowindex", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("gamemsgwindowindex", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_game_message_window_index = value; })); - AddSequence(std::make_unique("gamemsgwindowmode", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("gamemsgwindowmode", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_item->m_game_message_window_mode = value; })); AddSequence(std::make_unique()); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_visible_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("disabled", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("disabled", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_disabled_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "disabled"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "disabled"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_disabled_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "text"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "text"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_text_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "material"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "material"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_material_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "material"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "material"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_material_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_rect_x_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_rect_y_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_rect_w_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_rect_h_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "R"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "R"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_forecolor_expressions.m_r_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "G"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "G"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_forecolor_expressions.m_g_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "B"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "B"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_forecolor_expressions.m_b_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "A"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "A"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_forecolor_expressions.m_a_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "RGB"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "forecolor", "RGB"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_forecolor_expressions.m_rgb_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "R"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "R"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_glowcolor_expressions.m_r_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "G"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "G"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_glowcolor_expressions.m_g_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "B"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "B"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_glowcolor_expressions.m_b_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "A"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "A"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_glowcolor_expressions.m_a_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "RGB"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "glowcolor", "RGB"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_glowcolor_expressions.m_rgb_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "R"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "R"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_backcolor_expressions.m_r_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "G"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "G"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_backcolor_expressions.m_g_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "B"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "B"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_backcolor_expressions.m_b_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "A"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "A"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_backcolor_expressions.m_a_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "RGB"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "backcolor", "RGB"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_backcolor_expressions.m_rgb_exp = std::move(value); })); - AddSequence(std::make_unique("onFocus", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("onFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_focus = std::move(value); })); - AddSequence(std::make_unique("leaveFocus", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("leaveFocus", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_leave_focus = std::move(value); })); - AddSequence(std::make_unique("mouseEnter", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("mouseEnter", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_mouse_enter = std::move(value); })); - AddSequence(std::make_unique("mouseExit", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("mouseExit", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_mouse_exit = std::move(value); })); - AddSequence(std::make_unique("mouseEnterText", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("mouseEnterText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_mouse_enter_text = std::move(value); })); - AddSequence(std::make_unique("mouseExitText", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("mouseExitText", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_mouse_exit_text = std::move(value); })); - AddSequence(std::make_unique("action", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("action", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_action = std::move(value); })); - AddSequence(std::make_unique("accept", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("accept", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_item->m_on_accept = std::move(value); })); diff --git a/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp b/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp index 63f1ca21..94ad3bd6 100644 --- a/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp +++ b/src/ObjLoading/Parsing/Menu/Sequence/MenuScopeSequences.cpp @@ -140,152 +140,152 @@ void MenuScopeSequences::AddSequences(FeatureLevel featureLevel) { AddSequence(std::make_unique()); AddSequence(std::make_unique()); - AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("name", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_menu->m_name = value; })); - AddSequence(std::make_unique("fullScreen", [](const MenuFileParserState* state, const bool value) + AddSequence(std::make_unique("fullScreen", [](const MenuFileParserState* state, const TokenPos&, const bool value) { state->m_current_menu->m_full_screen = value; })); - AddSequence(std::make_unique("screenSpace", [](const MenuFileParserState* state) + AddSequence(std::make_unique("screenSpace", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_screen_space = true; })); - AddSequence(std::make_unique("decoration", [](const MenuFileParserState* state) + AddSequence(std::make_unique("decoration", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_decoration = true; })); AddSequence(std::make_unique()); - AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("style", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_style = value; })); - AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("border", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_border = value; })); - AddSequence(std::make_unique("borderSize", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("borderSize", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_border_size = value; })); - AddSequence(std::make_unique("backcolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("backcolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_menu->m_back_color = value; })); - AddSequence(std::make_unique("forecolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("forecolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_menu->m_fore_color = value; })); - AddSequence(std::make_unique("bordercolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("bordercolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_menu->m_border_color = value; })); - AddSequence(std::make_unique("focuscolor", [](const MenuFileParserState* state, const CommonColor value) + AddSequence(std::make_unique("focuscolor", [](const MenuFileParserState* state, const TokenPos&, const CommonColor value) { state->m_current_menu->m_focus_color = value; })); - AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("background", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_menu->m_background = value; })); - AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("ownerdraw", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_owner_draw = value; })); - AddSequence(std::make_unique("ownerdrawFlag", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("ownerdrawFlag", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_owner_draw_flags |= value; })); - AddSequence(std::make_unique("outOfBoundsClick", [](const MenuFileParserState* state) + AddSequence(std::make_unique("outOfBoundsClick", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_out_of_bounds_click = true; })); - AddSequence(std::make_unique("soundLoop", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("soundLoop", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_menu->m_sound_loop = value; })); - AddSequence(std::make_unique("popup", [](const MenuFileParserState* state) + AddSequence(std::make_unique("popup", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_popup = true; })); - AddSequence(std::make_unique("fadeClamp", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("fadeClamp", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_fade_clamp = value; })); - AddSequence(std::make_unique("fadeCycle", [](const MenuFileParserState* state, const int value) + AddSequence(std::make_unique("fadeCycle", [](const MenuFileParserState* state, const TokenPos&, const int value) { state->m_current_menu->m_fade_cycle = value; })); - AddSequence(std::make_unique("fadeAmount", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("fadeAmount", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_fade_amount = value; })); - AddSequence(std::make_unique("fadeInAmount", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("fadeInAmount", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_fade_in_amount = value; })); - AddSequence(std::make_unique("blurWorld", [](const MenuFileParserState* state, const double value) + AddSequence(std::make_unique("blurWorld", [](const MenuFileParserState* state, const TokenPos&, const double value) { state->m_current_menu->m_blur_radius = value; })); - AddSequence(std::make_unique("legacySplitScreenScale", [](const MenuFileParserState* state) + AddSequence(std::make_unique("legacySplitScreenScale", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_legacy_split_screen_scale = true; })); - AddSequence(std::make_unique("hiddenDuringScope", [](const MenuFileParserState* state) + AddSequence(std::make_unique("hiddenDuringScope", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_hidden_during_scope = true; })); - AddSequence(std::make_unique("hiddenDuringFlashbang", [](const MenuFileParserState* state) + AddSequence(std::make_unique("hiddenDuringFlashbang", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_hidden_during_flashbang = true; })); - AddSequence(std::make_unique("hiddenDuringUI", [](const MenuFileParserState* state) + AddSequence(std::make_unique("hiddenDuringUI", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_hidden_during_ui = true; })); - AddSequence(std::make_unique("allowedBinding", [](const MenuFileParserState* state, const std::string& value) + AddSequence(std::make_unique("allowedBinding", [](const MenuFileParserState* state, const TokenPos&, const std::string& value) { state->m_current_menu->m_allowed_binding = value; })); - AddSequence(std::make_unique("textOnlyFocus", [](const MenuFileParserState* state) + AddSequence(std::make_unique("textOnlyFocus", [](const MenuFileParserState* state, const TokenPos&) { state->m_current_menu->m_text_only_focus = true; })); - AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywordAndBool("visible", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_visible_expression = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "X"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_rect_x_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "Y"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_rect_y_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "W"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_rect_w_exp = std::move(value); })); - AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(GenericExpressionPropertySequence::WithKeywords({"exp", "rect", "H"}, [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_rect_h_exp = std::move(value); })); - AddSequence(std::make_unique("onOpen", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("onOpen", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_on_open = std::move(value); })); - AddSequence(std::make_unique("onClose", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("onClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_on_close = std::move(value); })); - AddSequence(std::make_unique("onRequestClose", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("onRequestClose", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_on_request_close = std::move(value); })); - AddSequence(std::make_unique("onESC", [](const MenuFileParserState* state, std::unique_ptr value) + AddSequence(std::make_unique("onESC", [](const MenuFileParserState* state, const TokenPos&, std::unique_ptr value) { state->m_current_menu->m_on_esc = std::move(value); }));