javacommons/utils/src/formatterqtnative.cpp
changeset 80 d6dafc5d983f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/utils/src/formatterqtnative.cpp	Fri Oct 15 12:29:39 2010 +0300
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: formatterqtnative
+*
+*/
+
+
+#ifdef RD_JAVA_UI_QT
+#include <qcoreapplication.h>
+#include <qlibraryinfo.h>
+#include <qlocale.h>
+#include <qtranslator.h>
+#ifdef __SYMBIAN32__
+#include <hbparameterlengthlimiter.h>
+#include <hbstringutil.h>
+#else // __SYMBIAN32__
+// If HbParameterLengthLimiter is not available, define it as empty macro.
+#define HbParameterLengthLimiter(text) (text)
+#endif // __SYMBIAN32__
+#endif // RD_JAVA_UI_QT
+
+#include "com_nokia_mj_impl_utils_FormatterQt.h"
+#include "com_nokia_mj_impl_utils_ResourceLoader.h"
+#include "com_nokia_mj_impl_utils_ResourceLoaderQt.h"
+#include "javajniutils.h"
+#include "logger.h"
+
+#ifdef __SYMBIAN32__
+#include "s60commonutils.h"
+#else // __SYMBIAN32__
+#define KErrNone (0)
+#define KErrNotFound (-1)
+#endif // __SYMBIAN32__
+
+using namespace java::util;
+
+JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_ResourceLoader__1getLocaleIdQt
+(JNIEnv *env, jclass)
+{
+#ifdef RD_JAVA_UI_QT
+    QString localeName = QLocale::system().name();
+    jstring loc = env->NewString(localeName.utf16(), localeName.size());
+    return loc;
+#else // RD_JAVA_UI_QT
+    (void)env;     // just to suppress a warning
+    return NULL;
+#endif // RD_JAVA_UI_QT
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1createTranslator
+(JNIEnv *aEnv, jclass, jstring aResourceName)
+{
+#ifdef RD_JAVA_UI_QT
+    QString resourceName = QString::fromStdWString(
+        JniUtils::jstringToWstring(aEnv, aResourceName)) +
+        "_" + QLocale::system().name();
+
+    if (qApp == 0)
+    {
+        ELOG1(EUtils,
+              "ResourceLoaderQt__1createTranslator: QApplication "
+              "does not exist. Loading failed for %S",
+             resourceName.toStdWString().c_str());
+        return KErrNotFound;
+    }
+
+    QTranslator* translator = new QTranslator();
+    bool translatorLoaded = translator->load(
+        resourceName, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+    if (!translatorLoaded)
+    {
+        translatorLoaded = translator->load(
+            resourceName,
+            "C:" + QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+    }
+    if (!translatorLoaded)
+    {
+        translatorLoaded = translator->load(
+            resourceName,
+            "Z:" + QLibraryInfo::location(QLibraryInfo::TranslationsPath));
+    }
+    if (translatorLoaded)
+    {
+        qApp->installTranslator(translator);
+    }
+    else
+    {
+        ILOG1(EUtils, "__1createTranslator: loading resource %S failed",
+              resourceName.toStdWString().c_str());
+        delete translator;
+        return KErrNotFound;
+    }
+    // Return handle to translator.
+    return reinterpret_cast<unsigned int>(translator)>>2;
+#else // RD_JAVA_UI_QT
+    (void)aEnv; // just to suppress a warning
+    (void)aResourceName; // just to suppress a warning
+    return KErrNone;
+#endif // RD_JAVA_UI_QT
+}
+
+JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1deleteTranslator
+(JNIEnv *, jclass, jint aHandle)
+{
+#ifdef RD_JAVA_UI_QT
+    QTranslator *pTranslator = reinterpret_cast<QTranslator*>(aHandle<<2);
+    QCoreApplication::removeTranslator(pTranslator);
+    delete pTranslator;
+    return KErrNone;
+#else // RD_JAVA_UI_QT
+    (void)aHandle; // just to suppress a warning
+    return KErrNone;
+#endif // RD_JAVA_UI_QT
+}
+
+JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1translate
+(JNIEnv *aEnv, jclass, jint aHandle, jstring aId, jint aN)
+{
+#ifdef RD_JAVA_UI_QT
+    (void)aHandle; // just to suppress a warning
+    QString id = QString::fromStdWString(JniUtils::jstringToWstring(aEnv, aId));
+    QString result = QString(qtTrId(id.toUtf8().constData(), aN));
+    return aEnv->NewString(result.utf16(), result.size());
+#else // RD_JAVA_UI_QT
+    (void)aEnv; // just to suppress a warning
+    (void)aHandle; // just to suppress a warning
+    (void)aId; // just to suppress a warning
+    (void)aN; // just to suppress a warning
+    return aId;
+#endif // RD_JAVA_UI_QT
+}
+
+#ifdef RD_JAVA_UI_QT
+QString FormatTextArg(JNIEnv *aEnv, QString aText, jobjectArray aArgs, int aI)
+{
+    // Check the type of aArgs[aI] and call correct aText.arg() method.
+    jobject obj = aEnv->GetObjectArrayElement(aArgs, aI);
+    jclass clazz = aEnv->FindClass("java/lang/String");
+    if (aEnv->IsInstanceOf(obj, clazz))
+    {
+        return HbParameterLengthLimiter(aText).arg(
+            QString::fromStdWString(
+                JniUtils::jstringToWstring(aEnv, (jstring)obj)));
+    }
+    clazz = aEnv->FindClass("java/lang/Integer");
+    if (aEnv->IsInstanceOf(obj, clazz))
+    {
+        jmethodID method = aEnv->GetMethodID(clazz, "intValue", "()I");
+        return HbParameterLengthLimiter(aText).arg(
+            aEnv->CallIntMethod(obj, method));
+    }
+    clazz = aEnv->FindClass("java/lang/Character");
+    if (aEnv->IsInstanceOf(obj, clazz))
+    {
+        jmethodID method = aEnv->GetMethodID(clazz, "charValue", "()C");
+        return HbParameterLengthLimiter(aText).arg(
+            (char)aEnv->CallCharMethod(obj, method));
+    }
+    clazz = aEnv->FindClass("java/util/Calendar");
+    if (aEnv->IsInstanceOf(obj, clazz))
+    {
+        jmethodID method = aEnv->GetMethodID(clazz, "get", "(I)I");
+        int year = aEnv->CallIntMethod(obj, method, 1); // Calendar.YEAR
+        int month = aEnv->CallIntMethod(obj, method, 2) + 1; // Calendar.MONTH
+        int day = aEnv->CallIntMethod(obj, method, 5); // Calendar.DAY_OF_MONTH
+        QDate date(year, month, day);
+        QLocale locale;
+        return HbParameterLengthLimiter(aText).arg(
+            locale.toString(date, QLocale::ShortFormat));
+    }
+    return aText;
+}
+#endif // RD_JAVA_UI_QT
+
+JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_FormatterQt__1formatParameters
+(JNIEnv *aEnv, jclass, jstring aText, jobjectArray aArgs)
+{
+#ifdef RD_JAVA_UI_QT
+    std::wstring wsText = JniUtils::jstringToWstring(aEnv, aText);
+    QString text = QString::fromStdWString(wsText);
+    int argsLen = aEnv->GetArrayLength(aArgs);
+    for (int i = 0; i < argsLen; i++)
+    {
+        text = FormatTextArg(aEnv, text, aArgs, i);
+    }
+    return aEnv->NewString(text.utf16(), text.size());
+#else // RD_JAVA_UI_QT
+    (void)aEnv; // just to suppress a warning
+    (void)aText; // just to suppress a warning
+    (void)aArgs; // just to suppress a warning
+    return aText;
+#endif // RD_JAVA_UI_QT
+}
+
+JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_FormatterQt__1formatDigits
+(JNIEnv * aEnv, jclass, jstring aText)
+{
+    jstring ret = aText;
+#if defined(RD_JAVA_UI_QT) && defined(__SYMBIAN32__)
+    QString text = QString::fromStdWString(
+        JniUtils::jstringToWstring(aEnv, aText));
+    text = HbStringUtil::convertDigits(text);
+    ret = aEnv->NewString(text.utf16(), text.size());
+#else // RD_JAVA_UI_QT && __SYMBIAN32__
+    (void)aEnv; // just to suppress a warning
+#endif // RD_JAVA_UI_QT && __SYMBIAN32__
+    return ret;
+}