Files
shipheart-qt/config_capteur_calcule_booleen_condition.qml

875 lines
42 KiB
QML

//========================================================================================================================================================================
// CONFIG_CIRCUIT_CONDITION_COMMANDE_AUTO.QML
// Ce fichier traite la configuration d'une condition d'une commande Auto d'un circuit. La page permet notamment de :
// - Modifier la config de cette condition (ou de la créer la première fois),
// La page est appelée depuis la page config_circuit_commande_auto
//========================================================================================================================================================================
import QtQuick 2.12
import QtQml.Models
import qt.koriolan.shipheart 1.0
import"fonctions.js" as Fonctions
Shipheart_page {
id: page_config_capteur_calcule_booleen_condition
// Mis en forme :
readonly property double pourcentage_largeur_colonne_gauche: 0.75
readonly property double espace_colonnes_principales: 20
readonly property double pourcentage_hauteur_ligne_haut: 1
readonly property double espace_lignes_principales: 20
readonly property double affichage_hauteur_utile: shipheart_hauteur_page - shipheart_hauteur_bandeau_haut - shipheart_hauteur_bandeau_bas
readonly property int hauteur_ligne_formulaire: 60
readonly property double pourcentage_largeur_labels_formulaire: 0.4
readonly property double pourcentage_largeur_unites_formulaire: 0.1
readonly property int hauteur_bouton_droit: 80
readonly property double pourcentage_bandeau_bas_largeur_zone_retour: 1
readonly property int periode_init_raffraichissement_parametres: 1 // En ms
readonly property int periode_raffraichissement_parametres: 1000 // En ms
// Données :
property bool flag_init: true // Permet de bloquer certains affichage tant que l'init n'est pas terminée
property string nom_capteur: ""
property bool flag_new;
property int type_source: 0
property int id_source: 0
property int id_variable: 0
property int test: 0
property double seuil: 0
property string seuil_unite: ""
property bool flag_test_binaire: false // Indique si l'évènement porte sur une condition binaire ou non (exemple: Capteur>Entrée AUX)
// Modèles :
// Note : les modèles chargés dans 'main.qml' n'ont pas à être rechargés dans les pages suivantes
//-------------------------------------------------
// Signaux :
//-------------------------------------------------
signal enregistrer_config_capteur_calcule_booleen_condition(bool flag_new, int type_source, int id_source, int id_variable, int test, double seuil) // Valeurs à lire lorsque le "OnEnregistrer' est activé
//===========================================================
// 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();
}
else {
}
}
}
// Titre de la page :
Shipheart_titre_1 {titre: qsTr("Création d'une condition du capteur [%1]").arg(nom_capteur); hauteur: shipheart_hauteur_bandeau_haut}
//-------------------------------------------------------
// Ecran Haut - Gauche :
//-------------------------------------------------------
Rectangle {
id: zone_affichage_haut_gauche
x: 0
y: shipheart_hauteur_bandeau_haut;
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2);
color: "transparent"
ListView {
id: grille_principale
width: parent.width
height: parent.height
snapMode: GridView.SnapToRow // L'arret de l'affichage se fera sur une rangée entière
clip: true // Nécessaire pour que les Delegates s'arretent à l'intérieur de la GridView
model: modele_grille_principale
footer: Rectangle { // Permet de dégager la place suffisante en fin de GridView pour accéder même au dernier élément lorsque que clavier est déplié
height: shipheart_hauteur_clavier
color: "transparent"
}
ObjectModel {
id: modele_grille_principale
//-------------------------------------------------------------------------------
// Ligne de formulaire : Type_source
Rectangle {
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0 // Permet que la ligne n'occupe aucune place quand elle n'est pas visible
color: "transparent"
visible: (!flag_init)
Shipheart_formulaire_label {
text: qsTr("Type")
width: parent.width * pourcentage_largeur_labels_formulaire
couleur: (champ_formulaire_Type_source.currentIndex !== 0)
? shipheart_formulaire_couleur_texte_par_defaut
: shipheart_formulaire_couleur_texte_en_erreur
}
Shipheart_formulaire_combobox {
id: champ_formulaire_Type_source
model: ListModel { }
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onActivated: {
shipheart_clic();
if (type_source !== champ_formulaire_Type_source.model.get(champ_formulaire_Type_source.currentIndex).valeur)
{
type_source = champ_formulaire_Type_source.model.get(champ_formulaire_Type_source.currentIndex).valeur;
id_source = 0;
id_variable = 0;
test = 0;
mise_a_jour_source();
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Source
Rectangle {
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0 // Permet que la ligne n'occupe aucune place quand elle n'est pas visible
color: "transparent"
visible: (!flag_init)
&& (type_source > 0)
Shipheart_formulaire_label {
text: qsTr("Source")
width: parent.width * pourcentage_largeur_labels_formulaire
couleur: (champ_formulaire_Source.currentIndex !== 0)
? shipheart_formulaire_couleur_texte_par_defaut
: shipheart_formulaire_couleur_texte_en_erreur
}
Shipheart_formulaire_combobox {
id: champ_formulaire_Source
model: ListModel { }
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onActivated: {
shipheart_clic();
if (id_source !== champ_formulaire_Source.model.get(champ_formulaire_Source.currentIndex).valeur)
{
id_source = champ_formulaire_Source.model.get(champ_formulaire_Source.currentIndex).valeur;
id_variable = 0;
test = 0;
mise_a_jour_variable();
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Variable
Rectangle {
width: parent.width
height: visible ? hauteur_ligne_formulaire : 0 // Permet que la ligne n'occupe aucune place quand elle n'est pas visible
color: "transparent"
visible: (!flag_init)
&& (type_source > 0)
&& (id_source > 0)
&& (champ_formulaire_Variable.model.count > 2) // Comme on a toujours "Non défini", si Count<=2, c'est qu'on n'a qu'un seul choix qu'il n'est pas nécessaire d'afficher...
Shipheart_formulaire_label {
text: qsTr("Variable")
width: parent.width * pourcentage_largeur_labels_formulaire
couleur: (champ_formulaire_Variable.currentIndex !== 0)
? shipheart_formulaire_couleur_texte_par_defaut
: shipheart_formulaire_couleur_texte_en_erreur
}
Shipheart_formulaire_combobox {
id: champ_formulaire_Variable
model: ListModel { }
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onActivated: {
shipheart_clic();
if (id_variable !== champ_formulaire_Variable.model.get(champ_formulaire_Variable.currentIndex).valeur)
{
id_variable = champ_formulaire_Variable.model.get(champ_formulaire_Variable.currentIndex).valeur;
seuil_unite = champ_formulaire_Variable.model.get(champ_formulaire_Variable.currentIndex).unite;
mise_a_jour_test();
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Test
Rectangle {
width: parent.width
height: visible ? hauteur_ligne_formulaire : 0 // Permet que la ligne n'occupe aucune place quand elle n'est pas visible
color: "transparent"
visible: (!flag_init)
&& (type_source > 0)
&& (id_source > 0)
&& (id_variable > 0)
Shipheart_formulaire_label {
text: qsTr("Test")
width: parent.width * pourcentage_largeur_labels_formulaire
couleur: (champ_formulaire_Test.currentIndex !== 0)
? shipheart_formulaire_couleur_texte_par_defaut
: shipheart_formulaire_couleur_texte_en_erreur
}
Shipheart_formulaire_combobox {
id: champ_formulaire_Test
model: ListModel { }
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onActivated: {
shipheart_clic();
test = champ_formulaire_Test.model.get(champ_formulaire_Test.currentIndex).valeur;
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Seuil
Rectangle {
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0 // Permet que la ligne n'occupe aucune place quand elle n'est pas visible
color: "transparent"
visible: (!flag_init)
&& (type_source > 0)
&& (id_source > 0)
&& (id_variable > 0)
&& (!flag_test_binaire) // Si on est sur un test binaire, il est inutile d'afficher le seuil...
Shipheart_formulaire_label {
text: qsTr("Seuil")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_textfield {
id: champ_formulaire_Seuil
width: parent.width * (1 - pourcentage_largeur_labels_formulaire - pourcentage_largeur_unites_formulaire)
x: parent.width * pourcentage_largeur_labels_formulaire
flag_num_only: true
}
Shipheart_formulaire_unite { // Unités :
text: seuil_unite
width: parent.width * pourcentage_largeur_unites_formulaire
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
} // Fin de modele grille principale (ObjectModel )
}
}
//-------------------------------------------------------
// Ecran Droite :
//-------------------------------------------------------
Rectangle {
id: zone_affichage_droite
x: zone_affichage_haut_gauche.width + espace_colonnes_principales
y: shipheart_hauteur_bandeau_haut;
width: (shipheart_largeur_page * (1 - pourcentage_largeur_colonne_gauche)) - (espace_colonnes_principales / 2)
height: (affichage_hauteur_utile * pourcentage_hauteur_ligne_haut) - (espace_lignes_principales / 2);
color: "transparent"
Column {
anchors.fill: parent
spacing: 10
//.......................................................
// Bouton Enregistrer/créer :
//.......................................................
Rectangle {
width: parent.width
height: hauteur_bouton_droit
color: shipheart_couleur_fond_bouton
radius: shipheart_rayon_bouton
visible:
// (!clavier.active) && // SDIR #255
(type_source > 0) &&
(id_source > 0) &&
(id_variable > 0) &&
(test > 0)
Text {
anchors {
verticalCenter: parent.verticalCenter
horizontalCenter: parent.horizontalCenter
}
font.pixelSize: 20
text: flag_new ? qsTr("Créer la condition") : qsTr("Enregistrer")
color: couleur_blanc_casse
}
MouseArea {
anchors.fill: parent
onClicked: {
shipheart_clic();
seuil = champ_formulaire_Seuil.text;
// Renvoi des nouvelles valeurs vers la page d'appel (qu'on soit en Création ou Modification) :
page_config_capteur_calcule_booleen_condition.enregistrer_config_capteur_calcule_booleen_condition(flag_new, type_source, id_source, id_variable, test, seuil);
// Fermeture de la page dès que les données ont été remontées :
stackView.pop();
}
}
}
//-------------------------------------------------------
// Timer de reconfiguration :
//-------------------------------------------------------
Timer {
id: timer_tempo_reconfiguration
interval: 250 // Cette tempo n'est utilisée que pour le premier cycle
triggeredOnStart: false
running: false
repeat: true
onTriggered: {
if (bdd.check_fin_configuration())
{
timer_tempo_reconfiguration.stop();
stackView.pop();
}
else timer_tempo_reconfiguration.interval = 100 // Tempo plus courte pour les lectures suivantes")
}
}
}
}
//-------------------------------------------------------
// 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: (parent.width * pourcentage_bandeau_bas_largeur_zone_retour) - (2 * parent.padding)
height: shipheart_hauteur_bandeau_bas - parent.topPadding - parent.bottomPadding;
radius: shipheart_rayon_bouton
color: shipheart_couleur_fond_bouton
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
onClicked: {
shipheart_clic();
stackView.pop()
}
}
}
}
//===========================================================
// Busy Indicator :
//===========================================================
Shipheart_busy_indicator {
id: busy_indicator
running: timer_tempo_reconfiguration.running
}
// Note : il est inutile de prévoir un Mousearea pour sortir de l'économiseur sur cette page puisqu'il
// est systématiquement bloqué pour toutes les pages lancées depuis 'Paramètres Avancés'.
//=============================================================================================================
// Init de la page
//=============================================================================================================
function init_page()
{
var i;
// Détection d'une création vs une modification :
if ((type_source > 0) && (id_source> 0) && (id_variable> 0)) flag_new = false;
else flag_new = true;
// Mise à jour des champs texte :
champ_formulaire_Seuil.text = seuil;
// Mise à jour du modèle de Type de source :
champ_formulaire_Type_source.model.clear();
champ_formulaire_Type_source.model.append( {
"valeur": 0,
"texte": qsTr("Non défini") });
champ_formulaire_Type_source.model.append( {
"valeur": shipheart_source_mesure_circuit,
"texte": qsTr("Circuit") });
champ_formulaire_Type_source.model.append( {
"valeur": shipheart_source_mesure_capteur,
"texte": qsTr("Capteur") });
champ_formulaire_Type_source.model.append( {
"valeur": shipheart_source_mesure_reservoir,
"texte": qsTr("Réservoir") });
champ_formulaire_Type_source.model.append( {
"valeur": shipheart_source_mesure_batterie,
"texte": qsTr("Batterie") });
// Type source : positionnement de l'index sur la valeur en cours :
i = recherche_index_valeur_modele(type_source, champ_formulaire_Type_source.model, "Type_source");
if (i === -1) champ_formulaire_Type_source.currentIndex = recherche_index_valeur_modele(-1, champ_formulaire_Type_source.model, "Type_source");
else champ_formulaire_Type_source.currentIndex = i;
// Mise à jour en cascade :
if (type_source > 0) mise_a_jour_source();
flag_init = false; // Indique que l'init est terminée
}
//=============================================================================================================
// Mise à jour du modèle de source
//=============================================================================================================
function mise_a_jour_source()
{
var req, res;
var nb;
var i;
var flag_familles;
champ_formulaire_Source.model.clear();
champ_formulaire_Source.model.append({"valeur": 0, "texte": qsTr("Non défini") , "groupe": false });
// Choix de le requete en fonction du type :
switch(type_source)
{
case shipheart_source_mesure_circuit:
req = 'SELECT Cle_primaire, Nom, Nom_famille, Priorite_affichage_accueil FROM TB_Circuits, '
req += ' (SELECT Cle_primaire AS Cle_famille, Nom AS Nom_famille, Priorite_affichage AS Priorite_famille FROM TB_Familles WHERE Type_source=' + shipheart_type_source_circuits + ') AS TB_Familles '
req += ' WHERE ID_Famille=Cle_famille '
req += ' ORDER BY Priorite_famille, ABS(Priorite_affichage_accueil) ';
flag_familles = true;
break;
case shipheart_source_mesure_capteur:
req = 'SELECT Cle_primaire, Nom, Nom_famille, Priorite_affichage_accueil, Type_entrees FROM TB_Capteurs, '
req += ' (SELECT Cle_primaire AS Cle_famille, Nom AS Nom_famille, Priorite_affichage AS Priorite_famille FROM TB_Familles WHERE Type_source=' + shipheart_type_source_capteurs + ') AS TB_Familles ';
req += ' WHERE ID_Famille=Cle_famille ';
req += ' ORDER BY Priorite_famille, ABS(Priorite_affichage_accueil) ';
flag_familles = true;
break;
case shipheart_source_mesure_reservoir:
req = 'SELECT Cle_primaire, Nom, Nom_famille, Priorite_affichage_accueil FROM TB_Reservoirs, '
req += ' (SELECT Cle_primaire AS Cle_famille, Nom AS Nom_famille, Priorite_affichage AS Priorite_famille FROM TB_Familles WHERE Type_source=' + shipheart_type_source_reservoirs + ') AS TB_Familles '
req += ' WHERE ID_Famille=Cle_famille '
req += ' ORDER BY Priorite_famille, ABS(Priorite_affichage_accueil) ';
flag_familles = true;
break;
case shipheart_source_mesure_batterie:
req = 'SELECT Cle_primaire, Nom FROM TB_Batteries '
req += 'WHERE 1 '
req += 'ORDER BY Priorite_affichage_accueil, Nom';
flag_familles = false;
break;
}
//console.log("req = [ " + req + "; ]");
nb = bdd.requete(req);
var prec_famille = "";
var flag_aine_famille;
var flag_capteur_calcule;
for (i = 0; i < nb; i ++)
{
res = bdd.lecture_ligne();
if (!res.isEmpty)
{
// Ajout d'une ligne par famille (si le type l'autorise) :
if (flag_familles)
{
if (prec_famille !== res[2])
{
champ_formulaire_Source.model.append({"valeur": Number(res[0]), "texte": res[2], "groupe": true, "actif": true, "capteur_calcule": false });
prec_famille = res[2];
}
}
// Détection d'un capteur calculé :
flag_capteur_calcule = false;
if (type_source === shipheart_source_mesure_capteur)
{
if (Number(res[4]) >= shipheart_capteur_type_entrees_calculee_booleen) flag_capteur_calcule = true;
}
// Ajout de la ligne "normale" dans le modèle :
champ_formulaire_Source.model.append({"valeur": Number(res[0]), "texte": res[1], "groupe": false, "actif": true, "capteur_calcule": flag_capteur_calcule });
}
else break; // Ne devrait pas arriver....
}
//-------------------------------------------------------------------------------
// Dévalidation des entrées du modèle qui créeraient des références circulaires :
if (type_source === shipheart_source_mesure_capteur) // Cas d'une condition sur capteur uniquement
{
// Parcours de tout le modèle :
for (i = 0; i < champ_formulaire_Source.model.count; i ++)
{
if (champ_formulaire_Source.model.get(i).capteur_calcule) // On ne traite que les capteurs calculés (les autres ne présentent pas de risque de réf circulaires)
{
var cle_capteur = champ_formulaire_Source.model.get(i).valeur;
// Dévalidation de tous les capteurs calculés dans le doute :
champ_formulaire_Source.model.set(i, {"actif": false });
/*
// Dévalidation du capteur auquel appartient la condition :
if (cle_capteur === id_capteur) champ_formulaire_Source.model.set(i, {"actif": false });
else
{
// A TRAITER !!!!!
}
*/
}
}
}
//------------------------------------------------------------------------------------------------------------------------
// Source : positionnement de l'index sur la valeur en cours :
i = recherche_index_valeur_modele(id_source, champ_formulaire_Source.model, "Source");
if (i === -1) champ_formulaire_Source.currentIndex = recherche_index_valeur_modele(0, champ_formulaire_Source.model, "Source");
else champ_formulaire_Source.currentIndex = i;
//------------------------------------------------------------------------------------------------------------------------
// Mise à jour en cascade :
if (id_source > 0) mise_a_jour_variable();
}
//=============================================================================================================
// Mise à jour du modèle de variable
//=============================================================================================================
function mise_a_jour_variable()
{
var req, res;
var nb;
var i;
var libelle;
// Effacement du modèle et premier enregistrement avec 'Non défini' ::
champ_formulaire_Variable.model.clear();
champ_formulaire_Variable.model.append( {
"valeur": 0,
"texte": qsTr("Non défini"),
"unite": "",
"actif": true });
switch(type_source)
{
//----------------------------------------
case shipheart_source_mesure_circuit:
// Recherche du type de circuit :
req = 'SELECT Type FROM TB_Modules_config WHERE Adresse_k_bus IN (SELECT Adresse_module FROM TB_Circuits WHERE Cle_primaire=' + id_source + ')';
//console.log("Requête = [ " + req + "; ]");
res = bdd.requete_unique(req);
var type_circuit = Number(res[0]);
// Recherche des entrées de TB_Variables applicables à la source sélectionnée :
req = "SELECT Cle_primaire, Unite, Code FROM TB_Variables WHERE Type=" + type_source + "; ";
//console.log("Requête = [ " + req + "; ]");
nb = bdd.requete(req);
for (i = 0; i < nb; i ++)
{
res = bdd.lecture_ligne();
if (!res.isEmpty)
{
switch(res[2])
{
//---------------------
case "Circ_tension":
if (type_circuit === shipheart_type_module_shippower4AC) continue;
break;
//---------------------
case "Circ_frequence":
if (type_circuit !== shipheart_type_module_shippower4AC) continue;
break;
//---------------------
case "Circ_tension_secteur":
if (type_circuit !== shipheart_type_module_shippower4AC) continue;
break;
}
libelle = Fonctions.nom_variable(res[2]);
champ_formulaire_Variable.model.append( {
"valeur": Number(res[0]),
"texte": libelle,
"unite": res[1],
"actif": true });
}
}
// Mise à jour du flag de test binaire :
flag_test_binaire = false;
break;
//----------------------------------------
case shipheart_source_mesure_capteur:
// Recherche de la variable du capteur :
req = "SELECT ID_Variable, Type_entrees FROM TB_Capteurs WHERE Cle_primaire=" + id_source + "; ";
//console.log("Requête = [ " + req + "; ]");
res = bdd.requete_unique(req);
var type = Number(res[1]);
if (type < shipheart_capteur_type_entrees_calculee_booleen) // Si le capteur est calculé, on ne peut pas chercher (et trouver d'ID_Variable)
{
// Recherche des informations de la variable du capteur dans TB_Variables :
req = "SELECT Cle_primaire, Nom, Unite FROM TB_Variables WHERE Cle_primaire=" + Number(res[0]) + "; ";
//console.log("Requête = [ " + req + "; ]");
res = bdd.requete_unique(req);
champ_formulaire_Variable.model.append( {
"valeur": Number(res[0]),
"texte": res[1],
"unite": res[2],
"actif": true });
// Mise à jour de la variable car on n'a pas le choix :
id_variable = Number(res[0]);
}
// Mise à jour du flag de test binaire :
if ((type == shipheart_capteur_type_entrees_aux) ||
(type == shipheart_capteur_type_entrees_calculee_booleen) ) flag_test_binaire = true;
else flag_test_binaire = false;
break;
//----------------------------------------
case shipheart_source_mesure_reservoir:
// Recherche des entrées de TB_Variables applicables à la source sélectionnée :
req = "SELECT Cle_primaire, Nom, Unite FROM TB_Variables WHERE Code='Res_niveau'; ";
//console.log("Requête = [ " + req + "; ]");
res = bdd.requete_unique(req);
champ_formulaire_Variable.model.append( {
"valeur": Number(res[0]),
"texte": res[1],
"unite": res[2],
"actif": true });
// Mise à jour de la variable car on n'a pas le choix :
id_variable = Number(res[0]);
// Mise à jour du flag de test binaire :
flag_test_binaire = false;
break;
//----------------------------------------
case shipheart_source_mesure_batterie:
// Recherche du type de capteur de batterie :
req = "SELECT Type_entrees FROM TB_Batteries WHERE Cle_primaire=" + id_source + "; ";
//console.log("Requête = [ " + req + "; ]");
res = bdd.requete_unique(req);
var type_entrees = Number(res[0]);
// Recherche des entrées de TB_Variables applicables à la source sélectionnée :
req = "SELECT Cle_primaire, Unite, Code FROM TB_Variables WHERE Type=" + type_source + "; ";
//console.log("Requête = [ " + req + "; ]");
nb = bdd.requete(req);
for (i = 0; i < nb; i ++)
{
res = bdd.lecture_ligne();
if (!res.isEmpty)
{
switch(res[2])
{
//---------------------
case "Batt_temperature":
if (type_entrees !== shipheart_capteur_type_entrees_ibs) continue;
break;
//---------------------
case "Batt_courant_differentiel":
if (type_entrees !== shipheart_capteur_type_entrees_ibs) continue;
break;
//---------------------
case "Batt_courant_charge":
if (type_entrees !== shipheart_capteur_type_entrees_ibs) continue;
break;
//---------------------
case "Batt_soh":
if (type_entrees !== shipheart_capteur_type_entrees_ibs) continue;
break;
//---------------------
/* case "Batt_autonomie":
if (type_entrees !== shipheart_capteur_type_entrees_ibs) continue;
break;
*/
}
libelle = Fonctions.nom_variable(res[2]);
champ_formulaire_Variable.model.append( {
"valeur": Number(res[0]),
"texte": libelle,
"unite": res[1],
"actif": true });
}
}
// Mise à jour du flag de test binaire :
flag_test_binaire = false;
break;
//----------------------------------------
default:
break;
}
// Mise à jour de l'index courant du modèle :
i = recherche_index_valeur_modele(id_variable, champ_formulaire_Variable.model, "id_variable");
if (i === -1) champ_formulaire_Variable.currentIndex = recherche_index_valeur_modele(0, champ_formulaire_Variable.model, "id_variable");
else champ_formulaire_Variable.currentIndex = i;
// Mise à jour de l'unité correspondant à la variable en cours :
seuil_unite = champ_formulaire_Variable.model.get(champ_formulaire_Variable.currentIndex).unite;
// Mise à jour en cascade :
if (id_variable > 0) mise_a_jour_test();
}
//=============================================================================================================
// Mise à jour du modèle
//=============================================================================================================
function mise_a_jour_test()
{
var i;
champ_formulaire_Test.model.clear();
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_non_defini,
"texte": qsTr("Non défini"),
"actif": true });
if (flag_test_binaire)
{
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_strictement_superieur,
"texte": qsTr("Actif"),
"actif": true });
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_strictement_inferieur,
"texte": qsTr("Inactif"),
"actif": true });
}
else
{
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_strictement_inferieur,
"texte": qsTr("&lt; au seuil"),
"actif": true });
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_inferieur_ou_egal,
"texte": qsTr("&le; au seuil"),
"actif": true });
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_egal,
"texte": qsTr("= au seuil"),
"actif": true });
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_superieur_ou_egal,
"texte": qsTr("&ge; au seuil"),
"actif": true });
champ_formulaire_Test.model.append( {
"valeur": shipheart_test_strictement_superieur,
"texte": qsTr("&gt; au seuil"),
"actif": true });
}
// Mise à jour de l'index courant du modèle :
i = recherche_index_valeur_modele(test, champ_formulaire_Test.model, "Test");
if (i === -1) champ_formulaire_Test.currentIndex = recherche_index_valeur_modele(0, champ_formulaire_Test.model, "Test");
else champ_formulaire_Test.currentIndex = i;
}
//=============================================================================================================
// Recherche de l'index d'une certaine valeur dans un modele
//=============================================================================================================
function recherche_index_valeur_modele(cible, modele, nom_modele)
{
var i;
for (i=0; i<modele.count; i ++)
{
if (modele.get(i).valeur === cible) break; // Cas où la valeur cible a été trouvée parmi les valeurs du modèle
}
if (i === modele.count)
{
console.log("Aucune valeur trouvée pour cible = [" + cible + "] du modèle = " + nom_modele);
i = -1; // Cas où la valeur n'a pas été trouvée parmi les valeurs du modèle
}
//else console.log("Valeur trouvée : [" + i + "] pour cible = [" + cible + "] soit texte = [" + modele.get(i).texte + "]");
return(i);
}
}