From 039ad7e7570c9a90744ded7361440fc2973b319f Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Mon, 23 Aug 2010 14:46:54 +0000 Subject: [PATCH] Added support for getting a list of all available timezone IDs to LocaleRoster. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38321 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/locale/LocaleRoster.h | 1 + src/kits/locale/LocaleRoster.cpp | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/headers/os/locale/LocaleRoster.h b/headers/os/locale/LocaleRoster.h index 2f84da44a5..45492b3701 100644 --- a/headers/os/locale/LocaleRoster.h +++ b/headers/os/locale/LocaleRoster.h @@ -45,6 +45,7 @@ public: // contain the language-name(s) status_t GetAvailableCountries(BMessage* message) const; + status_t GetAvailableTimeZones(BMessage* message) const; status_t GetInstalledCatalogs(BMessage* message, const char* sigPattern = NULL, diff --git a/src/kits/locale/LocaleRoster.cpp b/src/kits/locale/LocaleRoster.cpp index dcdb5c5352..40a4e1e025 100644 --- a/src/kits/locale/LocaleRoster.cpp +++ b/src/kits/locale/LocaleRoster.cpp @@ -229,6 +229,37 @@ BLocaleRoster::GetAvailableCountries(BMessage* countries) const } +status_t +BLocaleRoster::GetAvailableTimeZones(BMessage* timeZones) const +{ + if (!timeZones) + return B_BAD_VALUE; + + status_t status = B_OK; + + int32 i; + StringEnumeration* zoneList = TimeZone::createEnumeration(); + + UErrorCode icuStatus = U_ZERO_ERROR; + int32 count = zoneList->count(icuStatus); + if (U_SUCCESS(icuStatus)) { + for (i = 0; i < count; ++i) { + const char* zoneID = zoneList->next(NULL, icuStatus); + if (zoneID == NULL || !U_SUCCESS(icuStatus)) { + status = B_ERROR; + break; + } + timeZones->AddString("timeZone", zoneID); + } + } else + status = B_ERROR; + + delete zoneList; + + return status; +} + + status_t BLocaleRoster::GetInstalledCatalogs(BMessage* languageList, const char* sigPattern, const char* langPattern, int32 fingerprint) const