import QtQuick 2.12 import QtQuick.Controls 2.12 import qt.koriolan.shipheart 1.0 Shipheart_page { id: page_parametres readonly property int periode_init_raffraichissement_parametres: 1 // En ms readonly property int periode_raffraichissement_parametres: 1000 // En ms property var table_backlight: [0, 13.75, 26.30, 37.85, 48.54, 58.50, 67.81, 76.55, 84.80, 92.60, 100.00] // Les valeurs correspondent à 0, 10%, 20%,... 90%, 100% // Modèles : property Bdd bdd : Bdd{} //=========================================================== // Timer periode raffraichissement parametres : //=========================================================== Timer { id: timer_raffraichissement_parametres interval: periode_init_raffraichissement_parametres triggeredOnStart: false running: true repeat: true onTriggered: { if (interval == periode_init_raffraichissement_parametres) { // Premier passage, 1ms après le premier chargement interval = periode_raffraichissement_parametres; init_page(); } } } // Titre de la page : Shipheart_titre_1 {titre:"Paramètres"; hauteur: shipheart_hauteur_bandeau_haut} //------------------------------------------------------- // Ecran bas - Droite : //------------------------------------------------------- Rectangle { id: zone_affichage_slider_backlight anchors.fill: parent color: "white" Slider { id: slider_backlight y: shipheart_hauteur_titre_2 width: parent.width * 0.7 height: 100 padding: 0 anchors { horizontalCenter: parent.horizontalCenter } from: 20 value: 25 to: 100 stepSize:1 // Permet de n'avoir que des valeurs en %, sans décimales (il est probable que cela accélère le traitement mais pas vérifié...) background: Rectangle { x: parent.leftPadding y: 0 width: parent.width height: parent.height radius: shipheart_rayon_bouton color: shipheart_couleur_fond_bouton Rectangle { width: slider_backlight.visualPosition * parent.width height: parent.height color: shipheart_couleur_texte_slider radius: shipheart_rayon_bouton Behavior on width { NumberAnimation { properties:"width" duration: 350 easing.type: Easing.OutQuad } } Text { // Affichage de la valeur dans la barre text: slider_backlight.value.toFixed(0) + "%" anchors.fill: parent // Permet que le texte occupe tout l'espace du parent (et que le centrage vertical qui suit fonctionne...) verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter font.pixelSize: 18 font.weight: Font.Bold color: couleur_blanc_casse } } } handle: Rectangle { x: parent.leftPadding + (parent.visualPosition * (parent.availableWidth - width)) y: (parent.availableHeight / 2) - (height / 2) implicitWidth: 80 // Le bouton n'étant pas visible implicitHeight: parent.height color: "transparent" visible: false } onMoved: { shipheart_clic(); if (!timer_time_out_backlight.running) { timer_time_out_backlight.running = true var req req = 'UPDATE TB_Configuration SET Valeur="' + consigne_backlight(slider_backlight.value).toFixed(2) + '" WHERE Nom="Consigne_backlight" ' bdd.requete_unique(req); synchro_bdd(shipheart_type_synchro_data); //console.log("ON MOVED : Nouvelle valeur de backlight = " + value + " et la requête est : " + req) } } Timer { // Timer qui permet de brider les envoi de mise à jour dans la BDD id: timer_time_out_backlight interval: 200 triggeredOnStart: false running: false repeat: false onTriggered: { // Permet d'être sûr que la dernière position est bien enregistrée dans la BDD, même si l'arrêt s'est produit pendant que le timer tournait var req req = 'UPDATE TB_Configuration SET Valeur="' + consigne_backlight(slider_backlight.value).toFixed(2) + '" WHERE Nom="Consigne_backlight" ' bdd.requete_unique(req); req = 'UPDATE TB_Configuration SET Valeur="' + consigne_backlight(slider_backlight.value).toFixed(2) + '" WHERE Nom="Consigne_leds" ' bdd.requete_unique(req); synchro_bdd(shipheart_type_synchro_data); //console.log("TIMER : Nouvelle valeur de backlight = " + slider_backlight.value + " et la requête est : " + req) } } } } //------------------------------------------------------- // Bandeau bas : //------------------------------------------------------- Row { x: 0 y: shipheart_hauteur_page - shipheart_hauteur_bandeau_bas; width: shipheart_largeur_page; height: shipheart_hauteur_bandeau_bas; spacing: 5 padding: 5 //................................................. // Bouton retour //................................................. Rectangle { id: bandeau_bas_zone_retour width: shipheart_largeur_page / nombre_colonnes_matrice_test height: shipheart_hauteur_bandeau_bas - parent.topPadding - parent.bottomPadding; radius: shipheart_rayon_bouton color: "transparent" Image { source: "/images/icone_retour.png" sourceSize.height: 30 anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter } } MouseArea { // Zone d'interaction. On est obligé de la mettre dans la grille pour que Rectangle et MouseArea soient frères ou parent/enfant ET qu'on n'occupe qu'un espace dans la grille. id: mouse_area_bandeau_bas_zone_retour anchors.fill: parent pressAndHoldInterval: shipheart_mouse_press_and_hold_interval_court onClicked: { stackView.pop() } } } } //============================================================================================================= // Init de la page //============================================================================================================= function init_page() { mise_a_jour_table_backlight(); } //============================================================================================================= // Mise à jour de la table de correspondace du backlight //============================================================================================================= function mise_a_jour_table_backlight() { var req, res; var i; var nb; var val; // Récupération de la valeur actuelle du backlight : var consigne; var rang; res = bdd.requete_unique('SELECT Valeur FROM TB_Configuration WHERE Nom="Consigne_backlight" '); consigne = Number(res[0]); if (consigne < 0) rang = -1; else if (consigne < table_backlight[1]) rang = 0; else if (consigne < table_backlight[2]) rang = 1; else if (consigne < table_backlight[3]) rang = 2; else if (consigne < table_backlight[4]) rang = 3; else if (consigne < table_backlight[5]) rang = 4; else if (consigne < table_backlight[6]) rang = 5; else if (consigne < table_backlight[7]) rang = 6; else if (consigne < table_backlight[8]) rang = 7; else if (consigne < table_backlight[9]) rang = 8; else if (consigne < table_backlight[10]) rang = 9; else if (consigne < table_backlight[11]) rang = 10; else rang = 11; if (rang < 0) slider_backlight.value = 0; else if (rang > 10) slider_backlight.value = 100; else slider_backlight.value = (10 * (rang + 1)) - (10 * (table_backlight[rang + 1] - consigne) / (table_backlight[rang + 1] - table_backlight[rang])); } //============================================================================================================= // Calcul de la consigne du backlight en fonction de la position du slider //============================================================================================================= function consigne_backlight(pc) { var i; var a, b; var val; if (pc <= 0) return (0); if (pc >= 100) return (100); i = Math.trunc(pc / 10); //console.log("Conversion Backlight : PC=" + Number(pc) + " i=" + Number(i) + " et valeur de retour =" + (((table_backlight[i+1] - table_backlight[i]) * (pc % 10) / 10) + table_backlight[i])); return ((table_backlight[i+1] - table_backlight[i]) * (pc % 10) / 10) + table_backlight[i]; } }