--- /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;
+}