From 0542338d4de0c4f6cfc0bb0e33f6ee55edf6d53a Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 16 Feb 2017 00:03:02 +0000 Subject: [PATCH] Use interface for config enum --- src/openrct2/config.c | 2 +- src/openrct2/config/Config.cpp | 40 ++++++++++++++++++++++++-------- src/openrct2/config/ConfigEnum.h | 18 ++++++++++---- src/openrct2/config/IniReader.h | 2 +- 4 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/openrct2/config.c b/src/openrct2/config.c index 3368fe5cb0..4452ca17e8 100644 --- a/src/openrct2/config.c +++ b/src/openrct2/config.c @@ -500,7 +500,7 @@ bool config_save_default() return false; } -bool config_open_2(const utf8string path) +static bool config_open_2(const utf8string path) { SDL_RWops *file; utf8string lineBuffer; diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index 53f5ecec55..a0b43dfb30 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -17,17 +17,19 @@ #include #include "../core/Exception.hpp" #include "../interface/window.h" -#include "../localisation/language.h" #include "../network/network.h" #include "IniReader.h" extern "C" { #include "../config.h" + #include "../localisation/language.h" } namespace Config { + #pragma region Enums + static auto Enum_MeasurementFormat = ConfigEnum( { ConfigEnumEntry("IMPERIAL", MEASUREMENT_FORMAT_IMPERIAL), @@ -64,12 +66,6 @@ namespace Config ConfigEnumEntry("SUFFIX", CURRENCY_SUFFIX), }); - static auto Enum_CurrencySymbolAffix = ConfigEnum( - { - ConfigEnumEntry("PREFIX", CURRENCY_PREFIX), - ConfigEnumEntry("SUFFIX", CURRENCY_SUFFIX), - }); - static auto Enum_DateFormat = ConfigEnum( { ConfigEnumEntry("DD/MM/YY", DATE_FORMAT_DMY), @@ -91,9 +87,33 @@ namespace Config ConfigEnumEntry("FAHRENHEIT", TEMPERATURE_FORMAT_F), }); - static auto Enum_LanguageEnum = ConfigEnum( + /** + * Config enum wrapping LanguagesDescriptors. + */ + static class LanguageConfigEnum final : public IConfigEnum { - }); + public: + std::string GetName(sint32 value) const override + { + return LanguagesDescriptors[value].locale; + } + + sint32 GetValue(const std::string &key, sint32 defaultValue) const override + { + sint32 i = 0; + for (const auto &langDesc : LanguagesDescriptors) + { + if (String::Equals(key.c_str(), langDesc.locale)) + { + return i; + } + i++; + } + return defaultValue; + } + } Enum_LanguageEnum; + + #pragma endregion static void ReadGeneral(IIniReader * reader) { @@ -162,7 +182,7 @@ namespace Config model->last_save_landscape_directory = reader->GetCString("last_landscape_directory", nullptr); model->last_save_scenario_directory = reader->GetCString("last_scenario_directory", nullptr); model->last_save_track_directory = reader->GetCString("last_track_directory", nullptr); - model->window_limit = reader->GetBoolean("window_limit", WINDOW_LIMIT_MAX); + model->window_limit = reader->GetSint32("window_limit", WINDOW_LIMIT_MAX); model->zoom_to_cursor = reader->GetBoolean("zoom_to_cursor", true); model->render_weather_effects = reader->GetBoolean("render_weather_effects", true); model->render_weather_gloom = reader->GetBoolean("render_weather_gloom", true); diff --git a/src/openrct2/config/ConfigEnum.h b/src/openrct2/config/ConfigEnum.h index ef2013c338..5cd0c231e0 100644 --- a/src/openrct2/config/ConfigEnum.h +++ b/src/openrct2/config/ConfigEnum.h @@ -21,7 +21,7 @@ #include "../core/String.hpp" template -struct ConfigEnumEntry +struct ConfigEnumEntry final { std::string Key; T Value; @@ -34,7 +34,15 @@ struct ConfigEnumEntry }; template -class ConfigEnum +interface IConfigEnum +{ + virtual ~IConfigEnum() = default; + virtual std::string GetName(T value) const abstract; + virtual T GetValue(const std::string &key, T defaultValue) const abstract; +}; + +template +class ConfigEnum final : public IConfigEnum { private: std::vector> _entries; @@ -45,9 +53,9 @@ public: _entries = entries; } - std::string GetName(T value) + std::string GetName(T value) const override { - for (const auto &entry : _entries) const + for (const auto &entry : _entries) { if (entry.Value == value) { @@ -57,7 +65,7 @@ public: return std::string(); } - T GetValue(const std::string &key, T defaultValue) const + T GetValue(const std::string &key, T defaultValue) const override { for (const auto &entry : _entries) { diff --git a/src/openrct2/config/IniReader.h b/src/openrct2/config/IniReader.h index 5dcd2e7fca..5df6e1dc7a 100644 --- a/src/openrct2/config/IniReader.h +++ b/src/openrct2/config/IniReader.h @@ -31,7 +31,7 @@ interface IIniReader virtual bool TryGetString(const std::string &name, std::string * outValue) const abstract; template - T GetEnum(const std::string &name, T defaultValue, const ConfigEnum &configEnum) const + T GetEnum(const std::string &name, T defaultValue, const IConfigEnum &configEnum) const { std::string szValue; if (!TryGetString(name, &szValue))