Import initial du projet shipheart_cm5
This commit is contained in:
@@ -0,0 +1,874 @@
|
||||
//========================================================================================================================================================================
|
||||
// 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("< au seuil"),
|
||||
"actif": true });
|
||||
champ_formulaire_Test.model.append( {
|
||||
"valeur": shipheart_test_inferieur_ou_egal,
|
||||
"texte": qsTr("≤ 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("≥ au seuil"),
|
||||
"actif": true });
|
||||
champ_formulaire_Test.model.append( {
|
||||
"valeur": shipheart_test_strictement_superieur,
|
||||
"texte": qsTr("> 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user