From 4c0c9989d249ef1af027f7fda85a4f2922635044 Mon Sep 17 00:00:00 2001 From: Philippe Lelong Date: Mon, 19 Dec 2016 16:00:20 +0100 Subject: [PATCH] various changes in user language settings Signed-off-by: Philippe Lelong --- HomeScreen/qml/Home.qml | 28 +++++++++--- HomeScreen/qml/ShortcutArea.qml | 24 ++++++++-- HomeScreen/qml/images/Home/french_flag.png | Bin 0 -> 791 bytes HomeScreen/qml/images/Home/home.qrc | 2 + HomeScreen/qml/images/Home/us_flag.png | Bin 0 -> 4042 bytes HomeScreen/src2/applicationmodel.cpp | 69 +++++++++++++++++++++-------- HomeScreen/src2/applicationmodel.h | 1 + HomeScreen/src2/usermanagement.cpp | 24 ++++++++-- HomeScreen/src2/usermanagement.h | 9 ++-- 9 files changed, 121 insertions(+), 36 deletions(-) create mode 100755 HomeScreen/qml/images/Home/french_flag.png create mode 100755 HomeScreen/qml/images/Home/us_flag.png diff --git a/HomeScreen/qml/Home.qml b/HomeScreen/qml/Home.qml index 63bb385..756efb9 100644 --- a/HomeScreen/qml/Home.qml +++ b/HomeScreen/qml/Home.qml @@ -41,6 +41,16 @@ Item { source: './images/B14-90.png' visible: false } + Image { + id: flagLanguage + scale: 0.7 + anchors.left: parent.left + anchors.leftMargin: 20 + anchors.top: parent.top + anchors.topMargin: 10 + source: './images/us_flag.png' + visible: true + } Image { id: visa width: 200 @@ -68,12 +78,12 @@ Item { anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: 40 - visible: false + visible: true Text { id: helloText anchors.centerIn: parent color: "white" - text: "" + text: "No Authenticated User" font.pixelSize: 40 font.family: "Roboto" SequentialAnimation on font.letterSpacing { @@ -81,10 +91,12 @@ Item { loops: 1; NumberAnimation { from: 0; to: 50; easing.type: Easing.InQuad; duration: 3000 } onRunningChanged: { - if(running) + if(running) { hello.visible = true - else - hello.visible = false + } else { + helloText.opacity = 1 + helloText.font.letterSpacing = 0 + } } } @@ -110,6 +122,10 @@ Item { visa.visible = show cardNumber.text = num; } + function changeFlag(flagImage) { + flagLanguage.source = flagImage + } + GridView { anchors.centerIn: parent width: cellHeight * 3 @@ -123,6 +139,7 @@ Item { width: 320 height: 320 Image { + id: appImage anchors.fill: parent source: './images/HMI_AppLauncher_%1_%2-01.png'.arg(model.icon).arg(pressed ? 'Active' : 'Inactive') Label { @@ -136,6 +153,7 @@ Item { text: '%1'.arg(model.name) function myChangeLanguage() { text = '%1'.arg(model.name) + appImage.source = './images/HMI_AppLauncher_%1_%2-01.png'.arg(model.icon).arg(pressed ? 'Active' : 'Inactive') } Component.onCompleted: { root.languageChanged.connect(myChangeLanguage) diff --git a/HomeScreen/qml/ShortcutArea.qml b/HomeScreen/qml/ShortcutArea.qml index 2590747..33ec539 100644 --- a/HomeScreen/qml/ShortcutArea.qml +++ b/HomeScreen/qml/ShortcutArea.qml @@ -50,14 +50,32 @@ Item { function languageChanged(lang) { if(lang === "fr") { applicationModel.setProperty(0, "label", 'ACCEUIL') - applicationModel.setProperty(1, "label", 'MULTIMÉDIA') - applicationModel.setProperty(2, "label", 'CLIMATISATION') - applicationModel.setProperty(3, "label", 'NAVIGATION') + + applicationModel.setProperty(2, "label", 'MULTIMÉDIA') + applicationModel.setProperty(2, "name", 'Multimedia') + applicationModel.setProperty(2, "application", 'mediaplayer@0.1') + + applicationModel.setProperty(3, "label", 'CLIMATISATION') + applicationModel.setProperty(3, "name", 'HVAC') + applicationModel.setProperty(3, "application", 'hvac@0.1') + + applicationModel.setProperty(1, "label", 'NAVIGATION') + applicationModel.setProperty(1, "name", 'Navigation') + applicationModel.setProperty(1, "application", 'navigation@0.1') } else { applicationModel.setProperty(0, "label", 'HOME') + applicationModel.setProperty(1, "label", 'MULTIMEDIA') + applicationModel.setProperty(1, "name", 'Multimedia') + applicationModel.setProperty(1, "application", 'mediaplayer@0.1') + applicationModel.setProperty(2, "label", 'HVAC') + applicationModel.setProperty(2, "name", 'HVAC') + applicationModel.setProperty(2, "application", 'hvac@0.1') + applicationModel.setProperty(3, "label", 'NAVIGATION') + applicationModel.setProperty(3, "name", 'Navigation') + applicationModel.setProperty(3, "application", 'navigation@0.1') } } diff --git a/HomeScreen/qml/images/Home/french_flag.png b/HomeScreen/qml/images/Home/french_flag.png new file mode 100755 index 0000000000000000000000000000000000000000..948f82860172a6ebd59e96eadb32b344ecbdd72e GIT binary patch literal 791 zcmeAS@N?(olHy`uVBq!ia0vp^(||aQg9%73`}ltikm4-xh%9Dc;1&j9Muu5)Bp4W& zPI|gHhE&XXdv{}&NTA5EkMHm7+?^fct0=}Md}&4Nf`rAc^Bi?*`8IAAIdbn5yWo7s zW@)DGxe6{ltqKPx_@&JXTC|84!ZWjfp8b?l4{ zGtRPamTYro{#CmCbbWwRm6wM<=SxjRTh%4YTfR)0Fi+@GFv)_d&0q6bUBf2q@!A`) zeNyProR71EK2|!^yIA#Ie5AyhB(Uu86hE!2pOhFqY;VR+4NYNiXqo3hsjWzk-c}RY z8rjOCFq8F=(w4by%WPMR%SZXjr9DggHBEnJ)|1>RO&)EFnx{-uOkb_FIb=gcY!hFQ zQCrNRyFUI)j)<+_2?~f4x~)Q=NcTL<8AV*(8XWE4leZsYzS!^i@0seY%InSy3|@>; z2^HMI_AppLauncher_Settings_Inactive-01.png B14-90.png visa.png + french_flag.png + us_flag.png diff --git a/HomeScreen/qml/images/Home/us_flag.png b/HomeScreen/qml/images/Home/us_flag.png new file mode 100755 index 0000000000000000000000000000000000000000..a85592ace7453b8e22ee7f9ffe38bc4474c873cd GIT binary patch literal 4042 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 literal 0 HcmV?d00001 diff --git a/HomeScreen/src2/applicationmodel.cpp b/HomeScreen/src2/applicationmodel.cpp index 136161a..ff7276e 100644 --- a/HomeScreen/src2/applicationmodel.cpp +++ b/HomeScreen/src2/applicationmodel.cpp @@ -25,7 +25,8 @@ class ApplicationModel::Private { public: Private(ApplicationModel *parent); - + QList > orders; + QList originalData; private: ApplicationModel *q; public: @@ -51,29 +52,59 @@ ApplicationModel::Private::Private(ApplicationModel *parent) data.append(AppInfo(QStringLiteral("Settings"), QStringLiteral("SETTINGS"), QStringLiteral("settings@0.1"))); data.append(AppInfo(QStringLiteral("POI"), QStringLiteral("POINT OF\nINTEREST"), QStringLiteral("poi@0.1"))); } + originalData = data; + QList o; + o << 5 << 4 << 3 << 7 << 8 << 0 << 2 << 1 << 6; + orders.append(o); + o.clear(); + o << 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 ; + orders.append(o); + o.clear(); + o << 3 << 8 << 1 << 0 << 2 << 7 << 5 << 4 << 6; + orders.append(o); + o.clear(); + o << 2 << 7 << 3 << 8 << 4 << 0 << 1 << 5 << 6; + orders.append(o); + o.clear(); + o << 2 << 7 << 3 << 8 << 4 << 0 << 1 << 5 << 6; + orders.append(o); + o.clear(); + o << 6 << 0 << 2 << 1 << 7 << 3 << 5 << 4 << 8; + orders.append(o); } +void ApplicationModel::changeOrder(const int &hash) +{ + int order = qAbs(hash) % 7; + QList o = d->orders.at(order); + QList newData; + for(int i = 0; i < o.size(); ++i) { + newData.append(d->originalData.at(o.at(i))); + } + d->data = newData; +} + void ApplicationModel::changeLanguage(const QString &lang) { //todo: use QT translator instead of hardcoded strings. if(lang == "fr") { - d->data[0].setName("CLIMATISATION"); - d->data[1].setName("NAVIGATION"); - d->data[2].setName("TÉLÉPHONE"); - d->data[3].setName("RADIO"); - d->data[4].setName("MULTIMÉDIA"); - d->data[5].setName("CONNEXIONS"); - d->data[6].setName("TABLEAU DE\nBORD"); - d->data[7].setName("PARAMÈTRES"); - d->data[8].setName("POINT D'INTÉRÊT"); + d->originalData[0].setName("CLIMATISATION"); + d->originalData[1].setName("NAVIGATION"); + d->originalData[2].setName("TÉLÉPHONE"); + d->originalData[3].setName("RADIO"); + d->originalData[4].setName("MULTIMÉDIA"); + d->originalData[5].setName("CONNEXIONS"); + d->originalData[6].setName("TABLEAU DE\nBORD"); + d->originalData[7].setName("PARAMÈTRES"); + d->originalData[8].setName("POINT D'INTÉRÊT"); } else { - d->data[0].setName("HVAC"); - d->data[1].setName("NAVIGATION"); - d->data[2].setName("PHONE"); - d->data[3].setName("RADIO"); - d->data[4].setName("MULTIMEDIA"); - d->data[5].setName("CONNECTIVITY"); - d->data[6].setName("DASHBOARD"); - d->data[7].setName("SETTINGS"); - d->data[8].setName("POINT OF\nINTEREST"); + d->originalData[0].setName("HVAC"); + d->originalData[1].setName("NAVIGATION"); + d->originalData[2].setName("PHONE"); + d->originalData[3].setName("RADIO"); + d->originalData[4].setName("MULTIMEDIA"); + d->originalData[5].setName("CONNECTIVITY"); + d->originalData[6].setName("DASHBOARD"); + d->originalData[7].setName("SETTINGS"); + d->originalData[8].setName("POINT OF\nINTEREST"); } } diff --git a/HomeScreen/src2/applicationmodel.h b/HomeScreen/src2/applicationmodel.h index 40741bd..1dc4d72 100644 --- a/HomeScreen/src2/applicationmodel.h +++ b/HomeScreen/src2/applicationmodel.h @@ -31,6 +31,7 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; void changeLanguage(const QString &lang); + void changeOrder(const int &hash); private: class Private; Private *d; diff --git a/HomeScreen/src2/usermanagement.cpp b/HomeScreen/src2/usermanagement.cpp index f22ae2f..23550e4 100644 --- a/HomeScreen/src2/usermanagement.cpp +++ b/HomeScreen/src2/usermanagement.cpp @@ -1,5 +1,4 @@ #include "usermanagement.h" -#include #include #include #include @@ -11,6 +10,10 @@ UserManagement::UserManagement(QObject *root) : QObject() statusArea = root->findChild("StatusArea"); this->appModel = home->findChild("ApplicationModel"); sequence = 0; + isRed = false; + connect(&timerRed, SIGNAL(timeout()), this, SLOT(slot_turnOffRed())); + timerRed.setSingleShot(true); + timerRed.setInterval(3000); #ifdef REAL_SERVER connectWebsockets(); #else @@ -23,8 +26,11 @@ UserManagement::UserManagement(QObject *root) : QObject() } void UserManagement::setUser(const User &user) { + int hash = qHash(user.name + user.first_name); + timerRed.stop(); appModel->changeLanguage(user.graphPreferredLanguage); - QMetaObject::invokeMethod(logo, "setImage", Q_ARG(QVariant, "./images/Utility_Logo_Colour-01.png")); + appModel->changeOrder(hash); + slot_turnOffRed(); QMetaObject::invokeMethod(home, "languageChanged"); QMetaObject::invokeMethod(shortcutArea, "languageChanged", Q_ARG(QVariant, user.graphPreferredLanguage)); QMetaObject::invokeMethod(statusArea, "languageChanged", Q_ARG(QVariant, user.graphPreferredLanguage)); @@ -35,7 +41,16 @@ void UserManagement::setUser(const User &user) QMetaObject::invokeMethod(home, "showVisa", Q_ARG(QVariant, true), Q_ARG(QVariant, user.ccNumberMasked)); const QString welcome = QString("%1").arg(user.graphPreferredLanguage == "fr" ? "Bonjour " : "Hello") + " "; QMetaObject::invokeMethod(home, "showHello", Q_ARG(QVariant, welcome + user.first_name)); + QMetaObject::invokeMethod(home, "changeFlag", Q_ARG(QVariant, user.graphPreferredLanguage == "fr" ? "./images/french_flag.png" : "./images/us_flag.png")); +} +void UserManagement::slot_turnOffRed() +{ + if(!isRed) + return; + QMetaObject::invokeMethod(logo, "setImage", Q_ARG(QVariant, "./images/Utility_Logo_Colour-01.png")); + isRed = false; } + void UserManagement::connectWebsockets() { #ifdef REAL_SERVER @@ -82,7 +97,10 @@ void UserManagement::onTextMessageReceived(QString message) } QVariantMap map = list.at(2).toMap(); if(list.first().toInt() == 5) { - QMetaObject::invokeMethod(logo, "setImage", Q_ARG(QVariant, "./images/Utility_Logo_Red-01.png")); + if(!isRed) + QMetaObject::invokeMethod(logo, "setImage", Q_ARG(QVariant, "./images/Utility_Logo_Red-01.png")); + isRed = true; + timerRed.start(); map = map["data"].toMap(); if(map["eventName"].toString() == "login") { //qWarning()<<"login received in client"; diff --git a/HomeScreen/src2/usermanagement.h b/HomeScreen/src2/usermanagement.h index c0bc401..085549d 100644 --- a/HomeScreen/src2/usermanagement.h +++ b/HomeScreen/src2/usermanagement.h @@ -11,12 +11,6 @@ #ifndef REAL_SERVER #include #endif -//{"postal_address":"201 Mission Street","loc":"37.7914374,-122.3950694","country":"USA","mail":"bjensen@example.com", -//"city":"San Francisco","graphEmail":"bjensen@example.com","graphPreferredLanguage":"en","ccNumberMasked":"************1212", -//"ccExpYear":"19","description":"Original description","ccExpMonth":"01","groups":[],"last_name":"Jensen" -//"ccNumber":"123-1111-2222-3333-1212","house_identifier":"ForgeRock","phone":"+1 408 555 1862","name":"bjensen" -//"state":"CA","fax":"+1 408 555 1862","common_name":"Barbara Jensen","postal_code":"94105","first_name":"Barbara","keytoken":"EB:7C:23:C6:21:BF"} -//"graphActions":"Install App,Update Software,Exceed 100 Kph,Open Trunk,View Online" struct User { QString postal_address; QPointF loc; @@ -67,6 +61,7 @@ public slots: void serverSocketDisconnected(); void slot_timerTest(); #endif + void slot_turnOffRed(); private: QObject *home; QObject *shortcutArea; @@ -75,6 +70,8 @@ private: QByteArray data; ApplicationModel *appModel; QWebSocket webSocket; + QTimer timerRed; + bool isRed; int sequence; bool jsonToMap(const QByteArray &buf, QVariantMap *map) const; bool mapToJson(const QVariantMap &map, QByteArray *json) const; -- 2.16.6