//========================================================================================================================================================================
// CONFIG_EVENT.QML
// Ce fichier traite la configuration d'un évènement. La page permet notamment de :
// - Modifier la config de l'évènement (ou de le créer la première fois),
// - Supprimer l'évènement
// La page est appelée depuis la page config_events.qml, en cliquant sur l'évènement à modifier (ou sur le '+' en vue d'une création)
//========================================================================================================================================================================
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQml.Models
import qt.koriolan.shipheart 1.0
import"fonctions.js" as Fonctions
import"fonctions_date_heure.js" as Fonctions_date_heure
Shipheart_page {
id: page_config_evenement
// Mise en forme - Largeur :
readonly property double pourcentage_largeur_colonne_gauche: 0.75
readonly property double espace_colonnes_principales: 20
readonly property double pourcentage_largeur_labels_formulaire: 0.5
readonly property double pourcentage_largeur_unites_formulaire: 0.1
readonly property int largeur_bouton_suite: 15
readonly property double pourcentage_bandeau_bas_largeur_zone_retour: 1
readonly property int nombre_widgets_heure_par_ligne: 12
// Mise en forme - Hauteur :
readonly property double pourcentage_hauteur_ligne_haut: 1
readonly property int hauteur_ligne_formulaire: 60
readonly property int hauteur_bouton_droit: 80
readonly property int espace_lignes_principales: 20
readonly property double affichage_hauteur_utile: shipheart_hauteur_page - shipheart_hauteur_bandeau_haut - shipheart_hauteur_bandeau_bas
// Timings :
readonly property int periode_init_raffraichissement_parametres: 1 // En ms
readonly property int periode_raffraichissement_parametres: 1000 // En ms
readonly property int step_timer_appui_long: 30 // en ms
// Affichage :
property bool flag_init: true // Permet de bloquer certains affichage tant que l'init n'est pas terminée
// Données :
property int valeur_timer_appui_long: 0
property int id_event: 0
property string nom: ""
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 int tempo: 0
property string conditions_horaires: ""
property string action_circuits: ""
property int index_condition_horaire_en_cours: -1
property int index_circuit_en_cours: -1
property bool flag_test_binaire: false // Indique si l'évènement porte sur une condition binaire ou non (exemple: Capteur>Entrée AUX)
property int nombre_action_circuits: 0 // Stocke le nombre d'actions sur des circuits (autre que "Aucune action") car on est limité à 'shipheart_max_nombre_action_circuits_par_event'
// Modèles :
// Note : les modèles chargés dans 'main.qml' n'ont pas à être rechargés dans les pages suivantes
//===========================================================
// 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 {
}
}
}
//===========================================================
// Timer pour gérer les appuis longs :
//===========================================================
Timer {
id: timer_appui_long
interval: step_timer_appui_long
triggeredOnStart: false
repeat: true
onTriggered: {
if (valeur_timer_appui_long < shipheart_mouse_press_and_hold_interval_tres_long) valeur_timer_appui_long+= step_timer_appui_long;
else // Le fait de ne pas utilise le OnPressandHold permet d'être sût que la sortie se fait au même moment que la fin du comptage (sinon, on peut avoir de petits décalages)
{
timer_appui_long.running = false;
valeur_timer_appui_long = 0;
if (mousearea_bouton_supprimer.pressed)
{
suppression_event();
timer_tempo_reconfiguration.restart(); // Lancement du timer pour attendre la fin de la reconfiguration
}
}
}
}
// Titre de la page :
Shipheart_titre_1 {titre: (id_event === 0) ? qsTr("Création d'un évènement") : qsTr("Configuration de l'évènement"); 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: affichage_hauteur_utile - hauteur_ligne_formulaire // Cette valeur permet de bien remonter les drniers champs (utile dans le cas de Textarea notamment) en laissant toujours une hauteur de lugne de formulaire au moins (évite qu'on "perde" l'affichage qui serait trop décalé vers le haut)
color: "transparent"
}
ObjectModel {
id: modele_grille_principale
//-------------------------------------------------------------------------------
// Ligne de formulaire : Nom
Rectangle {
id: ligne_nom
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
Shipheart_formulaire_label {
text: qsTr("Nom de l'évènement")
width: parent.width * pourcentage_largeur_labels_formulaire
couleur: (champ_formulaire_Nom.text !== "")
? shipheart_formulaire_couleur_texte_par_defaut
: shipheart_formulaire_couleur_texte_en_erreur
}
Shipheart_formulaire_textfield {
id: champ_formulaire_Nom
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
x: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Type_source
Rectangle {
id: ligne_type_source
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
Shipheart_formulaire_label {
text: qsTr("Type de la source")
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;
if (type_source > 0) mise_a_jour_source();
else if (type_source === 0) mise_a_jour_parametres_generaux(); // Conditions horaires seulement...
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : ID_Source
Rectangle {
id: ligne_source
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: (champ_formulaire_Type_source.currentIndex !== 0)
&& (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();
id_source = champ_formulaire_Source.model.get(champ_formulaire_Source.currentIndex).valeur;
mise_a_jour_variable();
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : ID_Variable
Rectangle {
id: ligne_variable
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_source.visible
&& (champ_formulaire_Source.currentIndex !== 0)
&& (type_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 de la source")
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();
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_parametres_generaux();
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Test
Rectangle {
id: ligne_test
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: (ligne_variable.visible ||
( ligne_source.visible
&& (champ_formulaire_Source.currentIndex !== 0)
&& (type_source !== 0)
&& (champ_formulaire_Variable.model.count <= 2)) )
&& (champ_formulaire_Variable.currentIndex !== 0)
&& (type_source !== 0)
Shipheart_formulaire_label {
text: qsTr("Déclenchement si")
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 {
id: ligne_seuil
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_test.visible
&& (champ_formulaire_Test.currentIndex !== 0)
&& (type_source !== 0)
&& (!flag_test_binaire) // Si on est sur un test binaire, il est inutile d'afficher le seuil...
Shipheart_formulaire_label { // Label :
text: qsTr("Seuil de déclenchement")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_textfield { // Champ de saisie :
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
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Tempo
Rectangle {
id: ligne_tempo
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_test.visible // NB : On remonte au niveau du Test car le Seuil peut ne pas être affiché (cas des tests binaires)
&& (champ_formulaire_Test.currentIndex !== 0)
&& (type_source !== 0)
Shipheart_formulaire_label { // Label :
text: qsTr("Temporisation de déclenchement")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_textfield { // Champ de saisie :
id: champ_formulaire_Tempo
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: qsTr("s")
width: parent.width * pourcentage_largeur_unites_formulaire
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Visibilite
Rectangle {
id: ligne_visibilite
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: (ligne_tempo.visible) || (type_source === 0) // SDIR #240
Shipheart_formulaire_label {
text: qsTr("Masquer sur la page d'accueil")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Visibilite
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//===========================================================
// Séparation :
//===========================================================
Rectangle {
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: 20
color: "transparent"
Shipheart_formulaire_ligne_separation {
visible: zone_conditions_horaires.visible
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
epaisseur_ligne: 3
force: shipheart_formulaire_ligne_separation_force_elevee
}
}
Shipheart_titre_2 {
titre:qsTr("Conditions horaire");
hauteur: shipheart_hauteur_bandeau_haut
visible: zone_conditions_horaires.visible
}
//===========================================================
// Conditions horaires de la commande :
//===========================================================
Rectangle {
id: zone_conditions_horaires
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: grille_conditions_horaires.model.count * (hauteur_ligne_formulaire + spacing)
color: "transparent"
visible: ((type_source !== 0) && (ligne_tempo.visible))
|| (type_source === 0)
GridView {
id: grille_conditions_horaires
width: parent.width
height: parent.height
cellWidth: parent.width;
cellHeight: hauteur_ligne_formulaire
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
interactive: false // (cf SDIR #223). Comme on affiche tous les éléments du modèle, il est inutile de la laisser interactive (ce qui peut compliquer le défilement entre la liste principale et celle-ci).
model: ListModel { }
delegate: Rectangle {
width: grille_conditions_horaires.cellWidth
height: grille_conditions_horaires.cellHeight
color: "transparent"
Rectangle {
height: parent.height - 10
width: parent.width - 10
visible: (!model.bouton) || // On n'afficha pas le bouton '+'...
((grille_conditions_horaires.model.count - 1) < shipheart_max_nombre_conditions_horaires_par_event) // ... si le nombre de conditions est trop important
color: shipheart_couleur_fond_bouton
radius: shipheart_rayon_bouton
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}
Text {
anchors.fill: parent
verticalAlignment: Qt.AlignVCenter
horizontalAlignment: (!model.bouton) ? Qt.AlignLeft : Qt.AlignHCenter
leftPadding: (!model.bouton) ? 20 : 0
text: model.libelle
color: couleur_blanc_casse
font.pixelSize: (!model.bouton) ? 18 : (hauteur_ligne_formulaire * 0.8)
}
MouseArea{
anchors.fill : parent
onClicked: {
shipheart_clic();
if (model.bouton) // Cas du bouton '+'
{
index_condition_horaire_en_cours = -1; // Marqueur pour indiquer l'ajout d'un élément
boite_selection_condition_horaire.valeur_tumbler_jour = 8; // Tous les jours par défaut
boite_selection_condition_horaire.valeur_tumbler_heure = 0;
boite_selection_condition_horaire.valeur_tumbler_minute = 0;
boite_selection_condition_horaire.boutonSupprimer = false;
}
else // Cas d'une modification de condition existante :
{
index_condition_horaire_en_cours = index;
boite_selection_condition_horaire.valeur_tumbler_jour = model.jour;
boite_selection_condition_horaire.valeur_tumbler_heure = model.heure;
boite_selection_condition_horaire.valeur_tumbler_minute = model.minute;
boite_selection_condition_horaire.boutonSupprimer = true;
}
boite_selection_condition_horaire.open();
}
}
}
Text {
anchors.fill: parent
visible: (model.bouton) && // Affiche à la place du bouton '+'...
((grille_conditions_horaires.model.count - 1) >= shipheart_max_nombre_conditions_horaires_par_event) // ... et si le nombre de conditions est trop important
verticalAlignment: Qt.AlignVCenter
horizontalAlignment: Qt.AlignHCenter
text: qsTr("Le nombre maximal de conditions horaires [%1] est atteint : ajout impossible...").arg(shipheart_max_nombre_conditions_horaires_par_event)
color: couleur_orange
font.pixelSize: 15
opacity: 0.7
}
}
Label {
anchors.fill: parent
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
visible: parent.count === 0
text: qsTr("Aucune condition horaire n'est configurée pour cet évènement...")
color: couleur_rouge_transparent
font.pixelSize: 15
font.bold: true
wrapMode: Label.Wrap
}
} // Fin de Gridview
} // Fin des conditions horaires
//===========================================================
// Séparation :
//===========================================================
Rectangle {
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: 20
color: "transparent"
Shipheart_formulaire_ligne_separation {
visible: zone_conditions_horaires.visible
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
epaisseur_ligne: 3
force: shipheart_formulaire_ligne_separation_force_elevee
}
}
Shipheart_titre_2 {
titre:qsTr("Signalisation");
hauteur: shipheart_hauteur_bandeau_haut
visible: zone_conditions_horaires.visible
}
//===========================================================
// Alarmes :
//===========================================================
//-------------------------------------------------------------------------------
// Ligne de formulaire : Alarme_son
Rectangle {
id: ligne_alarme_son
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: zone_conditions_horaires.visible
Shipheart_formulaire_label {
text: qsTr("Alarme sonore")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Alarme_son
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onCheckedChanged: {
if (!flag_init && champ_formulaire_Alarme_son.checked) // Si on veut une alarme sur son...
{
if (!champ_formulaire_Alarme_message.checked)
{
champ_formulaire_Alarme_message.checked = true; // ... il FAUT que l'alarme par message soit validée
boite_information.niveau = 0;
boite_information.imageTitreSource = "/images/ampoule.png"
boite_information.message = qsTr("La validation des alarmes sonores a nécessité de valider également l'affichage des messages liés à cet évènement.
Cet affichage est en effet nécessaire au fonctionnement des alarmes sonores, afin de pouvoir les acquitter.");
boite_information.alignementMessage = Text.AlignHCenter
boite_information.open();
}
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Alarme_led
Rectangle {
id: ligne_alarme_led
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_alarme_son.visible
Shipheart_formulaire_label {
text: qsTr("Alarme sur LED")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Alarme_led
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onCheckedChanged: {
if (!flag_init && champ_formulaire_Alarme_led.checked) // Si on veut une alarme sur led...
{
if (!champ_formulaire_Alarme_message.checked)
{
champ_formulaire_Alarme_message.checked = true; // ... il FAUT que l'alarme par message soit validée
boite_information.niveau = 0;
boite_information.imageTitreSource = "/images/ampoule.png"
boite_information.message = qsTr("La validation des alarmes sur LED a nécessité de valider également l'affichage des messages liés à cet évènement.
Cet affichage est en effet nécessaire au fonctionnement des alarmes sur LED, afin de pouvoir les acquitter.");
boite_information.alignementMessage = Text.AlignHCenter
boite_information.open();
}
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Alarme_soutien
Rectangle {
id: ligne_alarme_soutien
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
// visible: ligne_alarme_son.visible
visible: false
Shipheart_formulaire_label {
text: qsTr("Alarme sur sortie(s) de soutien")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Alarme_soutien
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onCheckedChanged: {
if (!flag_init && champ_formulaire_Alarme_led.checked) // Si on veut une alarme sur soutien...
{
if (!champ_formulaire_Alarme_message.checked)
{
champ_formulaire_Alarme_message.checked = true; // ... il FAUT que l'alarme par message soit validée
boite_information.niveau = 0;
boite_information.imageTitreSource = "/images/ampoule.png"
boite_information.message = qsTr("La validation des alarmes sur sortie(s) de soutien a nécessité de valider également l'affichage des messages liés à cet évènement.
Cet affichage est en effet nécessaire au fonctionnement des alarmes sur sortie(s) de soutien, afin de pouvoir les acquitter.");
boite_information.alignementMessage = Text.AlignHCenter
boite_information.open();
}
}
}
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Alarme_source
Rectangle {
id: ligne_alarme_source
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_alarme_son.visible
Shipheart_formulaire_label {
text: qsTr("Alarme sur la source")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Alarme_source
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
}
Shipheart_formulaire_ligne_separation {
haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse
}
}
//-------------------------------------------------------------------------------
// Ligne de formulaire : Alarme_message
Rectangle {
id: ligne_alarme_message_checkbox
width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2)
height: visible ? hauteur_ligne_formulaire : 0
color: "transparent"
visible: ligne_alarme_son.visible
Shipheart_formulaire_label {
text: qsTr("Affichage message sur ShipBase")
width: parent.width * pourcentage_largeur_labels_formulaire
}
Shipheart_formulaire_checkbox {
id: champ_formulaire_Alarme_message
width: parent.width * (1 - pourcentage_largeur_labels_formulaire)
onCheckedChanged: {
if (!flag_init && !champ_formulaire_Alarme_message.checked) // Si l'alarme par message est dévalidée...
{
if (champ_formulaire_Alarme_son.checked
|| champ_formulaire_Alarme_led.checked
|| champ_formulaire_Alarme_soutien.checked)
{
champ_formulaire_Alarme_son.checked = false; // ... on est obligé de dévaliser l'alarme son
champ_formulaire_Alarme_led.checked = false; // ... et l'alarme LED
champ_formulaire_Alarme_soutien.checked = false; // ... et l'alarme soutien car on ne pourrait pas ensuite les acquitter...
boite_information.niveau = 0;
boite_information.imageTitreSource = "/images/ampoule.png"
boite_information.message = qsTr("La dévalidation de l'affichage des messages a nécessité de dévalider également :