diff options
Diffstat (limited to 'mobile_src/Systeminfo/JSLocaleInfo.cpp')
-rw-r--r-- | mobile_src/Systeminfo/JSLocaleInfo.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/mobile_src/Systeminfo/JSLocaleInfo.cpp b/mobile_src/Systeminfo/JSLocaleInfo.cpp new file mode 100644 index 0000000..61310e4 --- /dev/null +++ b/mobile_src/Systeminfo/JSLocaleInfo.cpp @@ -0,0 +1,124 @@ +// +// Tizen Web Device API +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the License); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#include <memory> +#include "JSLocaleInfo.h" +#include <Logger.h> + +namespace DeviceAPI { +namespace Systeminfo { +using namespace WrtDeviceApis::CommonsJavaScript; +using namespace WrtDeviceApis::Commons; + +namespace { +const char* LOCALE_LANGUAGE_PROPERTY = "language"; +const char* LOCALE_COUNTRY_PROPERTY = "country"; +} + +JSClassRef JSLocaleInfo::m_classRef = NULL; + +JSClassDefinition JSLocaleInfo::m_classInfo = { + 0, + kJSClassAttributeNone, + "localeinfo", + 0, + m_properties, + NULL, + Initialize, + Finalize, + hasProperty, + getProperty, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + +JSStaticValue JSLocaleInfo::m_properties[] = { + { LOCALE_LANGUAGE_PROPERTY, getProperty, NULL, kJSPropertyAttributeReadOnly }, + { LOCALE_COUNTRY_PROPERTY, getProperty, NULL, kJSPropertyAttributeReadOnly }, + { 0, 0, 0, 0 } +}; + +const JSClassRef JSLocaleInfo::getClassRef() +{ + if (!m_classRef) { + m_classRef = JSClassCreate(&m_classInfo); + } + return m_classRef; +} + +const JSClassDefinition* JSLocaleInfo::getClassInfo() +{ + return &m_classInfo; +} + +void JSLocaleInfo::Initialize(JSContextRef context, JSObjectRef object) +{ +} + +void JSLocaleInfo::Finalize(JSObjectRef object) +{ + LoggerD("Entered"); + JSLocalePriv* priv = static_cast<JSLocalePriv*>(JSObjectGetPrivate(object)); + JSObjectSetPrivate(object, NULL); + LoggerD("Deleting localeInfo object"); + delete priv; +} + +bool JSLocaleInfo::hasProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName) +{ + return JSUtils::hasProperty(m_properties, propertyName); +} + +JSObjectRef JSLocaleInfo::createJSObject(JSContextRef context, const LocalePropertiesPtr localeInfo) +{ + JSLocalePriv *priv = new JSLocalePriv(context, localeInfo); + return JSObjectMake(context, getClassRef(), priv); +} + +JSValueRef JSLocaleInfo::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception) +{ + LoggerD("Enter"); + JSLocalePriv *priv = static_cast<JSLocalePriv*>(JSObjectGetPrivate(object)); + if (NULL == priv) { + LoggerE("Private object not set."); + return JSValueMakeUndefined(context); + } + + Try + { + LocalePropertiesPtr localeInfo = priv->getObject(); + Converter convert(context); + + if (JSStringIsEqualToUTF8CString(propertyName, LOCALE_LANGUAGE_PROPERTY)) { + return convert.toJSValueRef(localeInfo->language); + } else if (JSStringIsEqualToUTF8CString(propertyName, LOCALE_COUNTRY_PROPERTY)) { + return convert.toJSValueRef(localeInfo->country); + } + } + Catch(Exception) + { + LoggerE("Exception: " << _rethrown_exception.GetMessage()); + } + return JSValueMakeUndefined(context); +} +} +} |