From f1a1639c8c1990e3e1cfb67612b1e83448683d12 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Fri, 7 Apr 2017 18:12:01 -0400 Subject: [PATCH 1/6] Auto-detect locale on first run --- src/openrct2/config/Config.cpp | 10 +++---- src/openrct2/platform/platform.h | 2 ++ src/openrct2/platform/windows.c | 46 ++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index db0a5a2821..fdc4c24706 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -133,7 +133,7 @@ namespace Config model->autosave_frequency = reader->GetSint32("autosave", AUTOSAVE_EVERY_5MINUTES); model->confirmation_prompt = reader->GetBoolean("confirmation_prompt", false); model->construction_marker_colour = reader->GetBoolean("construction_marker_colour", false); - model->currency_format = reader->GetEnum("currency_format", CURRENCY_POUNDS, Enum_Currency); + model->currency_format = reader->GetEnum("currency_format", platform_get_locale_currency(), Enum_Currency); model->custom_currency_rate = reader->GetSint32("custom_currency_rate", 10); model->custom_currency_affix = reader->GetEnum("custom_currency_affix", CURRENCY_SUFFIX, Enum_CurrencySymbolAffix); model->custom_currency_symbol = reader->GetCString("custom_currency_symbol", "Ctm"); @@ -144,13 +144,13 @@ namespace Config model->rct1_path = reader->GetCString("rct1_path", nullptr); model->rct2_path = reader->GetCString("game_path", nullptr); model->landscape_smoothing = reader->GetBoolean("landscape_smoothing", true); - model->language = reader->GetEnum("language", LANGUAGE_ENGLISH_UK, Enum_LanguageEnum); - model->measurement_format = reader->GetEnum("measurement_format", MEASUREMENT_FORMAT_METRIC, Enum_MeasurementFormat); + model->language = reader->GetEnum("language", platform_get_locale_language(), Enum_LanguageEnum); + model->measurement_format = reader->GetEnum("measurement_format", platform_get_locale_measurement_format(), Enum_MeasurementFormat); model->play_intro = reader->GetBoolean("play_intro", false); model->save_plugin_data = reader->GetBoolean("save_plugin_data", true); model->debugging_tools = reader->GetBoolean("debugging_tools", false); model->show_height_as_units = reader->GetBoolean("show_height_as_units", false); - model->temperature_format = reader->GetEnum("temperature_format", TEMPERATURE_FORMAT_C, Enum_Temperature); + model->temperature_format = reader->GetEnum("temperature_format", platform_get_locale_temperature_format(), Enum_Temperature); model->window_height = reader->GetSint32("window_height", -1); model->window_snap_proximity = reader->GetSint32("window_snap_proximity", 5); model->window_width = reader->GetSint32("window_width", -1); @@ -161,7 +161,7 @@ namespace Config model->test_unfinished_tracks = reader->GetBoolean("test_unfinished_tracks", false); model->no_test_crashes = reader->GetBoolean("no_test_crashes", false); - model->date_format = reader->GetEnum("date_format", DATE_FORMAT_DAY_MONTH_YEAR, Enum_DateFormat); + model->date_format = reader->GetEnum("date_format", platform_get_locale_date_format(), Enum_DateFormat); model->auto_staff_placement = reader->GetBoolean("auto_staff", true); model->handymen_mow_default = reader->GetBoolean("handymen_mow_default", false); model->default_inspection_interval = reader->GetSint32("default_inspection_interval", 2); diff --git a/src/openrct2/platform/platform.h b/src/openrct2/platform/platform.h index 97dc5cab79..37badfd9dd 100644 --- a/src/openrct2/platform/platform.h +++ b/src/openrct2/platform/platform.h @@ -201,6 +201,8 @@ uint8 platform_get_currency_value(const char *currencyCode); uint16 platform_get_locale_language(); uint8 platform_get_locale_measurement_format(); uint8 platform_get_locale_temperature_format(); +uint8 platform_get_locale_date_format(); + #ifndef NO_TTF bool platform_get_font_path(TTFFontDescriptor *font, utf8 *buffer, size_t size); #endif // NO_TTF diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index fe3bfef5e2..cd6e28fb05 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -30,8 +30,10 @@ #include #include #include +#include #include "../config/Config.h" +#include "../localisation/date.h" #include "../localisation/language.h" #include "../OpenRCT2.h" #include "../util/util.h" @@ -949,6 +951,50 @@ uint8 platform_get_locale_temperature_format() return TEMPERATURE_FORMAT_C; } +uint8 platform_get_locale_date_format() +{ + // Retrieve short date format, eg "MM/dd/yyyy" + wchar_t dateFormat[20]; + if (GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SSHORTDATE, dateFormat, sizeof(dateFormat)) == 0) + { + return DATE_FORMAT_DAY_MONTH_YEAR; + } + + // The only valid characters for format types are: dgyM + // We try to find 3 strings of format types, ignore any characters in between. + // We also ignore 'g', as it represents 'era' and we don't have that concept + // in our date formats. + // https://msdn.microsoft.com/en-us/library/windows/desktop/dd317787(v=vs.85).aspx + // + wchar_t first[sizeof(dateFormat)]; + wchar_t second[sizeof(dateFormat)]; + if (swscanf(dateFormat, L"%l[dyM]%*l[^dyM]%l[dyM]%*l[^dyM]%*l[dyM]", first, second) != 2) { + return DATE_FORMAT_DAY_MONTH_YEAR; + } + + if (wcsncmp(L"d", first, 1) == 0) + { + return DATE_FORMAT_DAY_MONTH_YEAR; + } + else if (wcsncmp(L"M", first, 1) == 0) + { + return DATE_FORMAT_MONTH_DAY_YEAR; + } + else if (wcsncmp(L"y", first, 1) == 0) + { + if (wcsncmp(L"d", second, 1) == 0) { + return DATE_FORMAT_YEAR_DAY_MONTH; + } + else { + // Closest possible option + return DATE_FORMAT_YEAR_MONTH_DAY; + } + } + + // Default fallback + return DATE_FORMAT_DAY_MONTH_YEAR; +} + bool platform_check_steam_overlay_attached() { return GetModuleHandle("GameOverlayRenderer.dll") != NULL; From 8d2d430de0e90e510d9aafcdf916feb506c8f456 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Sat, 8 Apr 2017 22:50:34 -0400 Subject: [PATCH 2/6] Default implementation of date format --- src/openrct2/platform/linux.c | 5 +++++ src/openrct2/platform/macos.m | 5 +++++ src/openrct2/platform/posix.c | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/openrct2/platform/linux.c b/src/openrct2/platform/linux.c index 4a3be91bc9..0cdfc20941 100644 --- a/src/openrct2/platform/linux.c +++ b/src/openrct2/platform/linux.c @@ -255,6 +255,11 @@ uint8 platform_get_locale_measurement_format(){ return MEASUREMENT_FORMAT_METRIC; } +uint8 platform_get_locale_date_format() +{ + return DATE_FORMAT_DAY_MONTH_YEAR; +} + static void execute_cmd(char *command, sint32 *exit_value, char *buf, size_t *buf_size) { FILE *f; size_t n_chars; diff --git a/src/openrct2/platform/macos.m b/src/openrct2/platform/macos.m index b70fbf2bce..4f7e6b1b26 100644 --- a/src/openrct2/platform/macos.m +++ b/src/openrct2/platform/macos.m @@ -279,6 +279,11 @@ uint8 platform_get_locale_measurement_format() } } +uint8 platform_get_locale_date_format() +{ + return DATE_FORMAT_DAY_MONTH_YEAR; +} + sint32 platform_get_non_window_flags() { return SDL_WINDOW_MINIMIZED | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP; diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 10edddbf22..1821aca63c 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -801,6 +801,11 @@ uint8 platform_get_locale_temperature_format(){ return TEMPERATURE_FORMAT_C; } +uint8 platform_get_locale_date_format() +{ + return DATE_FORMAT_DAY_MONTH_YEAR; +} + datetime64 platform_get_datetime_now_utc() { const datetime64 epochAsTicks = 621355968000000000; From 8ed51d46ff04c1397363e7c4f2ff0f96d295f09c Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Sat, 8 Apr 2017 22:58:45 -0400 Subject: [PATCH 3/6] Add import for date format --- src/openrct2/platform/linux.c | 2 ++ src/openrct2/platform/macos.m | 2 ++ src/openrct2/platform/posix.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/openrct2/platform/linux.c b/src/openrct2/platform/linux.c index 0cdfc20941..1fc785099f 100644 --- a/src/openrct2/platform/linux.c +++ b/src/openrct2/platform/linux.c @@ -34,6 +34,7 @@ #include #include "../config/Config.h" +#include "../localisation/date.h" #include "../localisation/language.h" #include "../localisation/string_ids.h" #include "../util/util.h" @@ -257,6 +258,7 @@ uint8 platform_get_locale_measurement_format(){ uint8 platform_get_locale_date_format() { + // TODO Stub implementation return DATE_FORMAT_DAY_MONTH_YEAR; } diff --git a/src/openrct2/platform/macos.m b/src/openrct2/platform/macos.m index 4f7e6b1b26..8bf8ecf0b9 100644 --- a/src/openrct2/platform/macos.m +++ b/src/openrct2/platform/macos.m @@ -21,6 +21,7 @@ #include #include "platform.h" #include "../util/util.h" +#include "../localisation/date.h" #include "../localisation/language.h" #include "../config/Config.h" @@ -281,6 +282,7 @@ uint8 platform_get_locale_measurement_format() uint8 platform_get_locale_date_format() { + // TODO Stub implementation return DATE_FORMAT_DAY_MONTH_YEAR; } diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 1821aca63c..8ca0be46f9 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -27,6 +27,7 @@ #include #include #include "../config/Config.h" +#include "../localisation/date.h" #include "../localisation/language.h" #include "../OpenRCT2.h" #include "../util/util.h" @@ -803,6 +804,7 @@ uint8 platform_get_locale_temperature_format(){ uint8 platform_get_locale_date_format() { + // TODO Stub implementation return DATE_FORMAT_DAY_MONTH_YEAR; } From 04ec93b0384963c99db5bb8702b8c17a1edf34d4 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Sat, 8 Apr 2017 23:10:16 -0400 Subject: [PATCH 4/6] Move stub implementation to posix.c --- src/openrct2/platform/linux.c | 7 ------- src/openrct2/platform/macos.m | 7 ------- 2 files changed, 14 deletions(-) diff --git a/src/openrct2/platform/linux.c b/src/openrct2/platform/linux.c index 1fc785099f..4a3be91bc9 100644 --- a/src/openrct2/platform/linux.c +++ b/src/openrct2/platform/linux.c @@ -34,7 +34,6 @@ #include #include "../config/Config.h" -#include "../localisation/date.h" #include "../localisation/language.h" #include "../localisation/string_ids.h" #include "../util/util.h" @@ -256,12 +255,6 @@ uint8 platform_get_locale_measurement_format(){ return MEASUREMENT_FORMAT_METRIC; } -uint8 platform_get_locale_date_format() -{ - // TODO Stub implementation - return DATE_FORMAT_DAY_MONTH_YEAR; -} - static void execute_cmd(char *command, sint32 *exit_value, char *buf, size_t *buf_size) { FILE *f; size_t n_chars; diff --git a/src/openrct2/platform/macos.m b/src/openrct2/platform/macos.m index 8bf8ecf0b9..b70fbf2bce 100644 --- a/src/openrct2/platform/macos.m +++ b/src/openrct2/platform/macos.m @@ -21,7 +21,6 @@ #include #include "platform.h" #include "../util/util.h" -#include "../localisation/date.h" #include "../localisation/language.h" #include "../config/Config.h" @@ -280,12 +279,6 @@ uint8 platform_get_locale_measurement_format() } } -uint8 platform_get_locale_date_format() -{ - // TODO Stub implementation - return DATE_FORMAT_DAY_MONTH_YEAR; -} - sint32 platform_get_non_window_flags() { return SDL_WINDOW_MINIMIZED | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP; From e8136aa9505c5a57ed61e13734888c720d6cc5a9 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Sat, 8 Apr 2017 23:23:09 -0400 Subject: [PATCH 5/6] Remove unused include --- src/openrct2/platform/windows.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openrct2/platform/windows.c b/src/openrct2/platform/windows.c index cd6e28fb05..8ecabb2218 100644 --- a/src/openrct2/platform/windows.c +++ b/src/openrct2/platform/windows.c @@ -30,7 +30,6 @@ #include #include #include -#include #include "../config/Config.h" #include "../localisation/date.h" From 6f0232431ecc1e3cc3f52a28abca9407ebbd7d00 Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Sun, 9 Apr 2017 17:05:48 -0400 Subject: [PATCH 6/6] Replace comment with STUB macro --- src/openrct2/platform/posix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/platform/posix.c b/src/openrct2/platform/posix.c index 8ca0be46f9..3891930217 100644 --- a/src/openrct2/platform/posix.c +++ b/src/openrct2/platform/posix.c @@ -804,7 +804,7 @@ uint8 platform_get_locale_temperature_format(){ uint8 platform_get_locale_date_format() { - // TODO Stub implementation + STUB(); return DATE_FORMAT_DAY_MONTH_YEAR; }