Files
shipheart-qt/shipheart_test_backlight.qml

258 lines
10 KiB
QML

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];
}
}