various changes in user language settings
authorPhilippe Lelong <lelong.ph@meltemus.com>
Mon, 19 Dec 2016 15:00:20 +0000 (16:00 +0100)
committerPhilippe Lelong <lelong.ph@meltemus.com>
Mon, 19 Dec 2016 15:00:20 +0000 (16:00 +0100)
Signed-off-by: Philippe Lelong <lelong.ph@meltemus.com>
HomeScreen/qml/Home.qml
HomeScreen/qml/ShortcutArea.qml
HomeScreen/qml/images/Home/french_flag.png [new file with mode: 0755]
HomeScreen/qml/images/Home/home.qrc
HomeScreen/qml/images/Home/us_flag.png [new file with mode: 0755]
HomeScreen/src2/applicationmodel.cpp
HomeScreen/src2/applicationmodel.h
HomeScreen/src2/usermanagement.cpp
HomeScreen/src2/usermanagement.h

index d8315cc..7d6fb74 100644 (file)
@@ -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
@@ -122,6 +138,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 {
@@ -135,6 +152,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)
index 853ca45..4be6d9f 100644 (file)
@@ -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')
         }
     }
     property int currentIndex: -1 // TODO: to be moved to whereever right
diff --git a/HomeScreen/qml/images/Home/french_flag.png b/HomeScreen/qml/images/Home/french_flag.png
new file mode 100755 (executable)
index 0000000..948f828
Binary files /dev/null and b/HomeScreen/qml/images/Home/french_flag.png differ
index 14e2828..8bef69d 100644 (file)
@@ -21,5 +21,7 @@
         <file>HMI_AppLauncher_Settings_Inactive-01.png</file>
         <file>B14-90.png</file>
         <file>visa.png</file>
+        <file>french_flag.png</file>
+        <file>us_flag.png</file>
     </qresource>
 </RCC>
diff --git a/HomeScreen/qml/images/Home/us_flag.png b/HomeScreen/qml/images/Home/us_flag.png
new file mode 100755 (executable)
index 0000000..a85592a
Binary files /dev/null and b/HomeScreen/qml/images/Home/us_flag.png differ
index 136161a..ff7276e 100644 (file)
@@ -25,7 +25,8 @@ class ApplicationModel::Private
 {
 public:
     Private(ApplicationModel *parent);
-
+    QList<QList<int> > orders;
+    QList<AppInfo> 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<int> 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<int> o = d->orders.at(order);
+    QList<AppInfo> 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");
     }
 }
 
index 40741bd..1dc4d72 100644 (file)
@@ -31,6 +31,7 @@ public:
     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
     QHash<int, QByteArray> roleNames() const override;
     void changeLanguage(const QString &lang);
+    void changeOrder(const int &hash);
 private:
     class Private;
     Private *d;
index f22ae2f..23550e4 100644 (file)
@@ -1,5 +1,4 @@
 #include "usermanagement.h"
-#include <QApplication>
 #include <QDebug>
 #include <QtCore/QJsonDocument>
 #include <QByteArray>
@@ -11,6 +10,10 @@ UserManagement::UserManagement(QObject *root) : QObject()
     statusArea = root->findChild<QObject *>("StatusArea");
     this->appModel = home->findChild<ApplicationModel *>("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";
index c0bc401..085549d 100644 (file)
 #ifndef REAL_SERVER
 #include <QtWebSockets/QWebSocketServer>
 #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;