javacommons/utils/src/formatterqtnative.cpp
changeset 80 d6dafc5d983f
equal deleted inserted replaced
78:71ad690e91f5 80:d6dafc5d983f
       
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: formatterqtnative
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #ifdef RD_JAVA_UI_QT
       
    20 #include <qcoreapplication.h>
       
    21 #include <qlibraryinfo.h>
       
    22 #include <qlocale.h>
       
    23 #include <qtranslator.h>
       
    24 #ifdef __SYMBIAN32__
       
    25 #include <hbparameterlengthlimiter.h>
       
    26 #include <hbstringutil.h>
       
    27 #else // __SYMBIAN32__
       
    28 // If HbParameterLengthLimiter is not available, define it as empty macro.
       
    29 #define HbParameterLengthLimiter(text) (text)
       
    30 #endif // __SYMBIAN32__
       
    31 #endif // RD_JAVA_UI_QT
       
    32 
       
    33 #include "com_nokia_mj_impl_utils_FormatterQt.h"
       
    34 #include "com_nokia_mj_impl_utils_ResourceLoader.h"
       
    35 #include "com_nokia_mj_impl_utils_ResourceLoaderQt.h"
       
    36 #include "javajniutils.h"
       
    37 #include "logger.h"
       
    38 
       
    39 #ifdef __SYMBIAN32__
       
    40 #include "s60commonutils.h"
       
    41 #else // __SYMBIAN32__
       
    42 #define KErrNone (0)
       
    43 #define KErrNotFound (-1)
       
    44 #endif // __SYMBIAN32__
       
    45 
       
    46 using namespace java::util;
       
    47 
       
    48 JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_ResourceLoader__1getLocaleIdQt
       
    49 (JNIEnv *env, jclass)
       
    50 {
       
    51 #ifdef RD_JAVA_UI_QT
       
    52     QString localeName = QLocale::system().name();
       
    53     jstring loc = env->NewString(localeName.utf16(), localeName.size());
       
    54     return loc;
       
    55 #else // RD_JAVA_UI_QT
       
    56     (void)env;     // just to suppress a warning
       
    57     return NULL;
       
    58 #endif // RD_JAVA_UI_QT
       
    59 }
       
    60 
       
    61 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1createTranslator
       
    62 (JNIEnv *aEnv, jclass, jstring aResourceName)
       
    63 {
       
    64 #ifdef RD_JAVA_UI_QT
       
    65     QString resourceName = QString::fromStdWString(
       
    66         JniUtils::jstringToWstring(aEnv, aResourceName)) +
       
    67         "_" + QLocale::system().name();
       
    68 
       
    69     if (qApp == 0)
       
    70     {
       
    71         ELOG1(EUtils,
       
    72               "ResourceLoaderQt__1createTranslator: QApplication "
       
    73               "does not exist. Loading failed for %S",
       
    74              resourceName.toStdWString().c_str());
       
    75         return KErrNotFound;
       
    76     }
       
    77 
       
    78     QTranslator* translator = new QTranslator();
       
    79     bool translatorLoaded = translator->load(
       
    80         resourceName, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
       
    81     if (!translatorLoaded)
       
    82     {
       
    83         translatorLoaded = translator->load(
       
    84             resourceName,
       
    85             "C:" + QLibraryInfo::location(QLibraryInfo::TranslationsPath));
       
    86     }
       
    87     if (!translatorLoaded)
       
    88     {
       
    89         translatorLoaded = translator->load(
       
    90             resourceName,
       
    91             "Z:" + QLibraryInfo::location(QLibraryInfo::TranslationsPath));
       
    92     }
       
    93     if (translatorLoaded)
       
    94     {
       
    95         qApp->installTranslator(translator);
       
    96     }
       
    97     else
       
    98     {
       
    99         ILOG1(EUtils, "__1createTranslator: loading resource %S failed",
       
   100               resourceName.toStdWString().c_str());
       
   101         delete translator;
       
   102         return KErrNotFound;
       
   103     }
       
   104     // Return handle to translator.
       
   105     return reinterpret_cast<unsigned int>(translator)>>2;
       
   106 #else // RD_JAVA_UI_QT
       
   107     (void)aEnv; // just to suppress a warning
       
   108     (void)aResourceName; // just to suppress a warning
       
   109     return KErrNone;
       
   110 #endif // RD_JAVA_UI_QT
       
   111 }
       
   112 
       
   113 JNIEXPORT jint JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1deleteTranslator
       
   114 (JNIEnv *, jclass, jint aHandle)
       
   115 {
       
   116 #ifdef RD_JAVA_UI_QT
       
   117     QTranslator *pTranslator = reinterpret_cast<QTranslator*>(aHandle<<2);
       
   118     QCoreApplication::removeTranslator(pTranslator);
       
   119     delete pTranslator;
       
   120     return KErrNone;
       
   121 #else // RD_JAVA_UI_QT
       
   122     (void)aHandle; // just to suppress a warning
       
   123     return KErrNone;
       
   124 #endif // RD_JAVA_UI_QT
       
   125 }
       
   126 
       
   127 JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_ResourceLoaderQt__1translate
       
   128 (JNIEnv *aEnv, jclass, jint aHandle, jstring aId, jint aN)
       
   129 {
       
   130 #ifdef RD_JAVA_UI_QT
       
   131     (void)aHandle; // just to suppress a warning
       
   132     QString id = QString::fromStdWString(JniUtils::jstringToWstring(aEnv, aId));
       
   133     QString result = QString(qtTrId(id.toUtf8().constData(), aN));
       
   134     return aEnv->NewString(result.utf16(), result.size());
       
   135 #else // RD_JAVA_UI_QT
       
   136     (void)aEnv; // just to suppress a warning
       
   137     (void)aHandle; // just to suppress a warning
       
   138     (void)aId; // just to suppress a warning
       
   139     (void)aN; // just to suppress a warning
       
   140     return aId;
       
   141 #endif // RD_JAVA_UI_QT
       
   142 }
       
   143 
       
   144 #ifdef RD_JAVA_UI_QT
       
   145 QString FormatTextArg(JNIEnv *aEnv, QString aText, jobjectArray aArgs, int aI)
       
   146 {
       
   147     // Check the type of aArgs[aI] and call correct aText.arg() method.
       
   148     jobject obj = aEnv->GetObjectArrayElement(aArgs, aI);
       
   149     jclass clazz = aEnv->FindClass("java/lang/String");
       
   150     if (aEnv->IsInstanceOf(obj, clazz))
       
   151     {
       
   152         return HbParameterLengthLimiter(aText).arg(
       
   153             QString::fromStdWString(
       
   154                 JniUtils::jstringToWstring(aEnv, (jstring)obj)));
       
   155     }
       
   156     clazz = aEnv->FindClass("java/lang/Integer");
       
   157     if (aEnv->IsInstanceOf(obj, clazz))
       
   158     {
       
   159         jmethodID method = aEnv->GetMethodID(clazz, "intValue", "()I");
       
   160         return HbParameterLengthLimiter(aText).arg(
       
   161             aEnv->CallIntMethod(obj, method));
       
   162     }
       
   163     clazz = aEnv->FindClass("java/lang/Character");
       
   164     if (aEnv->IsInstanceOf(obj, clazz))
       
   165     {
       
   166         jmethodID method = aEnv->GetMethodID(clazz, "charValue", "()C");
       
   167         return HbParameterLengthLimiter(aText).arg(
       
   168             (char)aEnv->CallCharMethod(obj, method));
       
   169     }
       
   170     clazz = aEnv->FindClass("java/util/Calendar");
       
   171     if (aEnv->IsInstanceOf(obj, clazz))
       
   172     {
       
   173         jmethodID method = aEnv->GetMethodID(clazz, "get", "(I)I");
       
   174         int year = aEnv->CallIntMethod(obj, method, 1); // Calendar.YEAR
       
   175         int month = aEnv->CallIntMethod(obj, method, 2) + 1; // Calendar.MONTH
       
   176         int day = aEnv->CallIntMethod(obj, method, 5); // Calendar.DAY_OF_MONTH
       
   177         QDate date(year, month, day);
       
   178         QLocale locale;
       
   179         return HbParameterLengthLimiter(aText).arg(
       
   180             locale.toString(date, QLocale::ShortFormat));
       
   181     }
       
   182     return aText;
       
   183 }
       
   184 #endif // RD_JAVA_UI_QT
       
   185 
       
   186 JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_FormatterQt__1formatParameters
       
   187 (JNIEnv *aEnv, jclass, jstring aText, jobjectArray aArgs)
       
   188 {
       
   189 #ifdef RD_JAVA_UI_QT
       
   190     std::wstring wsText = JniUtils::jstringToWstring(aEnv, aText);
       
   191     QString text = QString::fromStdWString(wsText);
       
   192     int argsLen = aEnv->GetArrayLength(aArgs);
       
   193     for (int i = 0; i < argsLen; i++)
       
   194     {
       
   195         text = FormatTextArg(aEnv, text, aArgs, i);
       
   196     }
       
   197     return aEnv->NewString(text.utf16(), text.size());
       
   198 #else // RD_JAVA_UI_QT
       
   199     (void)aEnv; // just to suppress a warning
       
   200     (void)aText; // just to suppress a warning
       
   201     (void)aArgs; // just to suppress a warning
       
   202     return aText;
       
   203 #endif // RD_JAVA_UI_QT
       
   204 }
       
   205 
       
   206 JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_utils_FormatterQt__1formatDigits
       
   207 (JNIEnv * aEnv, jclass, jstring aText)
       
   208 {
       
   209     jstring ret = aText;
       
   210 #if defined(RD_JAVA_UI_QT) && defined(__SYMBIAN32__)
       
   211     QString text = QString::fromStdWString(
       
   212         JniUtils::jstringToWstring(aEnv, aText));
       
   213     text = HbStringUtil::convertDigits(text);
       
   214     ret = aEnv->NewString(text.utf16(), text.size());
       
   215 #else // RD_JAVA_UI_QT && __SYMBIAN32__
       
   216     (void)aEnv; // just to suppress a warning
       
   217 #endif // RD_JAVA_UI_QT && __SYMBIAN32__
       
   218     return ret;
       
   219 }